ads

POST /v1/ads/connections/{connection_id}/checkout-sources

Add a checkout provider (Stripe, Paddle or Freemius) with its webhook signing secret.

All ads endpoints

All developer docs →

Authentication

Send an API key as a bearer token. The key must carry the ads.manage permission; a key without it is refused with 403, not 404.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X POST https://api.zinndigital.com/v1/ads/connections/{connection_id}/checkout-sources \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "provider": <string<stripe, paddle, freemius>> }'

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

Gated on ads.manage; audit action ads.checkout_source_added. The signing secret (Stripe whsec_…, Paddle's notification secret, the Freemius product secret key) is stored in Vault and never returned. At most 20 sources per ad account.

Parameters

NameTypeRequiredWhat it is
connection_id (path)stringYes—

Request body

NameTypeRequiredWhat it is
providerstring<stripe, paddle, freemius>Yes—
signing_secretstringNoOptional here — Stripe and Paddle show it only after our URL is pasted in; send it later with PATCH. Until then deliveries answer 503 (the provider retries).
labelstringNo—
test_modebooleanNo—

Response

NameTypeRequiredWhat it is
idstringYes—
connection_idstringYes—
providerstring<stripe, paddle, freemius>Yes—
labelstringYes—
test_modebooleanYestrue = only the provider's test / sandbox events count; false = only live ones.
enabledbooleanYes—
has_secretbooleanYesWhether the provider's signing secret has been given (it is never returned).
webhook_urlstringYesThe URL to paste into the provider.
created_atstringYes—
last_delivery_atstringYes—
last_delivery_notestringYesWhat the last delivery was: received, ignored, otherMode, noSignature, badSignature, staleTimestamp, badTimestamp, noSecret, vaultUnavailable (empty = none yet).
deliveriesintegerYes—
outcomesintegerYesOutcomes created from this source.

Errors this endpoint can return

401 · 403 · 404 · 422 · 429