Please note!
There will be some churn and backwards breaking changes here as we stabilize the API and smooth out the rough corners.
A few current rough edges:
Get your API key from the Integrations page in the API Access section.
Your API key should be passed through as a bearer token. So your Authorization header will contain a value of
Bearer: <YOUR TOKEN>
All requests should be made to
https://app.rocketsource.io
Example:
curl -H "Authorization: Bearer YOUR_TOKEN" "https://app.rocketsource.io/api/v3/scans"
Fetches all completed scans.
Params:
Uploads a new scan. Accepts a multipart form upload with the following params:
Attributes schema
interface UploadRequest {
mapping: {
// All values in the mapping object are column numbers, 0-indexed.
id: number;,
cost: number;,
supplier_sku?: number,
supplier_image?: number,
supplier_pack_quantity?: number,
map?: number,
stock_quantity?: number,
// an array of any custom columns you want to pass through
custom_columns: number[],
discount_per_product?: number,
};
options: {
// one of "US", "CA", "DE", etc. Requires that your seller account have access to the given marketplace
marketplace_id: string;
// a name for your scan
name: string;
discount_supplier?: number;
custom_columns?: string[];
header?: boolean;
multipack_prep_cost?: {
enabled: boolean;
firstN: number;
costForFirstN: number;
costForRest: number;
};
prep_cost?: number;
multipack_override?: boolean;
multipack_override_quantity?: number;
pull_historical_data?: boolean;
};
}The most simple upload payload would look like the below JSON. This assumes that your identifiers are in the first column and your costs are in the second.
{
"mapping": {
"id": 0,
"cost": 1,
},
"options": {
"marketplace_id": "US",
"name": "My Scan"
}
}Returns the result data for a given scan id.
Accepts JSON requests with the following params:
Filter items are JSON objects with the following structure:
{
"name": "profit",
"operator": ">",
"value": 10
}Deletes a scan by it's id.
Download a CSV file of your resulting data
Download a XLSX file of your resulting data
Download your scan results as a JSON file. Returns an array of product objects with all available data fields.
Request Format (optional - omit for all results)
| Field | Type | Description |
|---|---|---|
| filter | Array | Array of filter objects (see filter schema above) |
| sort | String | Field to sort by. Prefix with - for descending order |
| page | Number | Page number (default: 1) |
| per_page | Number | Results per page (default: 50, max: 100) |
Request Example
{
"filter": [
{
"name": "profit",
"operator": ">",
"value": 500
},
{
"name": "roi",
"operator": ">=",
"value": 30
}
],
"sort": "-profit",
"page": 1,
"per_page": 100
}Response Format
Returns an array of product objects. All monetary values are in cents. Percentages (margin, ROI) are in basis points (30% = 3000).
[
{
"id": 12345,
"asin": "B001GRWOZ0",
"amazon_title": "Example Product Title",
"brand": "Example Brand",
"category": "Electronics",
"rank": 5432,
"buybox_price": 2999,
"inputs": {
"identifier": "123456789012",
"cost": 1500,
"stock": 100,
"supplier_sku": "SKU-123",
"supplier_pack_quantity": 1
},
"financials": {
"profit": 850,
"margin": 2833,
"roi": 5667,
"prep_cost": 50,
"inbound_shipping": 100,
"net_revenue": 2500
},
"amazon_fees": {
"referral_fee": 450,
"fba_fees": 354,
"per_item_fee": null,
"variable_closing_fee": null
},
"dimensions": {
"package_dimensions": {
"length": 10.5,
"width": 8.0,
"height": 3.0,
"weight": 1.2
},
"item_dimensions": {
"length": 9.0,
"width": 7.0,
"height": 2.5,
"weight": 0.8
}
},
"identifiers": {
"upc": ["123456789012"],
"ean": ["1234567890123"]
},
"size_tier": "Small Standard",
"lowest_price_new_fba": 2899,
"lowest_price_new_fbm": 2799,
"new_fba_offers_count": 5,
"new_fbm_offers_count": 12,
"total_offers_count": 17,
"competitive_sellers": 8,
"is_hazmat": false,
"is_meltable": false,
"is_adult": false,
"small_and_light_eligible": true,
"inbound_eligibility": {
"eligible": true,
"updated_at": 1704067200,
"ineligible_codes": []
}
}
]Key Response Fields
| Field | Type | Description |
|---|---|---|
| asin | String | Amazon Standard Identification Number |
| amazon_title | String | Product title from Amazon |
| buybox_price | Number | Buy Box price in cents |
| rank | Number | Best Sellers Rank |
| inputs | Object | Your input data (cost, stock, supplier info) |
| financials | Object | Calculated profit, margin, ROI |
| amazon_fees | Object | FBA fees, referral fees, etc. |
| dimensions | Object | Package and item dimensions |
| identifiers | Object | UPC, EAN, ISBN, GTIN codes |
| inbound_eligibility | Object | FBA inbound eligibility status |
Cancels an ongoing scan by its id.
Exports your scan results to Google Sheets. Requires the Google Sheets integration to be set up.
Convert Universal Product Codes (UPC) to find matching ASINs. Returns ASIN and other identifiers.
Note: Items without a matching ASIN will be omitted from the response.
Request Format
| Field | Type | Description | Constraints |
|---|---|---|---|
| marketplace | String | The marketplace code (e.g., "US", "UK") | Required |
| ids | Array of Strings | List of UPC values to convert | Min: 1, Max: 20 items |
Request Example
{
"marketplace": "US",
"ids": [
"0385086954",
"0062316095"
]
}Response Example (ASIN first, followed by other identifiers)
{
"0385086954": [
"B001GRWOZ0",
"9780385086950"
],
"0062316095": [
"B00ABC1234",
"9780062316098"
]
}Convert European Article Numbers (EAN) to find matching ASINs. Returns ASIN and other identifiers.
Note: Items without a matching ASIN will be omitted from the response.
Request Format
| Field | Type | Description | Constraints |
|---|---|---|---|
| marketplace | String | The marketplace code (e.g., "DE", "UK") | Required |
| ids | Array of Strings | List of EAN values to convert | Min: 1, Max: 20 items |
Request Example
{
"marketplace": "DE",
"ids": [
"9780385086950",
"5901234123457"
]
}Response Example (ASIN first, followed by other identifiers)
{
"9780385086950": [
"B001GRWOZ0",
"0385086954"
],
"5901234123457": [
"B00XYZ789AB"
]
}Convert International Standard Book Numbers (ISBN) to find matching ASINs. Returns ASIN and other identifiers.
Note: Items without a matching ASIN will be omitted from the response.
Request Format
| Field | Type | Description | Constraints |
|---|---|---|---|
| marketplace | String | The marketplace code (e.g., "US", "UK") | Required |
| ids | Array of Strings | List of ISBN values to convert | Min: 1, Max: 20 items |
Request Example
{
"marketplace": "US",
"ids": [
"1501142976",
"0062316095"
]
}Response Example (ASIN first, followed by other identifiers)
{
"1501142976": [
"B00ISBN123",
"9781501142970"
],
"0062316095": [
"B00ISBN456",
"9780062316098"
]
}Returns all the product identifiers (UPC, EAN, etc.) for the specified ASINss.
Request Format
| Field | Type | Description | Constraints |
|---|---|---|---|
| marketplace | String | The marketplace code (e.g., "US", "UK", "CA") | Required |
| asins | Array of Strings | List of ASINs to convert | Min: 1, Max: 1,000 items |
{
"marketplace": "US",
"asins": [
"B001GRWOZ0",
"B001GRWOZ9"
]
}Response Format
The response is a map where:
{
"B001GRWOZ0": {
"upc": ["0385086954"],
"ean": ["9780385086950"],
"isbn": ["1501142976"]
},
"B001GRWOZ9": {
"upc": ["0385086954"],
"ean": ["9780385086950"],
"isbn": ["1501142976"]
}
}Webhooks allow you to receive real-time notifications when events occur in your account. When an event is triggered, we'll send an HTTP POST request to your configured URL with details about the event.
Security Requirements
Returns all webhooks configured for your account.
Response Example
[
{
"id": 123,
"account_id": 456,
"user_id": 789,
"name": "My Webhook",
"url": "https://example.com/webhook",
"events": ["scan.complete"],
"is_active": true,
"created_at": "2026-02-03T14:30:00",
"updated_at": "2026-02-03T14:30:00"
}
]Note: The secret field is never returned in list or get responses.
Returns a specific webhook by ID.
Creates a new webhook. The secret is returned only in this response.
Limit: Up to 10 webhooks per account.
Request Format
| Field | Type | Description | Required |
|---|---|---|---|
| name | String | A friendly name for the webhook | Yes |
| url | String | The HTTPS URL to receive webhook POSTs | Yes |
| events | Array | Events to subscribe to. Currently only scan.complete is supported | No (defaults to ["scan.complete"]) |
Request Example
{
"name": "My Webhook",
"url": "https://example.com/webhook",
"events": ["scan.complete"]
}Response Example
{
"id": 123,
"account_id": 456,
"user_id": 789,
"name": "My Webhook",
"url": "https://example.com/webhook",
"secret": "a1b2c3d4e5f6...",
"events": ["scan.complete"],
"is_active": true,
"created_at": "2026-02-03T14:30:00",
"updated_at": "2026-02-03T14:30:00"
}Important
Save the secret value immediately. It will not be shown again.
Updates an existing webhook. All fields are optional.
Request Format
| Field | Type | Description |
|---|---|---|
| name | String | Update the webhook name |
| url | String | Update the webhook URL (must be HTTPS) |
| events | Array | Update subscribed events |
| is_active | Boolean | Enable or disable the webhook |
Request Example
{
"name": "Updated Name",
"url": "https://example.com/new-webhook",
"is_active": false
}Deletes a webhook. This action cannot be undone.
Response
{ "deleted": true }Generates a new signing secret for the webhook. The old secret will immediately stop working. Use this if you believe your secret has been compromised.
The response includes the new secret value (shown only once).
When an event occurs, we send a POST request to your webhook URL with the following headers:
| Header | Description |
|---|---|
| Content-Type | application/json |
| X-Rocketsource-Event | The event type (e.g., scan.complete) |
| X-Rocketsource-Signature | HMAC-SHA256 signature: sha256=<hex> |
scan.complete Payload
Sent when a scan finishes (success, error, or cancelled).
{
"event": "scan.complete",
"timestamp": "2026-02-03T14:30:00Z",
"scan": {
"id": 12345,
"name": "Supplier Upload",
"status": "success",
"marketplace_id": 1,
"products": 1500,
"errors": 25,
"speed": 45000,
"lines": 1525,
"created_at": "2026-02-03T14:25:00",
"completed_at": "2026-02-03T14:30:00Z"
}
}| Field | Description |
|---|---|
| event | The event type |
| timestamp | ISO 8601 timestamp of when the webhook was sent |
| scan.id | The scan ID |
| scan.status | One of: success, error, cancelled |
| scan.products | Number of successfully processed products |
| scan.errors | Number of rows that resulted in errors |
| scan.speed | Processing speed in products per minute |
| scan.lines | Total input lines in the uploaded file |
Every webhook request includes an X-Rocketsource-Signature header containing an HMAC-SHA256 signature. You should verify this signature to ensure the request came from Rocket Source.
The signature is computed as:
sha256=HMAC-SHA256(webhook_secret, request_body)
Node.js Example
const crypto = require('crypto');
const express = require('express');
function verifySignature(payloadBuffer, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payloadBuffer)
.digest('hex');
// signature header format: "sha256=<hex>"
const received = (signature || '').replace('sha256=', '');
if (expected.length !== received.length) return false;
return crypto.timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(received, 'hex'));
}
// Express.js example
const app = express();
// IMPORTANT: Verify the signature against the *raw request body bytes*.
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-rocketsource-signature'];
const payload = req.body; // Buffer
if (!verifySignature(payload, signature, process.env.WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process the webhook...
res.status(200).send('OK');
});Best Practices
Retry Behavior
If your endpoint returns a non-2xx status code or times out, we'll retry up to 3 times with exponential backoff (2s, 4s, 8s delays).
Complete reference for the JSON export response schema. Each product in the response array contains the following structure.
| Field | Type | Description |
|---|---|---|
| id | Number | Internal product ID |
| asin | String | Amazon ASIN |
| amazon_title | String | Product title from Amazon |
| brand | String | Product brand |
| color | String | Product color |
| size_name | String | Size variation name |
| category | String | Amazon category |
| rank | Number | Best Sellers Rank (BSR) |
| buybox_price | Number | Buy Box price (cents) |
| lowest_price_new_fba | Number | Lowest new FBA price (cents) |
| lowest_price_new_fbm | Number | Lowest new FBM price (cents) |
| lowest_price_used_fba | Number | Lowest used FBA price (cents) |
| lowest_price_used_fbm | Number | Lowest used FBM price (cents) |
| amazon_pack_quantity | Number | Units per Amazon listing |
| size_tier | String | FBA size tier classification |
| competitive_sellers | Number | Number of competitive sellers |
| new_fba_offers_count | Number | Count of new FBA offers |
| new_fbm_offers_count | Number | Count of new FBM offers |
| total_offers_count | Number | Total offer count |
| number_of_variations | Number | Number of product variations |
| parent_asin | String | Parent ASIN for variations |
| is_hazmat | Boolean | Hazardous material flag |
| is_meltable | Boolean | Meltable product flag |
| is_adult | Boolean | Adult product flag |
| is_brand_blocklisted | Boolean | Brand is on blocklist |
| small_and_light_eligible | Boolean | FBA Small and Light eligible |
| units_per_month | Number | Estimated monthly unit sales |
| sales_per_month | Number | Estimated monthly revenue (cents) |
| profit_per_month | Number | Estimated monthly profit (cents) |
| inputs | Object | Your input data (see below) |
| financials | Object | Calculated financials (see below) |
| amazon_fees | Object | Amazon fee breakdown (see below) |
| dimensions | Object | Product dimensions (see below) |
| identifiers | Object | Product identifiers (see below) |
| inbound_eligibility | Object | FBA eligibility (see below) |
| images | Array | Product images by marketplace |
| errors | Array | Processing errors, if any |
| flags | Array | Product flags/warnings |
| Field | Type | Description |
|---|---|---|
| identifier | String | Original input identifier (UPC, ASIN, etc.) |
| cost | Number | Your cost per unit (cents) |
| stock | Number | Available stock quantity |
| map | Number | Minimum advertised price (cents) |
| supplier_title | String | Product title from supplier |
| supplier_sku | String | Supplier SKU |
| supplier_image | String | Supplier image URL |
| supplier_pack_quantity | Number | Units per supplier pack |
| discount_cost | Number | Cost after discounts (cents) |
| total_cogs | Number | Total cost of goods sold (cents) |
| custom_columns | Array | Your custom column values |
| Field | Type | Description |
|---|---|---|
| profit | Number | Calculated profit (cents) |
| margin | Number | Profit margin (basis points, 3000 = 30%) |
| roi | Number | Return on investment (basis points) |
| net_revenue | Number | Revenue after fees (cents) |
| prep_cost | Number | Prep cost per unit (cents) |
| inbound_shipping | Number | Inbound shipping cost (cents) |
| fba_storage_fees | Number | Monthly FBA storage fees (cents) |
| Field | Type | Description |
|---|---|---|
| referral_fee | Number | Amazon referral fee (cents) |
| fba_fees | Number | FBA fulfillment fee (cents) |
| per_item_fee | Number | Per-item fee if applicable (cents) |
| variable_closing_fee | Number | Variable closing fee (cents) |
| inbound_placement_fee | Number | FBA inbound placement fee (cents) |
| error | String | Fee calculation error, if any |
| Field | Type | Description |
|---|---|---|
| package_dimensions | Object | length, width, height (inches), weight (lbs) |
| item_dimensions | Object | length, width, height (inches), weight (lbs) |
| Field | Type | Description |
|---|---|---|
| upc | Array | Universal Product Codes |
| ean | Array | European Article Numbers |
| isbn | Array | International Standard Book Numbers |
| gtin | Array | Global Trade Item Numbers |
| jan | Array | Japanese Article Numbers |
| Field | Type | Description |
|---|---|---|
| eligible | Boolean | Whether product is FBA inbound eligible |
| updated_at | Number | Unix timestamp of last eligibility check |
| ineligible_codes | Array | FBA ineligibility reason codes (e.g., "FBA_INB_0004") |