Our team sets the subscription up on your account after you approve a sample and a rate: write to maya@proxies.sx or open Data Works in the dashboard. There is no self-serve checkout. Then any API key of that account reads the feed (no extra scope).
Canonical machine contract: /data-works/subscriptions/skill.md. If this page disagrees with the skill file, the skill file wins; if the skill file disagrees with the live API, the live API wins. Last verified: 2026-10-29, end to end on the live API.
curl -s https://api.proxies.sx/v1/data-works/flows -H "X-API-Key: psx_YOUR_KEY"
# -> [ { "_id": "<flowId>", "name": "Kavak Mexico VIN feed", "status": "active",
# "health": { "lastSuccessAt": "2026-10-29T18:59:04.361Z", "recordsLastRun": 273, "lastError": null },
# "subscription": { "priceUsd": 350, "includedRecords": 5000, "overagePerRecordUsd": 0.05, "requireFields": ["vin"],
# "periodStart": "2026-10-28T19:00:00.000Z", "periodEnd": "2026-11-28T19:00:00.000Z", "pausedReason": null, "canceledAt": null } } ]
The entry whose subscription is not null is your feed; keep its _id. health.lastSuccessAt is your last delivery and health.recordsLastRun its size; periodEnd is the next monthly charge.
We cut a delivery automatically once a day when new records exist. To cut one now:
curl -s -X POST https://api.proxies.sx/v1/data-works/flows/<flowId>/runs -H "X-API-Key: psx_YOUR_KEY"
# -> 201 { "_id": "<runId>", "trigger": "delivery", "status": "done", "manifest": { "rows": 273, ... } }
# -> 409 {"message":"No new records since the last delivery."} (nothing is created)
curl -s -o latest.csv https://api.proxies.sx/v1/data-works/flows/<flowId>/runs/latest/dataset.csv -H "X-API-Key: psx_YOUR_KEY"
curl -s -o latest.json https://api.proxies.sx/v1/data-works/flows/<flowId>/runs/latest/dataset.json -H "X-API-Key: psx_YOUR_KEY"
curl -s https://api.proxies.sx/v1/data-works/flows/<flowId>/runs -H "X-API-Key: psx_YOUR_KEY" # last 50 deliveries, newest first
Daily job for an agent: list runs, download every delivery whose _id you have not stored yet (oldest first, runs/<runId>/dataset.csv), store the _id. A download returns the same bytes every time, so retries are safe.
| column | type | meaning |
|---|---|---|
source | string | marketplace key, e.g. kavak |
listing_id | string | the marketplace's listing id |
make, model, trim | string | as listed |
year | number | model year |
mileage_km | number | odometer, km |
price, currency | number, string | asking price at delivery, e.g. MXN |
price_change | null | empty in subscription deliveries (each record is delivered once, when it first becomes ready) |
seller_type | string | dealer or private |
dealer_name | string | a dealer's business name; empty for private sellers |
city, state | string | location as listed (state may be empty) |
vin | string | 17-character VIN (always present on a VIN feed) |
status | string | active or removed at delivery time |
first_seen, last_seen | ISO 8601 | when our collector first and last saw the listing |
removed_at | ISO 8601 or null | when the listing disappeared, if before delivery |
listing_url | string or null | public listing page, when known |
image_urls | string | space-separated image URLs |
transmission, fuel_type, body_type | string or null | as listed |
A subscription may deliver a subset of columns (subscription.fields, empty = all) and only records where subscription.requireFields are present.
includedRecords cost overagePerRecordUsd each, charged at the period end. Each charge is booked once, with an invoice in the dashboard.| HTTP | message | next step |
|---|---|---|
| 201 | (delivery object) | download runs/<_id>/dataset.csv or .json |
| 409 | No new records since the last delivery. | normal: nothing new since your last delivery. Try after the next collector run (Kavak: every 4 h, plus ~30 min) or rely on the daily delivery; never poll faster than every 15 min |
| 409 | A delivery is already being prepared. | another request or the daily job is cutting one: wait 1-2 min, then list runs |
| 409 | This subscription has ended. | earlier deliveries stay downloadable; contact maya@proxies.sx to restart |
| 409 | This is a data subscription: contact support to change or end it. | pause / resume / delete are support-only for subscriptions |
| 402 | subscription_inactive: paused until the monthly charge is paid | a human tops up (billing, /quickstart/topup.md); deliveries resume within 15 min, nothing missed |
| 402 | subscription_inactive: renewing | the new period is being charged: retry in 15 min |
| 402 | records_used_up | this period's included records are delivered: wait for periodEnd, or top up when the plan has an overage rate |
| 404 | Flow not found. | wrong <flowId> or a key of another account: re-list GET /v1/data-works/flows with a key of the subscribed account |
| 404 | Run not found. | no delivery yet (or wrong <runId>): POST /runs or wait for the daily delivery |
| 400 | Invalid data format | the id is not a 24-character hex id: copy _id exactly |
| 401 | Authentication required... / Invalid or inactive API key | send X-API-Key: psx_...; a human creates keys at client.proxies.sx/account |
| 503 | Data subscriptions are not enabled. | switched off on our side; contact maya@proxies.sx |
Empty or short file? A 404 JSON body saved as latest.csv means there is no delivery yet: check the status first (curl -f or -w '%{http_code}'). A VIN feed skips listings without a VIN and relisted cars already delivered. A record cut too soon after a collector run arrives in the next delivery; nothing is lost.
Support: maya@proxies.sx · t.me/proxies_sx · dashboard client.proxies.sx/data-works. Every other error code: /errors.md.