Documentation menu

Make your first request

Send your key in a header, POST a request to a source, and the records come back as JSON in the same response. No client library is needed.

Get a key

Create a key at https://api.urakimon.com/account. The secret starts with urakimon_ and is shown once, when the key is created. Store it in an environment variable named URAKIMON_API_KEY; every sample on this site reads it from there.

Note. The secret cannot be shown again after creation. If you lose it, rotate the key on the account page: you get a new secret and the old one stops working at once. See Authentication.

Send the first request

POST /records/amazon runs the request while the connection is open and returns up to 500 records in one response. The body below is the example request for Amazon from the Amazon page; every field you leave out falls back to the source default.

curl

curl -X POST https://api.urakimon.com/records/amazon \
  -H "x-api-key: $URAKIMON_API_KEY" \
  -H "content-type: application/json" \
  -d '{"mode":"product","asins":["B0H1KXX5TL","B0F5HPCLGB","B0GG9BY46M"],"country":"US"}'

Node

const res = await fetch("https://api.urakimon.com/records/amazon", {
  method: "POST",
  headers: {
    "x-api-key": process.env.URAKIMON_API_KEY,
    "content-type": "application/json",
  },
  body: JSON.stringify({
    "mode": "product",
    "asins": [
      "B0H1KXX5TL",
      "B0F5HPCLGB",
      "B0GG9BY46M"
    ],
    "country": "US"
  }),
});
const { ok, records, count, error } = await res.json();
if (!ok) throw new Error(error);
console.log(count, "records");

Python

import os
import requests

res = requests.post(
    "https://api.urakimon.com/records/amazon",
    headers={"x-api-key": os.environ["URAKIMON_API_KEY"]},
    json={
        "mode": "product",
        "asins": [
            "B0H1KXX5TL",
            "B0F5HPCLGB",
            "B0GG9BY46M",
        ],
        "country": "US",
    },
)
res.raise_for_status()
records = res.json()["records"]
print(len(records), "records")

What comes back

The response is one JSON object.

FieldMeaning
oktrue when the run finished and the records are complete
recordsthe records, one object each
counthow many objects are in records
jobIdthe job behind this run; read it again with GET /jobs/{id}
statsrun counters: pushed, counts per event, failures
errorwhy the run failed, or null
mshow long the run took, in milliseconds
Example record
{  "source": "amazon",  "type": "product",  "event": "product-detail",  "id": "B0GG9BY46M",  "url": "https://www.amazon.com/dp/B0GG9BY46M",  "collectedAt": "2026-09-20T20:57:01.663Z",  "asin": "B0GG9BY46M",  "country": "US",  "title": "INFINMIND L511 Wireless Bluetooth Mouse, Multi-Device Programmable Mouse.",  "brand": "INFINMIND",  "rating": 4.7,  "reviewsCount": 84}

Example data: 12 of 43 fields shown. The Amazon page lists every field.

Every record carries the same six envelope fields, source, type, event, id, url and collectedAt, followed by the fields of that source. event is the name the record was billed under. A record we could not complete carries an error field and costs nothing; an item the source says does not exist comes back as a billed record with status: "not_found". Records and jobs explains the envelope.

If the request fails

A failed request returns { "ok": false, "error": "..." } and error says what to change. The three you are most likely to see first:

  • 401 invalid api key: the header is missing or the secret is wrong. Send it as x-api-key; a key in the query string is refused.
  • 413: maxItems is above 500. Submit the same body to POST /jobs/amazon instead and read the records in pages.
  • 429: too many requests this minute. Wait the number of seconds in the Retry-After header.

The full list is in Errors.

Next steps

  • Records and jobs: when to wait for the response and when to submit a job.
  • Jobs: runs above 500 records, paging and streaming.
  • API reference: every route, field and status code.