Skip to content

API reference

The base address is https://api.talismanleads.io/v1. Requests and answers are JSON, apart from upload and download links. Also available as an OpenAPI file.

Your balance

GET/account

Your balance and the limits in force.

Key needs: Read only, or able to place orders

Example request

curl "https://api.talismanleads.io/v1/account" \
  -H "Authorization: Bearer tl_live_your_key_here"

Example answer (200)

{
  "balance": "100.00",
  "currency": "USD",
  "key": {
    "id": "11111111-1111-4111-8111-111111111111",
    "scopes": [
      "read",
      "orders"
    ]
  },
  "limits": {
    "reads_per_minute": 60,
    "result_downloads_per_minute": 30,
    "uploads_per_minute": 10,
    "estimates_per_minute": 10,
    "orders_per_minute": 10,
    "open_task_parts": 20
  }
}

List the checkers

GET/checkers

What this account can order right now, at its prices. A paused or blocked checker is not listed.

Key needs: Read only, or able to place orders

Example request

curl "https://api.talismanleads.io/v1/checkers" \
  -H "Authorization: Bearer tl_live_your_key_here"

Example answer (200)

{
  "checkers": [
    {
      "id": "whatsapp_status_detection",
      "name": "WhatsApp Status Detection",
      "input": "phone",
      "price": {
        "amount": "3.00",
        "per_entries": 10000,
        "currency": "USD"
      },
      "minimum_entries": 0,
      "minimum_billed_entries": 2000,
      "calling_code": null
    }
  ]
}

Upload a large list

POST/uploads

A link to send a file to, straight to storage. Send it with PUT and the headers given. The link lasts 2 hours.

Key needs: Able to place orders

Body

size_bytesinteger · required
The size of the file, in bytes.
file_namestring · optional
A name for the list, ending in .txt.

Example request

curl -X POST "https://api.talismanleads.io/v1/uploads" \
  -H "Authorization: Bearer tl_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"file_name":"list.txt","size_bytes":1048576}'

Example answer (201)

{
  "upload_id": "upl_2b7d9f10-6c3e-4a1f-8d2b-9e8f7a6b5c4d",
  "upload_url": "https://storage.example.com/upload/sign/list.txt?token=...",
  "method": "PUT",
  "headers": {
    "Content-Type": "text/plain"
  },
  "expires_at": "2026-11-05T11:00:00.000Z"
}

See what an order would cost

POST/estimates

Counts the entries, works out the price and reports any problem with the list. Charges nothing. Allow up to 5 minutes for the answer.

Key needs: Able to place orders

Body

checkerstring · required
A checker's id from GET /checkers.
entriesstring[] · optional
The list, one string per entry, up to 100,000 entries and 4 MB. Send this or upload_id.
upload_idstring · optional
An upload_id from POST /uploads. Send this or entries.
countrystring · optional
A two-letter country code, if you want to say which country the numbers are from.
file_namestring · optional
A name for the list, ending in .txt.

Example request

curl -X POST "https://api.talismanleads.io/v1/estimates" \
  -H "Authorization: Bearer tl_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"checker":"whatsapp_status_detection","entries":["+14155550142","+12125550187"]}'

Example answer (200)

{
  "checker": "whatsapp_status_detection",
  "entries": 2,
  "billed_entries": 2000,
  "charge": "0.60",
  "currency": "USD",
  "parts": 1,
  "country": {
    "code": "US",
    "share": 1
  }
}

Place an order

POST/orders

Charges your balance and queues the work. Answers 201 for a new order, and 200 with Idempotent-Replay: true for a repeat; a repeat at the same moment can also answer 201, so tell orders apart by id. Allow up to 5 minutes for the answer.

Key needs: Able to place orders

Headers

Idempotency-Keystring · required
Up to 200 ASCII characters with no spaces. For 7 days the same key means the same order.

Body

checkerstring · required
A checker's id from GET /checkers.
entriesstring[] · optional
The list, one string per entry, up to 100,000 entries and 4 MB. Send this or upload_id.
upload_idstring · optional
An upload_id from POST /uploads. Send this or entries.
countrystring · optional
A two-letter country code, if you want to say which country the numbers are from.
file_namestring · optional
A name for the list, ending in .txt.
expected_chargestring · optional
A price in dollars, such as "18.00". The order is refused with price_changed if it costs anything else.

Example request

curl -X POST "https://api.talismanleads.io/v1/orders" \
  -H "Authorization: Bearer tl_live_your_key_here" \
  -H "Idempotency-Key: crm-export-2026-11-05" \
  -H "Content-Type: application/json" \
  -d '{"checker":"whatsapp_status_detection","entries":["+14155550142","+12125550187"]}'

Example answer (201)

{
  "id": "ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f",
  "checker": "whatsapp_status_detection",
  "status": "queued",
  "entries": 2,
  "charge": "0.60",
  "refunded": "0.00",
  "currency": "USD",
  "parts": {
    "total": 1,
    "completed": 0,
    "failed": 0
  },
  "results": null,
  "error": null,
  "source": "api",
  "created_at": "2026-11-05T09:00:00.000Z",
  "completed_at": null
}

List your orders

GET/orders

Newest first. Pass next_cursor back as cursor for the next page.

Key needs: Read only, or able to place orders

Query parameters

limitinteger · optional
How many to return, from 1 to 100. The default is 20.
cursorstring · optional
next_cursor from the last page.

Example request

curl "https://api.talismanleads.io/v1/orders?limit=20" \
  -H "Authorization: Bearer tl_live_your_key_here"

Example answer (200)

{
  "orders": [
    {
      "id": "ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f",
      "checker": "whatsapp_status_detection",
      "status": "completed",
      "entries": 2,
      "charge": "0.60",
      "refunded": "0.00",
      "currency": "USD",
      "parts": {
        "total": 1,
        "completed": 1,
        "failed": 0
      },
      "results": {
        "registered": 1,
        "not_registered": 1
      },
      "error": null,
      "source": "api",
      "created_at": "2026-11-05T09:00:00.000Z",
      "completed_at": "2026-11-05T09:02:10.000Z"
    }
  ],
  "next_cursor": null
}

One order

GET/orders/{id}

Its status, entries, charge, refund, parts and counts. results is null until a part finishes, and a count is null where the checker does not report it.

Key needs: Read only, or able to place orders

Path parameters

idstring · required
The order's id.

Example request

curl "https://api.talismanleads.io/v1/orders/ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f" \
  -H "Authorization: Bearer tl_live_your_key_here"

Example answer (200)

{
  "id": "ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f",
  "checker": "whatsapp_status_detection",
  "status": "completed",
  "entries": 2,
  "charge": "0.60",
  "refunded": "0.00",
  "currency": "USD",
  "parts": {
    "total": 1,
    "completed": 1,
    "failed": 0
  },
  "results": {
    "registered": 1,
    "not_registered": 1
  },
  "error": null,
  "source": "api",
  "created_at": "2026-11-05T09:00:00.000Z",
  "completed_at": "2026-11-05T09:02:10.000Z"
}

Result files

GET/orders/{id}/results

A download link for each part, good for 15 minutes. A part still running has no link. Contact support if a completed part has none.

Key needs: Read only, or able to place orders

Path parameters

idstring · required
The order's id.

Example request

curl "https://api.talismanleads.io/v1/orders/ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f/results" \
  -H "Authorization: Bearer tl_live_your_key_here"

Example answer (200)

{
  "order_id": "ord_8f2c1e7a-3b4d-4c5e-9f60-1a2b3c4d5e6f",
  "status": "completed",
  "parts": [
    {
      "part": 1,
      "status": "completed",
      "file_name": "result.csv",
      "url": "https://storage.example.com/sign/result.csv?token=...",
      "expires_at": "2026-11-05T09:17:10.000Z"
    }
  ]
}

On this page