Await a request

Long-poll: blocks until a request matching the filters arrives, then returns it (200). If nothing matching arrives within timeoutSeconds, returns 204 No Content. Retry or fail your check.

By default only requests arriving after this call starts match. That leaves a race if the webhook can fire before your await begins: close it by reading the newest stored id first and passing it as afterId (or pass afterId=0 to accept anything already stored).

Typical CI shape:

  1. Create an ephemeral endpoint (ttlSeconds).
  2. Point the system under test at its capture url.
  3. Trigger the action.
  4. GET …/requests/await?q=order.created&timeoutSeconds=60 and assert on the body.
GET
/api/v1/endpoints/{endpointId}/requests/await
AuthorizationBearer <token>

API key in the Authorization header: Authorization: Bearer wv_live_…. Keys are created on the API keys page in the app, shown once, and scoped to your workspace. X-Api-Key: wv_live_… is accepted as a fallback for tools that can't set Authorization.

In: header

Path Parameters

endpointId*string

The endpoint id (also the capture token in its URL).

Formatuuid

Query Parameters

method?string

Exact HTTP method, case-insensitive (e.g. POST).

state?string

Delivery state filter.

Value in"NotAttempted" | "Pending" | "Succeeded" | "Failed" | "Errored" | "DeadLetter" | "Skipped"
verification?string

Signature verdict filter. none = requests that were not checked (no signing secret on the endpoint, or the plan lacks verification).

Value in"verified" | "failed" | "unsigned" | "unverifiable" | "none"
q?string

Case-insensitive substring. Matches path and query string on every plan; also matches non-binary bodies on plans with full payload search.

since?string

Match requests received at or after this instant instead of only future ones.

Formatdate-time
afterId?integer

Match requests with an id greater than this instead of only future ones. Pass the newest id you've already seen, or 0 to accept anything stored.

Formatint64
timeoutSeconds?integer

How long to block. 1–80; default 30.

Default30
Range1 <= value <= 80

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

{
  "id": 0,
  "endpointId": "c8d2c7e1-e4b1-4108-9e29-3429a36a1ef3",
  "receivedAt": "2019-08-24T14:15:22Z",
  "method": "string",
  "path": "string",
  "queryString": "string",
  "headers": {
    "property1": "string",
    "property2": "string"
  },
  "body": "string",
  "bodyIsBinary": true,
  "bodyTruncated": true,
  "contentType": "string",
  "sourceIp": "string",
  "contentLength": 0,
  "verification": {
    "verdict": "verified",
    "note": "string"
  },
  "delivery": {
    "state": "NotAttempted",
    "statusCode": 0,
    "error": "string",
    "url": "string",
    "at": "2019-08-24T14:15:22Z",
    "durationMs": 0
  }
}
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "code": "string",
  "traceId": "string"
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "code": "string",
  "traceId": "string"
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "code": "string",
  "traceId": "string"
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "code": "string",
  "traceId": "string"
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "code": "string",
  "traceId": "string"
}

On this page