/api/v4/social/bulk-posts/{bulkJobId}Get a bulk post job
Returns the status, counts and per-row results of a bulk social post job.
Parameters
Path
| Name | Type | Required | Description |
|---|---|---|---|
| bulkJobId | string | required | Job UUID, the `job.id` returned by POST /social/bulk-posts. |
Responses
200The job with its counts and one entry per submitted row.
{ "data": { "getBulkSocialPostJob": { "id": "9b3f18d0-7a26-4c51-8e94-1f0d5c6b7a82", "status": "COMPLETED_WITH_ERRORS", "totalCount": 3, "processedCount": 3, "successCount": 2, "failureCount": 1, "createdAt": "2026-09-28T14:04:52Z", "updatedAt": "2026-09-28T14:05:31Z", "results": [ { "index": 0, "clientReference": "campaign-4471-slot-01", "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "platforms": ["INSTAGRAM", "FACEBOOK"], "status": "CREATED", "socialPostId": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", "postStatus": "SCHEDULED", "errors": [] }, { "index": 1, "clientReference": "campaign-4471-slot-02", "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "platforms": ["INSTAGRAM", "FACEBOOK", "LINKEDIN"], "status": "CREATED", "socialPostId": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70", "postStatus": "SCHEDULED", "errors": [] }, { "index": 2, "clientReference": "campaign-4471-slot-03", "socialProfileId": "a90f7c22-5db1-4e83-9f40-2b7c6a1e5d33", "platforms": ["INSTAGRAM"], "status": "FAILED", "socialPostId": null, "postStatus": null, "errors": [ { "message": "SY95045: No connected channel for INSTAGRAM on this brand", "code": "SY95045", "contextInfo": [{ "key": "platform", "value": "INSTAGRAM" }] } ] } ] } }}401Unauthenticated, missing or invalid API key.
404No job with that ID on this account (`SY95047`).
Reports on a job created by
POST /social/bulk-posts. Poll it until
status reaches a terminal value, then read results[] to find out what each row
became.
Use case: reconciling a bulk load back into your own calendar. After
submitting a batch, poll this endpoint every few seconds. When status is
terminal, walk results[] and match each entry's clientReference to your own
record, writing socialPostId onto it. Rows with status: "FAILED" carry the
reason in errors[]; resend just those in a new batch.
Use case: a progress bar. processedCount against totalCount is enough to
drive one without walking results[] at all, and successCount /
failureCount give you the headline the moment the job lands.
Job statuses
Notes.
clientReferenceis whatever you sent on that row, echoed back. It is the cleanest link to your own data;index, the row's 0-based position in the array you submitted, is the fallback when you sent none.- A row reaching
status: "CREATED"means the post exists, not that it has published —postStatustells you where the post itself is.PUBLISHandSCHEDULErows still go through the asynchronous publishing pipeline afterwards: take eachsocialPostIdtoGET /social/posts/{postId}and readchannels[]for the real per-channel outcome. - A job whose rows all failed validation would never have been created at all,
because bulk create rejects the batch
before queuing. A
FAILEDjob here means the job broke after it was accepted. updatedAtmoves as rows are processed; it settles once the job is terminal.
curl -X GET 'https://listingsapi.com/api/v4/social/bulk-posts/<bulkJobId>' \ -H "Authorization: API $LISTINGSAPI_KEY"