Skip to Content
API ReferenceEndpoint capability matrix

Endpoint capability matrix

Quick reference for every write endpoint. Use this to design retry logic, webhook handlers, and error recovery without reading each endpoint’s full docs.

Column definitions

ColumnMeaning
IdempotentAccepts Idempotency-Key header. Repeat requests with the same key and body return the cached response without re-executing.
AsyncThe operation completes after the HTTP response returns. The response reflects queued state, not final state. Poll or use webhooks to observe completion.
Emits webhookThe event name(s) fired as a side-effect of a successful call.
Retry-safeWhether retrying a failed request is safe without risk of duplicate side-effects. All idempotent endpoints are retry-safe with the same key.
Partial successWhether the response can indicate that some sub-operations succeeded while others failed.

All write endpoints (POST, PATCH, DELETE) accept the Idempotency-Key header globally. The Idempotent column marks endpoints where idempotency is particularly important to use in production. See Idempotency for key format and behavior.


Posts

EndpointIdempotentAsyncEmits webhookRetry-safePartial success
POST /v1/posts✅ RecommendedNo — post is created synchronouslypost.created, post.scheduled (if scheduled)✅ with keyNo
PATCH /v1/posts/:id✅ use version tokenNoNo
DELETE /v1/posts/:idNoNo
POST /v1/posts/:id/publishYes — publish is queued to SQSpost.published or post.failed (on completion)✅ with keyNo
POST /v1/posts/:id/retry✅ RecommendedYes — re-queued to SQSpost.published or post.failed (on completion)✅ with keyYes — some platforms may succeed while others fail
POST /v1/posts/:id/cancelNoNo
POST /v1/posts/:id/cloneNopost.created✅ with keyNo
POST /v1/posts/:id/duplicateNopost.created✅ with keyNo
POST /v1/posts/:id/unpublishNoNo
POST /v1/posts/:id/platforms/:id/fixYes — re-queued to SQSpost.published or post.failed (on completion)✅ with keyYes
POST /v1/posts/bulk✅ RecommendedNo — each post created synchronouslypost.created per item✅ with keyYes — HTTP 207; per-item status
POST /v1/posts/bulk-videoNopost.created per item✅ with keyYes — HTTP 207
POST /v1/posts/validate— (read-only semantics)No✅ alwaysNo
POST /v1/posts/:id/recurrenceNoNo
PATCH /v1/posts/:id/recurrenceNoNo
DELETE /v1/posts/:id/recurrenceNoNo

Accounts

EndpointIdempotentAsyncEmits webhookRetry-safePartial success
POST /v1/accounts/connect/:platformNo — returns OAuth URLNo
POST /v1/accounts/callback/:platformNoaccount.connectedNo — replaying OAuth codes failsNo
DELETE /v1/accounts/:idNoaccount.disconnectedNo
POST /v1/accounts/:id/refreshNoNo
POST /v1/accounts/:id/testNoNo
POST /v1/accounts/:id/select-pageNoNo
POST /v1/accounts/:id/backfillYes — analytics pulled asyncNo

Media

EndpointIdempotentAsyncEmits webhookRetry-safePartial success
POST /v1/media/uploadNo — returns presigned URL; S3 upload is separateNo
DELETE /v1/media/:idNoNo
POST /v1/media/:id/validateYes — validation is queuedNo
POST /v1/media/registerNoNo
POST /v1/media/bulk-presignNoYes — per-file upload URLs
POST /v1/media/bulk-video-upload-urlsNoYes — per-file upload URLs
POST /v1/media/bulk-validateYes — queuedNo
POST /v1/media/import-from-urlYes — async importNo
POST /v1/media/import-from-driveYes — async importNo
S3 PUT (direct upload)Nomedia.uploaded (triggered by S3 event after upload)No

Webhooks

EndpointIdempotentAsyncEmits webhookRetry-safePartial success
POST /v1/webhooksNoNo
PATCH /v1/webhooks/:idNoNo
DELETE /v1/webhooks/:idNoNo
POST /v1/webhooks/:id/rotate-secretNoNo — secret changes each callNo
POST /v1/webhooks/testNoNo
POST /v1/webhooks/:id/deliveries/:id/retryYes — re-queuedNo

Design implications

For async endpoints: the HTTP response tells you the operation is queued, not complete. Subscribe to the corresponding webhook event, or poll GET until the terminal status. Never assume an async endpoint’s 2xx means the underlying action succeeded.

For partial-success endpoints: always inspect the per-item result array, not just the top-level status code. A 207 or even 200 response can contain per-item failures.

For idempotent retries: use the same Idempotency-Key on every retry of the same logical request. The key must remain stable across attempts — do not generate a new UUID per attempt.

Last updated on