Get Job
Poll publish job progress by tracking ID.
GET /v1/jobs/:trackingId
Poll publish progress. Returns the current job state. Status is reconciled from publish progress and post publications, so a completed post shows status: "completed" even if you poll after the fact.
Auth: Bearer API key (required)
Path parameters
| Param | Type | Description |
|---|---|---|
trackingId | UUID | From publish response tracking_id |
Response 200
{
"tracking_id": "uuid",
"post_id": "uuid",
"status": "completed",
"total": 2,
"completed": 2,
"failed": 0,
"platform_statuses": [
{
"platform": "linkedin",
"connected_account_id": "uuid",
"phase": "platform_success",
"message": "Published to linkedin"
}
],
"created_at": "2026-07-11T14:00:00.000Z",
"completed_at": "2026-07-11T14:01:00.000Z"
}| Field | Description |
|---|---|
status | queued, processing, completed, or failed |
total | Number of platforms in this job |
completed | Platforms that succeeded |
failed | Platforms that failed |
platform_statuses | One entry per platform — latest phase only |
cURL
curl https://api.social0.app/v1/jobs/TRACKING_ID \
-H "Authorization: Bearer sk_live_YOUR_KEY"JavaScript — poll until done
async function waitForJob(trackingId) {
for (;;) {
const res = await fetch(`https://api.social0.app/v1/jobs/${trackingId}`, {
headers: { Authorization: `Bearer ${process.env.SOCIAL0_API_KEY}` },
});
const job = await res.json();
if (job.status === "completed" || job.status === "failed") return job;
await new Promise((r) => setTimeout(r, 2000));
}
}Python — poll until done
import time, requests, os
def wait_for_job(tracking_id):
headers = {"Authorization": f"Bearer {os.environ['SOCIAL0_API_KEY']}"}
while True:
job = requests.get(
f"https://api.social0.app/v1/jobs/{tracking_id}",
headers=headers,
).json()
if job["status"] in ("completed", "failed"):
return job
time.sleep(2)Errors
| HTTP | Code | When |
|---|---|---|
| 401 | invalid_api_key | Missing or invalid API key |
| 404 | not_found | Job not found |