List events

GET/api/v1/events
No scope required

Everything that has happened in the organization, newest first — the same envelopes webhooks deliver. Use it to catch up after downtime, or as a polling trigger instead of webhooks. Scopes are per event type, because an event carries the whole resource: booking.* needs "bookings:read", customer.* needs "customers:read", gift_card.* needs "gift_cards:read". Without ?type you get the types your key may read; asking for a type it may not read answers 403.

Query parameters#

FieldTypeDescription
limit
integermin 1 · max 100 · default 25

How many results to return, 1-100. Defaults to 25.

order
stringdefault "desc"

Sort by creation time: "desc" (newest first, default) or "asc".

"asc""desc"
starting_after
string≥ 1 chars

The next_cursor from a previous page. Opaque — pass it back verbatim.

type
string

Only events of this type. Omit to get every type your key may read.

"booking.created""booking.confirmed""booking.cancelled""booking.rescheduled""customer.created""customer.updated""gift_card.issued""gift_card.redeemed"

Example request#

bash

curl -X GET "https://your-site.awrora.app/api/v1/events" \
  -H "Authorization: Bearer $AWRORA_API_KEY"

Responses#

  • 200A page of events.
  • 400Invalid request — codes "validation_failed" or, on an endpoint that requires one, "idempotency_key_required".
  • 401Missing, invalid, revoked or expired API key — codes "api_key_missing", "api_key_invalid", "api_key_revoked", "api_key_expired".
  • 403The API app is off, the plan does not include the API, or the key lacks the required scope — codes "app_not_enabled", "plan_upgrade_required", "insufficient_scope" (the last carries "required_scope").
  • 429Rate limit exceeded — code "rate_limited". See the x-ratelimit-* headers.
  • 500Something went wrong on our side — code "internal_error".

Response 200

FieldTypeDescription
datarequired
object[]

The page of results, in the requested order.

has_morerequired
boolean

True when more results exist after this page. Fetch them with next_cursor.

next_cursorrequired
string | null

Pass this back as ?starting_after= to fetch the next page. Null when has_more is false. Opaque — do not parse it.

200 response

{
  "data": [
    {
      "id": "res_8f2k3n",
      "type": "string",
      "created_at": "string",
      "api_version": "string",
      "data": {
        "object": {
          "id": "res_8f2k3n",
          "booking_number": null,
          "status": "pending",
          "source": "string",
          "created_at": "string",
          "updated_at": "string",
          "experience": {
            "id": null,
            "title": null,
            "slug": null
          },
          "departure": {
            "id": null,
            "starts_at": null,
            "ends_at": null
          },
          "customer": {
            "name": null,
            "email": null,
            "phone": null
          },
          "guests": [
            null
          ],
          "add_ons": [
            null
          ],
          "totals": {
            "subtotal": null,
            "discount": null,
            "gift_card": null,
            "total": null
          },
          "payment": {
            "method": null,
            "source": null,
            "status": null
          },
          "note": "string",
          "manage_url": "https://example.com/webhooks/awrora"
        }
      },
      "resource_type": "string",
      "resource_id": "resource_8f2k3n"
    }
  ],
  "has_more": true,
  "next_cursor": "string"
}