Skip to main content
The ingestion endpoints receive hits from the tracker (or any server-to-server sender). They do not use OAuth — they are authenticated by the site’s tracking key (tracking_key, a UUID) sent in the key body field. A hit is validated, then queued for processing, so a successful call returns 202 Accepted with an empty body. An unknown key returns 404 Not Found. All ingestion endpoints accept a text/plain body (for navigator.sendBeacon) as well as JSON. Base URL: https://clickbase.so/api.

Collect a pageview

Record a pageview. Rate limit: 600/min per IP. Status: 202 Accepted (404 on unknown key).

Record a custom event

Record a named custom event, optionally carrying revenue. Rate limit: 600/min per IP. Revenue sent here is reported, not verified: it counts against a matching revenue goal for attribution, but it never reaches MRR or the Revenue page. It can never attribute under the reserved names (payment, the subscription_* names) that only Clickbase writes, since no goal may claim those names. See Track revenue for the difference and for sending verified revenue via the Payments API below. Status: 202 Accepted (404 on unknown key).

Send an engagement ping

Record a scroll-depth / engaged-time delta for an existing pageview. Rate limit: 600/min per IP (its own bucket). Status: 202 Accepted (404 on unknown key).

Identify a visitor

Attach a user identity to the visitor’s active session. Rate limit: 120/min, keyed by tracking key + IP (this endpoint can grow the site_users table, so it has a tighter bucket). Status: 202 Accepted (404 on unknown key).

Payments API

The Payments API records and deletes verified revenue server-to-server. It uses the same Passport personal access token as the rest of the authenticated API — not the tracking key. Create a token on the Developers settings page or via POST /api/tokens; optionally limit it to specific sites with site_ids. See Authentication.
Requires a workspace Admin or Owner (SitePolicy::manage) and an active subscription on the token’s workspace. A missing/invalid token returns 401; a member without manage access returns 403; a lapsed subscription returns 402. Rate limit: 60/min (same bucket as the authenticated API group). {siteKey} is the site’s UUID or domain (a domain segment may contain dots).

Record a payment

Idempotent on transaction_id: a replay returns the existing record with 200 instead of creating a duplicate. Response: { "message": ..., "transaction_id": ... }. Status: 201 Created on a new record, 200 OK on a replay.

Delete a payment

Delete an API-recorded payment and its revenue row by transaction_id. Only deletes payments created through this API — never Stripe-ingested rows. Response: 200 OK ({ "message": "Payment deleted." }), or 404 Not Found when no matching payment exists.

Stripe webhook

Per-site Stripe webhook receiver. {siteId} must be a site UUID. The request is authenticated by verifying the Stripe-Signature header against the site’s configured webhook secret — a missing integration/secret returns 404, a bad signature returns 400. On success it dispatches to HandleStripeWebhook and returns 200 OK. Rate limit: 600/min. This endpoint is configured in the site’s Stripe integration, not called by hand.