Skip to main content
GET
Twitter webhook deliveries & retry history
Free. This endpoint does not consume credits.

Path parameters

string
required
The webhook ID to retrieve deliveries for.

Headers

string
required
Your API key.

Operational handoff

Use this endpoint when your queue, CRM, warehouse, or alerting system needs to check webhook delivery status. It returns the 100 most recent delivery records for one webhook, newest first. Follow nextCursor for older ones. Map each delivery to a small incident row before you pass it on. Keep id, streamEventId, status, attempts, receiver status, timestamps, and the chosen action. Do not write the full response to logs. This endpoint returns delivery attempt metadata only. It does not return the webhook URL, event type filter, signing secret, raw payload body, raw signature, or full request headers. Do not depend on a nextRetryAt field. The response has none. Triage incidents from status, attempts, lastStatusCode, lastError, createdAt, and deliveredAt. Store these fields for support and retry triage:

Delivery ID

Store id for delivery-level idempotency and support lookup.

Event join

Store streamEventId to join back to the stored monitor event with GET /events/{id}.

Status route

Use status to route pending, failed, and exhausted deliveries to the right queue.

Attempt count

Use attempts to see how often Xquik tried a delivery. Retries continue until your endpoint returns 2xx.

Receiver result

Use lastStatusCode to separate receiver errors such as 500 from unreachable endpoints with status 0.

Failure reason

Show lastError as the most recent failure reason for the operator.

Timing

Compare createdAt and deliveredAt to measure delivery latency and recovery time.

Incident response handoff

Use one row per delivery when the receiver owner must act. Ignore delivered rows, wait on pending, and act on failed. An exhausted row means the webhook was paused or deleted.

Repeated failure

Warn after repeated failed rows. Include attempts, lastStatusCode, and lastError so the receiver owner can separate code errors from reachability failures.

No final failure

Xquik retries every failed delivery until your endpoint returns 2xx. No delivery ends early, even after 410 Gone.

Event join

Store streamEventId and link GET /api/v1/events/{id} so support can inspect the monitor event that triggered the delivery.

Receiver proof

After fixing the endpoint, send POST /webhooks/{id}/test and attach the signed test result to the incident before waiting for the next event.
Xquik retries failed deliveries with no attempt limit. While your endpoint fails, Xquik retries 1 waiting delivery at a time. It checks the endpoint at least every 15 minutes. New deliveries wait as pending. Return 2xx for a delivery you will never accept. See the retry policy. Fix the receiving endpoint first. Use POST /webhooks/{id}/test to confirm it accepts signed requests. Then call Resume Webhook to start sending waiting and rejected deliveries at once. Without it, a rejected delivery can wait up to 7 days.

Receiver backfill handoff

This endpoint returns 100 delivery rows per page for 1 webhook, newest first. Xquik resends failed deliveries on its own. Use stored event pages only to rebuild work your receiver lost.
Store nextCursor after every event page. Continue GET /api/v1/events?limit=100&cursor={nextCursor} until hasMore is false. Then compare each event id with delivery streamEventId values before replaying your own work. Add monitorId when replaying one account monitor, or keywordMonitorId when replaying one keyword monitor.

Query parameters

integer
Maximum deliveries per page: 1 to 100, default 100.
string
nextCursor from the previous page. The after alias also works. Offset pagination is not supported.

Response

200 OK

array
List of delivery attempts, most recent first. Returns up to 100 deliveries per page. Delivery object fields.
string
Unique delivery identifier.
string
ID of the stream event that triggered this delivery.
string
Current delivery status: pending, delivered, failed, or exhausted.
number
Total number of delivery attempts made. There is no attempt limit.
number
HTTP status code returned by your endpoint on the most recent attempt. Omitted if Xquik has made no attempt yet.
string
Error message from the most recent failed attempt. Omitted on success.
string
ISO 8601 timestamp of when Xquik queued the delivery.
string
ISO 8601 timestamp of successful delivery. Omitted if not yet delivered.
boolean
Whether more rows follow this page.
string
Pass it as cursor for the next page. Present when hasMore is true.

400 Invalid cursor

The cursor is not one this list returned. Send the nextCursor of the previous page, or omit it.

401 Unauthenticated

Missing or invalid API key. Check the x-api-key header value.

400 Invalid ID

The provided webhook ID is not a valid format.

404 Not found

No webhook exists with this ID, or it belongs to a different account.

429 Rate limited

Too many requests. Wait for the Retry-After header before retrying.

Delivery statuses

pending

Xquik has not sent this delivery yet. It may wait while your endpoint is failing.

delivered

Your endpoint returned 2xx. Delivery is complete.

failed

The last attempt failed because the endpoint returned non-2xx or the network failed. Xquik retries with exponential backoff until your endpoint returns 2xx.

exhausted

You paused or deleted the webhook while this delivery waited. Resume it to receive waiting deliveries.
Xquik retries deliveries until your endpoint returns 2xx. Retries never stop on their own. Pausing or deleting the webhook stops them. Within 1 day, its waiting deliveries show exhausted. Xquik keeps queued events until all deliveries finish. Events expire 30 days after Xquik creates them.