Import up to 1000 contacts in the background
Answers 202 with a job, not with contacts: nothing has been created yet when the call returns. Poll GET /jobs/{id} to watch it finish and to read the per-row errors.
Try it — POST /contacts/bulk
Kept for this tab only — it disappears when you close it, and it is never sent anywhere except as the Authorization header on the call below.
Authorization
bearerAuth contacts:writeAuthorization: Bearer sk_live_.... Keys in the query string or the
request body are refused — a URL is logged by every proxy it passes,
and that is how customer keys leak.
A key carries scopes. A call outside them answers 403 with
insufficient_scope and names the scope it wanted.
In: header
Scope: contacts:write
Header Parameters
Any unique string, one per logical request. Retrying with the same key
returns the first answer instead of doing the work twice, and answers
with Idempotent-Replay: true.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST https://app.sendkuy.com/api/v1/contacts/bulk \ -H "Authorization: Bearer sk_live_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contacts": [ { "first_name": "Citra", "whatsapp": "+6281234567892" }, { "first_name": "Dewi", "email": "dewi@example.com" } ]}'{ "data": { "object": "job", "id": "job_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3", "type": "contacts.bulk", "status": "queued", "total": 0, "processed": 0, "failed": 0, "errors": [ {} ], "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z" }}