Skip to main content
Documentation

REST API

Authenticate with a Bearer API key (created in your seller dashboard under Integrations → API Access). The reference below is generated from the live API spec, so it always matches what the backend serves. Requires a Pro or Enterprise plan.

Base URL

Bearer token authentication is required on every request.


Use this root for all authenticated REST API requests.

https://supercatch.com/api/v1

Authentication Example

Include your API key in the Authorization header for every request.

curl https://supercatch.com/api/v1/listings \
  -H "Authorization: Bearer YOUR_API_KEY"

API Reference

Endpoint metadata, query parameters, response fields, and examples are generated from the shared API spec.


GET

/listings

List store listings

Returns non-deleted listings owned by the API key's store in newest-first order. Use pagination.nextCursor unchanged to request the next page.

listings:read

Use Cases

  • Sync active inventory into an ERP, warehouse tool, or marketplace feed builder.
  • Audit draft, reserved, sold, and showcase listings without scraping the seller UI.

Query Parameters

ParameterTypeDescription
status

Optional

string

Filters listings by lifecycle status. Omit this parameter to return every non-deleted listing status for the store.

DRAFT, PENDING, PROCESSING, ACTIVE, SOLD, RESERVED, +4 more

Example: ACTIVE

limit

Optional

integer

Maximum records to return. Values above 100 are clamped by the reader, and omitted values default to 50.

Example: 50

cursor

Optional

string

Opaque listing id returned in pagination.nextCursor. Pass it unchanged to continue from the previous page.

Example: clst_01hzn7y3d0qa9b5c2r8m4p6x7k

Response Fields

FieldTypeDescription
data[].idstring

Stable listing id. Use as an internal key or cursor value.

Example: clst_01hzn7y3d0qa9b5c2r8m4p6x7k

data[].slugstring

Public product/listing slug used by SuperCatch product URLs.

Example: 1993-topps-derek-jeter-98

data[].productTypestring

Catalog product family for routing and downstream taxonomy mapping.

SPORTS_CARD, NONSPORTS_CARD, TCG_CARD, VIDEO_GAME, TICKET, AUTOGRAPH, +1 more

Example: SPORTS_CARD

data[].statusstring

Current listing lifecycle status.

DRAFT, PENDING, PROCESSING, ACTIVE, SOLD, RESERVED, +4 more

Example: ACTIVE

data[].conditionstring

Seller-facing condition or grading bucket.

MINT, NEAR_MINT, EXCELLENT, GOOD, LIGHT_PLAYED, PLAYED, +2 more

Example: NEAR_MINT

data[].pricedecimal-string

Base listing price as an exact decimal string.

Example: 49.99

data[].salePricedecimal-string | null

Active sale price when one is configured; null otherwise.

Example: null

data[].quantityinteger

Total quantity attached to the listing.

Example: 1

data[].quantityAvailableinteger

Quantity currently available for purchase after holds and sales.

Example: 1

data[].imageUrlsstring[]

Public image URLs in display order.

Example: ["https://supercatch.com/cdn/listings/clst_front.webp"]

data[].createdAtdate-time

ISO-8601 creation timestamp.

Example: 2026-04-27T17:30:00.000Z

generatedAtdate-time

When this cached data page was computed.

Example: 2026-04-27T17:40:00.000Z

pagination.nextCursorstring | null

Cursor for the next page, or null when hasMore is false.

Example: clst_01hzn7y3d0qa9b5c2r8m4p6x7k

pagination.hasMoreboolean

True when another page is available.

Example: true

pagination.limitinteger

Effective page size after defaulting and clamping.

Example: 50

Example Response

{
  "data": [
    {
      "id": "clst_01hzn7y3d0qa9b5c2r8m4p6x7k",
      "slug": "1993-topps-derek-jeter-98",
      "productType": "SPORTS_CARD",
      "status": "ACTIVE",
      "condition": "NEAR_MINT",
      "price": "49.99",
      "salePrice": null,
      "quantity": 1,
      "quantityAvailable": 1,
      "imageUrls": [
        "https://supercatch.com/cdn/listings/clst_front.webp"
      ],
      "createdAt": "2026-04-27T17:30:00.000Z"
    }
  ],
  "generatedAt": "2026-04-27T17:40:00.000Z",
  "pagination": {
    "nextCursor": "clst_01hzn7y3d0qa9b5c2r8m4p6x7k",
    "hasMore": true,
    "limit": 50
  }
}
POST

/listings

Create draft listings

Pushes a batch of up to 25 cards into the API key's store as DRAFT listings owned by the store. Images are uploaded (remote URLs are re-hosted; base64 is stored to R2), catalog identity is matched, and each card lands in the seller's review queue. New drafts are grouped into a rolling batch job visible on /store/jobs (1-hour window, 500-card cap); the response jobId is pollable via GET /jobs/{jobId}. Send an Idempotency-Key header to make whole-request retries safe. Requests are rate-weighted by cards + images. Created listings are attributed to the store owner, never to a user id from the request.

listings:write

Use Cases

  • Push a scanning-app or external-inventory batch into the store as drafts for seller review before publishing.
  • Re-run the same import safely: each card's clientId makes creation idempotent, so retries replay instead of duplicating.
  • Track and review a push as a unit: returned jobId opens the batch on /store/jobs with per-card progress and counts.

Query Parameters

No query parameters.

Request Body

FieldTypeDescription
cards

Required

object[]

Array of card payloads to create. At least one, at most 25 per request. Excess returns a 422.

Example: [ { clientId, productType, featured, ... } ]

cards[].clientId

Required

string

Caller-stable id for the card, scoped to the store and connected app (stable across reinstall). API keys retain the shared store namespace. While the card is a draft, re-sending the same clientId updates it (status `duplicate`). Deleted IDs cannot be recreated. Ambiguous legacy app IDs require store-owner review.

Example: ext-row-00042

cards[].productType

Required

string

Catalog product family. Determines which identity fields are required.

SPORTS_CARD, NONSPORTS_CARD, TCG_CARD, VIDEO_GAME, TICKET, AUTOGRAPH, +1 more

Example: SPORTS_CARD

cards[].featured

Optional

string

Player, character, signer, or item name. Required for SPORTS_CARD, NONSPORTS_CARD, and TCG_CARD.

Example: Derek Jeter

cards[].series

Optional

string

Set/series name. Required for card product types.

Example: Topps

cards[].cardNumber

Optional

string

Card number within the set. Required for card product types.

Example: 98

cards[].year

Optional

string

Release year ("YYYY" or season "YYYY-YY"). Required for card product types.

Example: 1993

cards[].brand

Optional

string

Manufacturer. Required for card product types.

Example: Topps

cards[].condition

Optional

string

Seller-facing condition or grading bucket for the copy.

MINT, NEAR_MINT, EXCELLENT, GOOD, LIGHT_PLAYED, PLAYED, +2 more

Example: NEAR_MINT

cards[].price

Optional

number

Listing price in dollars. Optional for drafts; validated against store price bounds when present.

Example: 49.99

cards[].imageUrls

Optional

string[]

Image inputs in display order: each may be a public https URL (re-hosted to R2) or a base64 data URL (stored to R2). Max 20 per card, 100 per request.

Example: ["https://cdn.example.com/jeter-front.jpg"]

cards[].quantity

Optional

integer

Listing quantity (1-99, default 1). Unique items — graded cards and standalone autograph/memorabilia/ticket/video-game items — are always forced to 1.

Example: 1

cards[].sellerSku

Optional

string

Your own SKU for the copy; stored on the listing for reconciliation.

Example: BIN-A12-0042

cards[].shippingProfileId

Optional

string

Id of one of your shipping profiles to attach; omit to use the store default.

Example: shp_01hzn7y3d0qa9b5c2r8m4p6x7k

Example Request

{
  "cards": [
    {
      "clientId": "ext-row-00042",
      "productType": "SPORTS_CARD",
      "featured": "Derek Jeter",
      "series": "Topps",
      "cardNumber": "98",
      "year": "1993",
      "brand": "Topps",
      "condition": "NEAR_MINT",
      "price": 49.99,
      "imageUrls": [
        "https://cdn.example.com/jeter-front.jpg"
      ]
    }
  ]
}

Response Fields

FieldTypeDescription
data.createdinteger

Number of cards that produced a new DRAFT listing in this request.

Example: 1

data.failedinteger

Number of cards that could not be created (see per-card error).

Example: 0

data.jobIdstring | null

Id of the /store/jobs batch the new drafts were grouped into (rolling 1-hour window, 500-card cap). Null when nothing new was created (e.g. all cards were idempotent duplicates or errors).

Example: imp_01hzn7y3d0qa9b5c2r8m4p6x7k

data.resultsobject

Per-card outcome array, aligned to the submitted cards by clientId.

Example: [{"clientId":"ext-row-00042","status":"created"}]

data.results[].clientIdstring

Echoes the submitted clientId so callers can correlate outcomes.

Example: ext-row-00042

data.results[].statusstring

created = new draft; duplicate = idempotent replay of a prior push; error = validation/creation failed.

created, duplicate, error

Example: created

data.results[].listingIdstring | null

Created (or replayed) listing id; null when status is error.

Example: clst_01hzn7y3d0qa9b5c2r8m4p6x7k

data.results[].slugstring | null

Listing slug when created; null on error.

Example: 1993-topps-derek-jeter-98

data.results[].listingStatusstring | null

Lifecycle status of the created listing (DRAFT for review-queue cards).

DRAFT, PENDING, PROCESSING, ACTIVE, SOLD, RESERVED, +4 more

Example: DRAFT

data.results[].linkedCatalogobject | null

Catalog product the card linked to or created. Present only when a catalog row was resolved at save time (existing-row link); omitted when status is error or no catalog identity was resolved yet.

Example: null

data.results[].linkedCatalog.catalogIdstring

Id of the linked catalog product.

Example: sc_01hzn7y3d0qa9b5c2r8m4p6x7k

data.results[].linkedCatalog.catalogTypestring

Catalog target key the product belongs to.

SPORTS_CARD, NONSPORTS_CARD, TCG_CARD, VIDEO_GAME, TICKET, AUTOGRAPH, +1 more

Example: SPORTS_CARD

data.results[].linkedCatalog.wasExistingboolean

True when the card linked to a catalog product that already existed; false when a new one was created for it.

Example: true

data.results[].catalogLinkRequiredboolean | null

True when the card is a TCG card with no exact catalog match. The listing stays DRAFT and cannot be submitted for review until the seller links it to a catalog product (or declares it not listed) in the card uploader. Omitted otherwise.

Example: null

data.results[].errorstring | null

Human-readable failure reason when status is error; null otherwise.

Example: null

Example Response

{
  "data": {
    "created": 1,
    "failed": 0,
    "jobId": "imp_01hzn7y3d0qa9b5c2r8m4p6x7k",
    "results": [
      {
        "clientId": "ext-row-00042",
        "status": "created",
        "listingId": "clst_01hzn7y3d0qa9b5c2r8m4p6x7k",
        "slug": "1993-topps-derek-jeter-98",
        "listingStatus": "DRAFT",
        "error": null
      }
    ]
  }
}
GET

/orders

List store orders

Returns orders owned by the API key's store in newest-first order. Use status and since filters to build incremental fulfillment or accounting imports.

orders:read

Use Cases

  • Pull new paid orders into shipping, accounting, or customer support systems.
  • Poll recent marketplace-imported orders without giving an external system admin access.

Query Parameters

ParameterTypeDescription
status

Optional

string

Filters by order lifecycle status. Omit this parameter to include all order statuses.

PENDING, PAID, PROCESSING, SHIPPED, DELIVERED, CANCELLED, +2 more

Example: PAID

since

Optional

date-time

Filters orders whose createdAt timestamp is greater than or equal to this ISO-8601 datetime.

Example: 2026-04-01T00:00:00.000Z

limit

Optional

integer

Maximum records to return. Values above 100 are clamped by the reader, and omitted values default to 50.

Example: 50

cursor

Optional

string

Opaque order id returned in pagination.nextCursor. Pass it unchanged to continue from the previous page.

Example: ord_01hzn80t0tbw67ez6j9r6p4b2m

Response Fields

FieldTypeDescription
data[].idstring

Stable order id.

Example: ord_01hzn80t0tbw67ez6j9r6p4b2m

data[].orderNumberstring

Buyer-facing order number.

Example: SC-100042

data[].storeOrderNumberinteger

Store-local numeric order sequence.

Example: 42

data[].statusstring

Current order lifecycle status.

PENDING, PAID, PROCESSING, SHIPPED, DELIVERED, CANCELLED, +2 more

Example: PAID

data[].subtotaldecimal-string

Item subtotal before tax and shipping.

Example: 49.99

data[].shippingCostdecimal-string

Shipping amount charged to the buyer.

Example: 5.00

data[].taxdecimal-string

Tax amount collected on the order.

Example: 4.13

data[].totalAmountdecimal-string

Final charged total.

Example: 59.12

data[].trackingNumberstring | null

Carrier tracking number when shipment tracking is available.

Example: 9400111206213999999999

data[].carrierstring | null

Shipping carrier label when known.

Example: USPS

data[].sourcePlatformstring | null

Marketplace/source system that produced the order, or null for native orders.

Example: supercatch

data[].itemCountinteger

Number of line items on the order.

Example: 1

data[].createdAtdate-time

ISO-8601 creation timestamp.

Example: 2026-04-27T17:35:00.000Z

data[].paidAtdate-time | null

Payment timestamp, or null before payment.

Example: 2026-04-27T17:36:00.000Z

data[].shippedAtdate-time | null

Shipment timestamp, or null before shipment.

Example: null

data[].deliveredAtdate-time | null

Delivery timestamp, or null before delivery.

Example: null

data[].cancelledAtdate-time | null

Cancellation timestamp, or null unless cancelled.

Example: null

generatedAtdate-time

When this cached data page was computed.

Example: 2026-04-27T17:40:00.000Z

pagination.nextCursorstring | null

Cursor for the next page, or null when hasMore is false.

Example: ord_01hzn80t0tbw67ez6j9r6p4b2m

pagination.hasMoreboolean

True when another page is available.

Example: true

pagination.limitinteger

Effective page size after defaulting and clamping.

Example: 50

Example Response

{
  "data": [
    {
      "id": "ord_01hzn80t0tbw67ez6j9r6p4b2m",
      "orderNumber": "SC-100042",
      "storeOrderNumber": 42,
      "status": "PAID",
      "subtotal": "49.99",
      "shippingCost": "5.00",
      "tax": "4.13",
      "totalAmount": "59.12",
      "trackingNumber": "9400111206213999999999",
      "carrier": "USPS",
      "sourcePlatform": "supercatch",
      "itemCount": 1,
      "createdAt": "2026-04-27T17:35:00.000Z",
      "paidAt": "2026-04-27T17:36:00.000Z",
      "shippedAt": null,
      "deliveredAt": null,
      "cancelledAt": null
    }
  ],
  "generatedAt": "2026-04-27T17:40:00.000Z",
  "pagination": {
    "nextCursor": "ord_01hzn80t0tbw67ez6j9r6p4b2m",
    "hasMore": true,
    "limit": 50
  }
}
POST

/orders/{orderId}/ship

Mark an order shipped with tracking

Records a tracking number and carrier against one of your orders, moves it to SHIPPED, emails the buyer, and pushes the tracking back to the source marketplace where that integration supports it. Posting again for an already-shipped order is treated as a tracking correction rather than a second shipment.

orders:write

Use Cases

  • Push tracking back from a 3PL or warehouse system as soon as a label is generated.
  • Correct a mistyped tracking number without re-notifying the buyer as a new shipment.
  • Close the fulfillment loop from an external ERP so marketplace tracking stays in sync.

Query Parameters

No query parameters.

Request Body

FieldTypeDescription
trackingNumber

Required

string

Carrier tracking number, 1-128 characters after trimming.

Example: 9400111899223197428490

carrier

Optional

string

Carrier name, 1-64 characters. Omit to leave the order's existing carrier unchanged.

Example: USPS

Example Request

{
  "trackingNumber": "9400111899223197428490",
  "carrier": "USPS"
}

Response Fields

FieldTypeDescription
data.successboolean

True when the order reached SHIPPED.

Example: true

data.order.idstring

SuperCatch identifier for the shipped order.

Example: ord_01J8Z2H2Q0X7T3

data.order.statusstring

Order lifecycle status after the write.

Example: SHIPPED

data.order.trackingNumberstring | null

Tracking number now recorded on the order.

Example: 9400111899223197428490

data.order.carrierstring | null

Carrier now recorded on the order.

Example: USPS

data.order.shippedAtdate-time | null

ISO-8601 timestamp when the order was first marked shipped.

Example: 2026-09-02T17:41:12.000Z

data.platformSyncobject | null

Result of pushing tracking to the source marketplace, when the order came from one.

Example: {"synced":true,"platform":"EBAY"}

Example Response

{
  "data": {
    "success": true,
    "order": {
      "id": "ord_01J8Z2H2Q0X7T3",
      "status": "SHIPPED",
      "trackingNumber": "9400111899223197428490",
      "carrier": "USPS",
      "shippedAt": "2026-09-02T17:41:12.000Z"
    },
    "platformSync": {
      "synced": true,
      "platform": "EBAY"
    }
  }
}
GET

/inventory

Get inventory snapshot

Returns a cached aggregate snapshot of listing counts and quantities for the API key's store. The snapshot avoids row-level image joins and is safe for dashboards.

inventory:read

Use Cases

  • Show current inventory totals in an external operations dashboard.
  • Compare sellable quantity against a warehouse or accounting system without paging every listing.

Query Parameters

No query parameters.

Response Fields

FieldTypeDescription
data.countsobject

Listing count by ListingStatus enum value.

Example: {"ACTIVE":128,"DRAFT":14,"SOLD":42}

data.totalListingsinteger

Total non-deleted listings across every status.

Example: 184

data.totalQuantityinteger

Sum of listing quantity across every non-deleted listing.

Example: 221

data.totalQuantityAvailableinteger

Sum of currently purchasable quantity after holds and sales.

Example: 173

data.generatedAtdate-time

ISO-8601 timestamp when the snapshot payload was generated.

Example: 2026-04-27T17:40:00.000Z

Example Response

{
  "data": {
    "counts": {
      "DRAFT": 14,
      "PENDING": 2,
      "PROCESSING": 0,
      "ACTIVE": 128,
      "SOLD": 42,
      "RESERVED": 3,
      "INACTIVE": 5,
      "REMOVED": 0,
      "REJECTED": 0,
      "SHOWCASE": 9
    },
    "totalListings": 203,
    "totalQuantity": 221,
    "totalQuantityAvailable": 173,
    "generatedAt": "2026-04-27T17:40:00.000Z"
  }
}
PATCH

/inventory/quantity

Set available quantity on listings

Sets the available quantity on up to 100 of your listings in one call. Runs through the same path as a seller bulk edit, so price history is recorded and every connected marketplace channel is marked for re-sync. Listings outside an editable status are skipped and reported rather than failing the batch.

inventory:write

Use Cases

  • Mirror stock levels from a warehouse or POS system on a schedule.
  • Zero out quantity across a set of listings after selling them elsewhere.
  • Restock a group of listings after a shipment arrives without touching each one by hand.

Query Parameters

No query parameters.

Request Body

FieldTypeDescription
listingIds

Required

string[]

Listing identifiers to update. Between 1 and 100 ids per request.

Example: ["lst_01J8Z2H2Q0X7T3","lst_01J8Z2H2Q0X7T4"]

quantity

Required

integer

Absolute available quantity to set on every listed id. Between 0 and 10000; 0 takes a listing out of stock.

Example: 3

Example Request

{
  "listingIds": [
    "lst_01J8Z2H2Q0X7T3",
    "lst_01J8Z2H2Q0X7T4"
  ],
  "quantity": 3
}

Response Fields

FieldTypeDescription
data.updatedinteger

Number of listings that took the new quantity.

Example: 2

data.skippedinteger

Number of listings filtered out before the write.

Example: 1

data.quantityinteger

Absolute quantity that was applied, echoed back.

Example: 3

data.rejectionsobject

Per-listing skip reasons, such as a status outside the editable set. Empty when every id was updated.

Example: [{"listingId":"lst_01J8Z2H2Q0X7T5","reason":"status_not_editable"}]

Example Response

{
  "data": {
    "updated": 2,
    "skipped": 1,
    "quantity": 3,
    "rejections": [
      {
        "listingId": "lst_01J8Z2H2Q0X7T5",
        "reason": "status_not_editable"
      }
    ]
  }
}
GET

/jobs/{jobId}

Get push/import job status

Returns the status and per-card counts of one of the store's batch jobs, including the API-push job returned by POST /listings. Poll it to confirm a push landed and how many cards were created; the cards themselves are reviewable on /store/jobs.

listings:read

Use Cases

  • Poll the jobId returned by POST /listings to confirm the batch landed and read its counts.
  • Drive an external dashboard from push/import job progress without scraping the seller UI.

Query Parameters

No query parameters.

Response Fields

FieldTypeDescription
data.idstring

Job id (matches the jobId from POST /listings).

Example: imp_01hzn7y3d0qa9b5c2r8m4p6x7k

data.namestring | null

Seller-facing job label.

Example: API push — 12 cards

data.statusstring

Job lifecycle status (COMPLETED for synchronous API pushes).

Example: COMPLETED

data.totalItemsinteger

Total cards grouped into the job.

Example: 12

data.successfulItemsinteger

Cards that produced a listing.

Example: 12

data.failedItemsinteger

Cards that failed to create.

Example: 0

data.createdAtdate-time

ISO-8601 job creation timestamp.

Example: 2026-04-27T17:30:00.000Z

data.updatedAtdate-time

Exact ISO-8601 native job version; changes when job state or checkpoint changes.

Example: 2026-04-27T17:30:05.000Z

data.completedAtdate-time | null

ISO-8601 completion timestamp; null while still open.

Example: 2026-04-27T17:30:05.000Z

Example Response

{
  "data": {
    "id": "imp_01hzn7y3d0qa9b5c2r8m4p6x7k",
    "name": "API push — 12 cards",
    "status": "COMPLETED",
    "totalItems": 12,
    "successfulItems": 12,
    "failedItems": 0,
    "createdAt": "2026-04-27T17:30:00.000Z",
    "updatedAt": "2026-04-27T17:30:05.000Z",
    "completedAt": "2026-04-27T17:30:05.000Z"
  }
}
GET

/analytics

Get sales and traffic analytics

Returns a per-day views/sales/revenue series for the API key's store plus window totals and derived rates. Aggregated from the seller daily snapshots, so it is cheap enough to poll on a dashboard refresh.

analytics:read

Use Cases

  • Chart store revenue and conversion in an external BI tool or spreadsheet.
  • Reconcile marketplace payouts against on-platform sales for a reporting period.
  • Alert when daily sales fall below a threshold without scraping the seller dashboard.

Query Parameters

ParameterTypeDescription
days

Optional

integer

Length of the reporting window in days, counting back from today. Defaults to 30 and is capped at 365.

Example: 30

Response Fields

FieldTypeDescription
data.windowDaysinteger

Reporting window actually applied after clamping to the 1-365 range.

Example: 30

data.daily[].datedate-time

UTC midnight ISO-8601 timestamp identifying the day.

Example: 2026-08-14T00:00:00.000Z

data.daily[].viewsinteger

Listing detail views recorded for the store that day.

Example: 412

data.daily[].salesinteger

Units sold that day across on-site and imported marketplace orders.

Example: 7

data.daily[].revenuedecimal-string

Gross revenue in USD for that day before fees.

Example: 318.45

data.daily[].newListingsinteger

Listings first published by the store that day.

Example: 12

data.totals.viewsinteger

Sum of listing views across the window.

Example: 11480

data.totals.salesinteger

Sum of units sold across the window.

Example: 168

data.totals.revenuedecimal-string

Sum of gross revenue in USD across the window.

Example: 7622.90

data.totals.newListingsinteger

Listings first published across the window.

Example: 240

data.totals.avgSalePricedecimal-string

Window revenue divided by window units sold, in USD.

Example: 45.37

data.avgDailyRevenuedecimal-string

Window revenue divided by `windowDays`, in USD.

Example: 254.10

data.avgDailySalesdecimal-string

Window units sold divided by `windowDays`.

Example: 5.60

data.conversionRatedecimal-string

Units sold as a percentage of listing views across the window.

Example: 1.46

data.generatedAtdate-time

ISO-8601 timestamp when the payload was generated.

Example: 2026-09-02T17:40:00.000Z

Example Response

{
  "data": {
    "windowDays": 30,
    "daily": [
      {
        "date": "2026-08-14T00:00:00.000Z",
        "views": 412,
        "sales": 7,
        "revenue": "318.45",
        "newListings": 12
      }
    ],
    "totals": {
      "views": 11480,
      "sales": 168,
      "revenue": "7622.90",
      "newListings": 240,
      "avgSalePrice": "45.37"
    },
    "avgDailyRevenue": "254.10",
    "avgDailySales": "5.60",
    "conversionRate": "1.46",
    "generatedAt": "2026-09-02T17:40:00.000Z"
  }
}

Rate Limits

Hourly request caps are enforced per API key. Rate limit headers are returned with every API response.


Pro Plan

1,000 requests/hour

Enterprise Plan

10,000 requests/hour

Free and starter plans do not include REST API access. Upgrade to pro or enterprise to enable API keys. Contact support for custom enterprise limits.

Was This Page Helpful?