Skip to main content
Your Worker writes delivery records locally; doubleshift receives them only through direct delivery logs or a configured Cloudflare Logpush job, and otherwise sees only its own API activity. Sending them lets doubleshift compare its API answers with your page outcomes; it does not prove that an agent read the card.

Where your delivery records go

Reporting is the same in all three cases: it counts served calls. Use one transport per Worker, never both at once. The two logs tokens are not interchangeable: each endpoint refuses the other’s token with 403 wrong_transport. With the CloudFront kit, direct sending is the template parameter DsLogsToken; the records also stay in the composer’s CloudWatch Logs.

Turn on direct sending

1

Ask doubleshift for a logs token for direct sending

Not your API key nor a Logpush token (Keys and tokens).
2

Store it as a Worker secret

3

Add the option and redeploy

Add it next to apiKey and partnerId, keep passing ctx, then npx wrangler deploy. A missing or empty secret leaves sending off, silently. Keep quietInfo at false while you check the setup.
The request the library sends, its codes and its retries: Direct delivery logs API.

Logpush

1

Ask doubleshift for a logs token for Logpush

Not the direct-sending token.
2

Enable Logpush on the Worker

Add "logpush": true to the wrangler.jsonc of the Worker that runs the library (logpush = true in wrangler.toml), then redeploy with npx wrangler deploy.
3

Create the Logpush job

With a Cloudflare API token that has Logs Edit (Logpush access), POST https://api.cloudflare.com/client/v4/accounts/<account id>/logpush/jobs with this body, and leave logsToken unset.
Logpush job
Check enabled in the response. Do not add the Event field: it carries request metadata.
4

Check the first batch

Request an article as an AI agent, then read the job’s last_complete and last_error. An upload means Cloudflare delivered a batch; ask doubleshift to confirm processing.
  • The whole console output is exported, page_url included: the filter selects a Worker, not an event. Silent invocations still count toward Logpush usage. Logs and Exceptions share 16,384 characters per invocation, then messages are truncated and dropped.
  • Keep the records in the console: no custom log function that replaces it, and quietInfo at false.