« tlly.dev

Playbooks · Integrations

Paddle

GET transactions with transaction.read. Amounts are minor-unit strings. Paging is a cursor.

What you can track

Completed transactions: sum of details.totals.total by created_at, for the user’s own Paddle Billing account (not tlly’s subscription). One page is at most 30 (per_page default 30, maximum 30). The next page is after, a Paddle id in meta.pagination.next, not a number. tlly will not follow that cursor. Say that the series is the latest page only, or push a daily total.

This is separate from tlly’s own Paddle checkout. Do not point this job at tlly’s billing.

Credential

A Paddle API key (pdl_live_apikey_… or pdl_sdbx_apikey_…), Bearer. Permission: transaction.read. Do not grant write permissions. Set an expiry. The key is shown once.

Host: api.paddle.com for live, sandbox-api.paddle.com for sandbox. Suggested name: PADDLE_KEY. The secret’s host must match the URL.

Where to get it

Paddle → My account → Settings → Authentication → API keys → New API key. Authentication.

tlly job

details.totals.total is a string in the currency’s minor unit (“10 USD = 1000”). Scale by 0.01 for dollars. Filter status=completed in the query so drafts are not summed. Confirm the path in test_job; the list reference describes details.totals.total as that string.

{"series":"paddle_revenue","cron":"0 7 * * *","request":{"url":"https://api.paddle.com/transactions?status=completed&per_page=30","headers":{"Authorization":"Bearer {{secret:PADDLE_KEY}}"}},"extract":{"format":"json","items":"data","date":"created_at","value":"details.totals.total","aggregate":"sum"},"transform":[{"op":"scale","factor":0.01}]}

Gotchas

Alert ideas

Red when completed revenue for the latest day is zero. Yellow when a past-due count (only if you preview a status you can count) is above zero.

Verification

Checked 2026-10-26: Bearer auth, key format, the settings path, and permission selection. GET /transactions, transaction.read, per_page max 30, after cursor, and minor-unit strings on details.totals.total. The sandbox host is the one tlly’s own billing code uses for PADDLE_ENV=sandbox (https://sandbox-api.paddle.com); the list page fetched was the live reference.