Post status tracking API
Post Status Tracking API for Publishing Workflows
Publishing does not end when the request returns 200. A post can still be queued, processing, published, or failed, and a workflow that ignores those states finds out too late that a campaign did not go out. Wahdx Connection exposes single and batch status endpoints so integrations can close the loop. This page covers the states, the two check patterns, and how to design retries around them.
The problem this solves
Without status tracking, a publishing job either assumes success or builds its own unreliable guess. The API reports the real state of each post, so a team can catch a rejected video in the same hour instead of discovering a gap days later. It also separates a slow platform from a broken request, so the team knows whether to wait or to retry.
The states a post moves through
Each post reports one of four states. Queued means it is waiting to be processed. Processing means the publishing workflow is running. Published means it completed successfully. Failed means it needs attention and can be resubmitted after the issue is fixed. Scheduled posts sit in queued until their time, then move through the same states as direct posts.
- Queued: waiting to be processed.
- Processing: the publish is in progress.
- Published: completed successfully.
- Failed: needs attention; fix and resubmit.
Check one post
The single status endpoint takes an account ID and a publish ID and returns the current state plus the public post URL when one exists. For TikTok checks, include the media type so the API returns the correct URL behavior for video or photo posts. Poll on an interval that matches your tolerance, and stop once the post reaches a terminal state.
const API_BASE_URL = 'https://api.wahdx.com';
const API_KEY = process.env.WAHDX_API_KEY;
await fetch(API_BASE_URL + '/api/content/status/{accountId}/{publishId}?mediaType=video', {
method: 'GET',
headers: {
'X-API-Key': API_KEY
}
});import os
import requests
API_BASE_URL = 'https://api.wahdx.com'
API_KEY = os.environ['WAHDX_API_KEY']
response = requests.get(
API_BASE_URL + '/api/content/status/{accountId}/{publishId}?mediaType=video',
headers={
'X-API-Key': API_KEY,
},
timeout=30,
)
response.raise_for_status()
print(response.json())curl -X GET "https://api.wahdx.com/api/content/status/{accountId}/{publishId}?mediaType=video" \
-H "X-API-Key: $WAHDX_API_KEY"Check a batch
The batch endpoint checks several posts in one request, which fits a nightly job that sweeps every post from the day. It is also the right tool after a multi-platform publish, because one request can produce several posts that each need confirming. Batch polling keeps the number of requests flat as publishing volume grows.
const API_BASE_URL = 'https://api.wahdx.com';
const API_KEY = process.env.WAHDX_API_KEY;
await fetch(API_BASE_URL + '/api/content/status/batch', {
method: 'POST',
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
checks: [
{ accountId: 'ACCOUNT_ID_1', publishId: 'PUBLISH_ID_1', mediaType: 'video' },
{ accountId: 'ACCOUNT_ID_2', publishId: 'PUBLISH_ID_2' }
]
})
});import os
import requests
API_BASE_URL = 'https://api.wahdx.com'
API_KEY = os.environ['WAHDX_API_KEY']
response = requests.post(
API_BASE_URL + '/api/content/status/batch',
headers={
'X-API-Key': API_KEY,
'Content-Type': 'application/json',
},
json={
'checks': [
{'accountId': 'ACCOUNT_ID_1', 'publishId': 'PUBLISH_ID_1', 'mediaType': 'video'},
{'accountId': 'ACCOUNT_ID_2', 'publishId': 'PUBLISH_ID_2'},
]
},
timeout=30,
)
response.raise_for_status()
print(response.json())curl -X POST "https://api.wahdx.com/api/content/status/batch" \
-H "X-API-Key: $WAHDX_API_KEY" \
-H "Content-Type: application/json" \
--data-raw '{
"checks": [
{ "accountId": "ACCOUNT_ID_1", "publishId": "PUBLISH_ID_1", "mediaType": "video" },
{ "accountId": "ACCOUNT_ID_2", "publishId": "PUBLISH_ID_2" }
]
}'Designing retries and monitoring
A failed post is a task, not an error to swallow. Because failed publishes do not count toward the monthly upload quota, retrying does not cost an upload credit. Log the failed state with the platform and publish ID, surface it for the team, and resubmit once the media or caption is corrected. There is no customer-registrable webhook, so the polling schedule determines how quickly a failure is noticed.
FAQ
Common questions about status tracking
Can I check more than one post status at once?
Yes. The batch status endpoint checks several posts in one request, which suits nightly sweeps and multi-platform publishes.
Why include the media type for TikTok checks?
It helps the API return the correct status and public post URL behavior for video or photo workflows.
Is there a webhook for status changes?
There is no customer-registrable webhook. Integrations poll the single or batch status endpoints after submission.
Does a failed post use up my upload quota?
No. Only successful publishes count toward the monthly quota, so a failed post can be fixed and resubmitted without costing an upload credit.
Related reading
Go deeper on this workflow.
Related API docs
TikTok Content Publishing API: Video, Photos & Carousels
Publish video and photo carousels to TikTok through an official API. Media specs, posting limits, QR login, scheduling, and status tracking in one workflow.
Instagram Graph API Content Publishing for Business Accounts
Publish photos, reels, and carousels to Instagram with the Content Publishing API. Business account requirements, media limits, and metrics.
YouTube API: Upload Videos and Read Channel Analytics
Upload videos to YouTube with per-video settings, then read subscribers, views, and video metrics through one API workflow.
Threads API: Text Posts, Thread Sequences & Metrics
Publish text posts and thread sequences to Threads via API. Character limits, scopes, reply settings, rate limits, and metrics read-back.