Send events to a Cloudflare Queue using the Cloudflare HTTP API.

Creating a Cloudflare Queues Destination

curl 'https://api.outpost.hookdeck.com/2026-09-01/tenants/<TENANT_ID>/destinations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
  "type": "cloudflare_queues",
  "topics": ["orders"],
  "config": {
    "account_id": "<CLOUDFLARE_ACCOUNT_ID>",
    "queue_id": "<QUEUE_ID>"
  },
  "credentials": {
    "api_token": "<CLOUDFLARE_API_TOKEN>"
  }
}'

Configuration

Config

FieldTypeRequiredDescription
config.account_idstringYesCloudflare Account ID (32-character hex string)
config.queue_idstringYesCloudflare Queue ID (32-character hex string, not the queue name)

Credentials

FieldTypeRequiredDescription
credentials.api_tokenstringYesCloudflare API Token with the Account > Queues > Edit (Queues Write) permission

Message Format

Each event is published as a single Cloudflare Queue message with content_type: "json". The message body has this shape:

{
  "data": <event.Data>,
  "metadata": <merged_metadata>
}

metadata contains system metadata (event-id, topic, timestamp) merged with any custom event metadata.

Cloudflare rejects messages larger than 128 KB (128,000 bytes), including this wrapper, with a 413 response. Outpost does not check the size before sending, so an oversized event fails on every attempt.

Example Message

Publishing this event:

{
  "topic": "orders",
  "data": { "order_id": "123", "status": "created" },
  "metadata": { "source": "checkout-service" }
}

Results in this Cloudflare Queue message body:

{
  "data": { "order_id": "123", "status": "created" },
  "metadata": {
    "event-id": "evt_123",
    "topic": "orders",
    "timestamp": "2024-01-01T00:00:00Z",
    "source": "checkout-service"
  }
}

Required Permissions

The Cloudflare API Token must have the Account > Queues > Edit permission (API name: Queues Write), scoped to the account that owns the target queue.