Read results

Cursor-paged, and readable while the batch is still processing.

GEThttps://api.easydata.win/v1/batches/{id}/results
free

Entries as they land. You do not have to wait for a batch to finish: this returns whatever has been delivered so far, which is what makes a 50,000-row batch consumable from the first second.

Walk meta.nextCursor until meta.hasMore is false. The cursor is monotonic and stable, so walking it to exhaustion yields every entry exactly once - no duplicates, no gaps - even across a batch that is still filling in behind you.

Order is never guaranteed. Every entry echoes item_index and your original input, so you join back to your own rows without relying on one.

Request #

FieldTypeNotes
idrequiredpathThe batch id.
cursorqueryFrom meta.nextCursor. Omit for the first page.
limitqueryDefault 100, maximum 500.
formatqueryjson (default), jsonl or csv. jsonl streams one entry per line and carries the cursor in an X-Next-Cursor header. csv is the flat view: identity, outcome and cost as columns, with the record left whole in a JSON cell.

Call it #

cURL
curl -X GET "https://api.easydata.win/v1/batches/{id}/results" \
  -H "X-API-Key: $API_KEY"

Response #

JSON
{
  "data": {
    "batch_id": "afec9131-080b-4b96-b3bb-726249e4bbf8",
    "status": "processing",
    "entries": [
      {
        "item_index": 0,
        "input": "https://linkedin.com/in/satyanadella",
        "status": "succeeded",
        "credits_used": 1,
        "data": { "...": "Profile" },
        "created_at": "2026-09-01T10:00:04Z"
      },
      {
        "item_index": 1,
        "input": { "urn": "ACoAAA8BYqEBCGLg" },
        "status": "failed",
        "credits_used": 0,
        "error": { "type": "unprocessable_target", "message": "Profile is private, deleted or unreachable." },
        "created_at": "2026-09-01T10:00:05Z"
      }
    ]
  },
  "meta": {
    "requestId": "req_8f2ka91x",
    "nextCursor": "eyJzZXEiOjJ9",
    "hasMore": true,
    "recommendedPollMs": 2000
  }
}

A failed entry always carries credits_used: 0. That is enforced by a database constraint, not by convention - it is the billing contract, so it is not left to a code path remembering.

Errors #

StatusTypeWhen
401invalid_api_keyMissing, malformed, revoked or expired key. Never metered.
404not_foundNo such batch.

Every failure uses the same envelope, and none of them is metered - see Errors.