Docs
Webhooks & API

API Reference

Every REST endpoint, grouped by resource, with request examples.

All endpoints are relative to the base URL https://yourapp.com/api/v1/ and require a Bearer token. See Authentication and the response format.

Path parameters are written with a leading colon, e.g. :siteId. List endpoints accept ?page and ?limit query parameters (page defaults to 1; limit defaults to 20 and maxes out at 100) and return a meta pagination object — except GET /workspaces, GET /sites, and GET /workspaces/:workspaceId/members, which return their full array directly with no pagination.

Every resource below is read-only through the API. The one exception is Webhooks, which supports full create, update, and delete.


Playground

Send real requests to the API without leaving this page. Paste your Secret Key, pick an endpoint, fill in any IDs it needs, and click Send (or press Ctrl + Enter, ⌘ + Enter on Mac). Every endpoint further down this page also has a Try it button that loads it straight into the playground.

The playground uses your real key against your real data. Every request counts toward your rate limit, and the webhook endpoints that create, update, delete, or rotate make real changes. Deleting a webhook or rotating its secret asks you to click a second time to confirm.

API Playground

Send real requests with your own key — right from the docs.

Live API
Copy it from Webhooks & API → API Key in your dashboard.

https://yourapp.com/api/v1/me

Get the user who owns the API key.

This endpoint takes no parameters — just hit Send.

Response

Ready when you are

Send the request to see the live response here.

Press Ctrl↵ from anywhere in the playground
Code sample
request.sh
curl "https://yourapp.com/api/v1/me" \  -H "Authorization: Bearer $TDC_API_KEY"

Reads your key from the TDC_API_KEY environment variable, so it’s safe to paste into scripts and repos.

Requests go straight from your browser to https://yourapp.com/api/v1Rate limit: 1,000 requests / hour

Your key never leaves your browser except to call this site's own /api/v1 endpoints. It's kept in memory and forgotten when you leave the page — unless you tick Remember for this tab, and even then it's cleared as soon as the tab closes. The generated code samples read the key from a TDC_API_KEY environment variable instead of embedding it.


Account & Workspaces

GET/api/v1/me
GET/api/v1/workspaces
GET/api/v1/workspaces/:workspaceId
GET/api/v1/workspaces/:workspaceId/members

Example — list your workspaces

curl -H "Authorization: Bearer tdc_YOUR_API_KEY" \
  https://yourapp.com/api/v1/workspaces
{
  "ok": true,
  "data": [
    { "id": "ws_a1", "name": "Acme Inc", "plan": "pro" }
  ]
}

Sites

GET/api/v1/sites
GET/api/v1/sites/:siteId
GET/api/v1/sites/:siteId/domain

Pages

GET/api/v1/sites/:siteId/pages
GET/api/v1/sites/:siteId/pages/:pageId

Forms & Submissions

GET/api/v1/sites/:siteId/forms
GET/api/v1/sites/:siteId/forms/:formId
GET/api/v1/sites/:siteId/forms/:formId/submissions
GET/api/v1/sites/:siteId/forms/:formId/submissions/:submissionId

Collections (CMS)

GET/api/v1/sites/:siteId/collections
GET/api/v1/sites/:siteId/collections/:collectionId
GET/api/v1/sites/:siteId/collections/:collectionId/items
GET/api/v1/sites/:siteId/collections/:collectionId/items/:itemId

Blog

GET/api/v1/sites/:siteId/blog/posts
GET/api/v1/sites/:siteId/blog/posts/:postId
GET/api/v1/sites/:siteId/blog/authors
GET/api/v1/sites/:siteId/blog/categories

Webhooks

Manage webhook subscriptions programmatically. Webhook endpoints allow full CRUD configuration. See Webhooks for delivery, signing, and retry behavior.

GET/api/v1/webhooks
POST/api/v1/webhooks
GET/api/v1/webhooks/:webhookId
PATCH/api/v1/webhooks/:webhookId
DELETE/api/v1/webhooks/:webhookId
GET/api/v1/webhooks/:webhookId/secret
POST/api/v1/webhooks/:webhookId/secret
POST/api/v1/webhooks/:webhookId/test
GET/api/v1/webhooks/:webhookId/deliveries
POST/api/v1/webhooks/:webhookId/deliveries/:deliveryId/replay

GET /webhooks/:webhookId/secret reveals the current signing secret in full; POST to the same path rotates it and invalidates the old one immediately. A workspace can hold up to 10 webhooks — creating an 11th is rejected.

Example — subscribe to form submissions

curl -X POST https://yourapp.com/api/v1/webhooks \
  -H "Authorization: Bearer tdc_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workspaceId": "ws_abc123",
    "name": "CRM Sync",
    "url": "https://hooks.example.com/tdc",
    "events": ["form.submission.created"]
  }'

  • API Overview — Base URL, request/response formats, error codes, and rate limits.
  • Webhooks — Set up endpoints, verify signatures, and handle retries.
  • Event Types — Which webhook events actually fire, and their payloads.