GET/webhook-endpoints/{id}/deliveries
Lists an endpoint's deliveries from the last 30 days, newest first: the event as sent, and each attempt's status code, latency and error.
pf-api-keyRate limit: 6,000 requests per day, 600 per hourWhat the log holds
The log keeps each delivery for 30 days, including the ones the test route sends.
It records what PostFast sent and how each attempt went. Your receiver's response body is not kept.
A delivery that is waiting for a retry is PENDING, with the time of the next attempt in nextAttemptAt.
Reading a row
eventId is the webhook-id header your receiver got and the id in payload. An event sent to several endpoints has the same eventId in each one's log.
resourceId is the post for a post event and the account for an account event. For webhook.test it is the endpoint's own id, and for a sample it is null. socialMediaId is the account, and null for tests and samples.
attempts lists every attempt, oldest first, and the last fields repeat the latest one. completedAt is set once the delivery is final, and nextAttemptAt only means something while it is PENDING.
An unknown id returns an empty page
An id that is not one of the workspace's endpoints returns 200 with an empty page, not 404: an endpoint that was deleted, never existed, or belongs to another workspace. Deleting an endpoint deletes its log.
To check that an endpoint exists, use GET /webhook-endpoints/{id}.
Paging
page starts at 0, and pageInfo.page counts from 1.
Without getCount=true, totalCount is null and pageInfo.hasNextPage is always false. Send it, or keep paging until a page has fewer rows than limit.
New deliveries go to the top of the log, so a row can show up on two pages while you page through. Deduplicate on id.
Path parameters
idstring (UUID)requiredThe endpoint's id, from POST /webhook-endpoints or GET /webhook-endpoints. A non-UUID returns 400.
Query parameters
pageintegeroptionaldefault 0Page number, starting at 0.
limitintegeroptionaldefault 20Deliveries per page, from 1 to 100. A value outside that range returns 400.
getCountbooleanoptionaldefault falsetrue to get totalCount and a filled-in pageInfo. Any other value counts as false.
Values of status
status | What it means |
|---|---|
PENDING | Not finished: its first attempt is queued, or a retry is due at nextAttemptAt. |
SUCCEEDED | Your receiver answered 2xx. |
FAILED | Finished without a 2xx. lastErrorCode says why. |
SKIPPED | Dropped, because the endpoint was off when its next attempt came due. An attempt that failed before that stays in attempts. |
Values of lastErrorCode
lastErrorCode | What happened |
|---|---|
null | Nothing has failed: the delivery succeeded, or has not been tried yet. |
A value of error | The latest attempt failed for that reason. While the delivery is PENDING, a retry follows. |
exhausted | All 8 attempts failed. Each attempt's own error is in attempts. |
payload_too_large | The event was too large to send, so no attempt was made. |
internal | PostFast gave up on the delivery after errors on its side. |
Values of error
error | What happened |
|---|---|
null | The receiver answered 2xx. |
timeout | No answer within 15 seconds. |
connection | PostFast could not connect to the receiver. |
tls | The receiver's certificate or TLS setup was refused. |
redirect | The receiver answered 3xx. Redirects are not followed. |
http_4xx | The receiver answered 4xx, other than 410. |
gone | The receiver answered 410, which also turns the endpoint off. |
http_5xx | The receiver answered with any other status, typically 5xx. |
blocked_address | The hostname now resolves to an address that is not public. |
Errors
| Status | message | When |
|---|---|---|
400 | An array of strings | limit is not a whole number from 1 to 100, or page is not a whole number from 0. |
There is no 404. An id that is not one of the workspace's endpoints returns an empty page.
Response
200 OK A page of the endpoint's delivery log, newest first, in the same paged shape as GET /social-posts.
dataobject[]requiredThe deliveries on this page, newest first.
idstring (UUID)requiredThe delivery's id.
eventIdstringrequiredevt_<uuid>: the id in payload and the webhook-id header your receiver got. An event sent to several endpoints has the same eventId in each one's log.
eventTypestringrequiredThe event that was sent. A test shows webhook.test, or the event it sent as a sample.
post.publishedpost.failedaccount.connectedaccount.disconnectedwebhook.testresourceIdstring (UUID) | nulloptionalWhat the event is about: the post's id for post.published and post.failed, the account's id for account.connected and account.disconnected, and the endpoint's own id for webhook.test. null for a sample.
socialMediaIdstring (UUID) | nulloptionalThe account the event is about: the post's account for a post event, the account itself for an account event. null for webhook.test and samples.
statusstringrequiredWhere the delivery stands. See the values of status.
PENDINGSUCCEEDEDFAILEDSKIPPEDattemptCountintegerrequiredHow many attempts were made: 0 before the first one, and when no attempt was made at all.
attemptsobject[]requiredEvery attempt, oldest first. Empty when no attempt was made.
nintegerrequiredThe attempt's number, from 1.
atISO 8601requiredWhen the attempt finished.
statusCodeinteger | nulloptionalWhat your receiver answered, or null if it never answered.
latencyMsintegerrequiredHow long the attempt took, in milliseconds.
errorstring | nulloptionalWhy the attempt failed, or null for the 2xx. See the values of error.
lastStatusCodeinteger | nulloptionalThe latest attempt's statusCode.
lastErrorCodestring | nulloptionalWhy the delivery last failed. See the values of lastErrorCode.
lastLatencyMsinteger | nulloptionalThe latest attempt's latencyMs.
nextAttemptAtISO 8601 | nulloptionalWhen the next attempt is due, once it is scheduled. Read it only while status is PENDING: a skipped delivery keeps the time it was due.
completedAtISO 8601 | nulloptionalWhen the delivery reached its final status. null while it is PENDING.
createdAtISO 8601requiredWhen the event was recorded for this endpoint. The log is sorted by it, newest first.
payloadobjectrequiredThe event body as PostFast sent it, unchanged on every retry: { id, type, timestamp, workspaceId, data }, as described in /docs/webhooks#events.
totalCountinteger | nulloptionalWith getCount=true, how many deliveries the log holds. null without it, and when the log is empty.
pageInfoobjectrequiredFilled in with getCount=true when the page has rows. Otherwise page and perPage are null and hasNextPage is false.
pageinteger | nulloptionalThis page's number, counted from 1: page=0 returns page: 1.
hasNextPagebooleanrequiredWhether another page follows. Only getCount=true sets it.
perPageinteger | nulloptionalThe limit applied.