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.

https://api.postfa.st/Auth: pf-api-keyRate limit: 6,000 requests per day, 600 per hour

What 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)required

The endpoint's id, from POST /webhook-endpoints or GET /webhook-endpoints. A non-UUID returns 400.

Query parameters

pageintegeroptionaldefault 0

Page number, starting at 0.

limitintegeroptionaldefault 20

Deliveries per page, from 1 to 100. A value outside that range returns 400.

getCountbooleanoptionaldefault false

true to get totalCount and a filled-in pageInfo. Any other value counts as false.

Values of status

statusWhat it means
PENDINGNot finished: its first attempt is queued, or a retry is due at nextAttemptAt.
SUCCEEDEDYour receiver answered 2xx.
FAILEDFinished without a 2xx. lastErrorCode says why.
SKIPPEDDropped, because the endpoint was off when its next attempt came due. An attempt that failed before that stays in attempts.

Values of lastErrorCode

lastErrorCodeWhat happened
nullNothing has failed: the delivery succeeded, or has not been tried yet.
A value of errorThe latest attempt failed for that reason. While the delivery is PENDING, a retry follows.
exhaustedAll 8 attempts failed. Each attempt's own error is in attempts.
payload_too_largeThe event was too large to send, so no attempt was made.
internalPostFast gave up on the delivery after errors on its side.

Values of error

errorWhat happened
nullThe receiver answered 2xx.
timeoutNo answer within 15 seconds.
connectionPostFast could not connect to the receiver.
tlsThe receiver's certificate or TLS setup was refused.
redirectThe receiver answered 3xx. Redirects are not followed.
http_4xxThe receiver answered 4xx, other than 410.
goneThe receiver answered 410, which also turns the endpoint off.
http_5xxThe receiver answered with any other status, typically 5xx.
blocked_addressThe hostname now resolves to an address that is not public.

Errors

StatusmessageWhen
400An array of stringslimit 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[]required

The deliveries on this page, newest first.

idstring (UUID)required

The delivery's id.

eventIdstringrequired

evt_<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.

eventTypestringrequired

The event that was sent. A test shows webhook.test, or the event it sent as a sample.

post.publishedpost.failedaccount.connectedaccount.disconnectedwebhook.test
resourceIdstring (UUID) | nulloptional

What 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) | nulloptional

The 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.

statusstringrequired

Where the delivery stands. See the values of status.

PENDINGSUCCEEDEDFAILEDSKIPPED
attemptCountintegerrequired

How many attempts were made: 0 before the first one, and when no attempt was made at all.

attemptsobject[]required

Every attempt, oldest first. Empty when no attempt was made.

nintegerrequired

The attempt's number, from 1.

atISO 8601required

When the attempt finished.

statusCodeinteger | nulloptional

What your receiver answered, or null if it never answered.

latencyMsintegerrequired

How long the attempt took, in milliseconds.

errorstring | nulloptional

Why the attempt failed, or null for the 2xx. See the values of error.

lastStatusCodeinteger | nulloptional

The latest attempt's statusCode.

lastErrorCodestring | nulloptional

Why the delivery last failed. See the values of lastErrorCode.

lastLatencyMsinteger | nulloptional

The latest attempt's latencyMs.

nextAttemptAtISO 8601 | nulloptional

When 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 | nulloptional

When the delivery reached its final status. null while it is PENDING.

createdAtISO 8601required

When the event was recorded for this endpoint. The log is sorted by it, newest first.

payloadobjectrequired

The event body as PostFast sent it, unchanged on every retry: { id, type, timestamp, workspaceId, data }, as described in /docs/webhooks#events.

totalCountinteger | nulloptional

With getCount=true, how many deliveries the log holds. null without it, and when the log is empty.

pageInfoobjectrequired

Filled in with getCount=true when the page has rows. Otherwise page and perPage are null and hasNextPage is false.

pageinteger | nulloptional

This page's number, counted from 1: page=0 returns page: 1.

hasNextPagebooleanrequired

Whether another page follows. Only getCount=true sets it.

perPageinteger | nulloptional

The limit applied.