Integrations
Vercel, Netlify and Cloudflare deployment integrations, auth-provider user sync (Clerk, Auth0, Better Auth), and their inbound webhooks.
AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
Integrations.
application/json- response
integrations*array<>curl -X GET 'https://capydb.dev/api/capydb/v1/projects/string/integrations'{ "integrations": [ { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" } ]}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
provider*stringIntegration provider (e.g. vercel, netlify, clerk).
Integration deleted.
application/json- response
deleted*booleancurl -X DELETE 'https://capydb.dev/api/capydb/v1/projects/string/integrations/string'{ "deleted": true}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
provider*stringIntegration provider (e.g. vercel, netlify, clerk).
application/json- body
config?unknownProvider-specific JSON configuration.
external_id?stringstate?string"active""disabled"credentials?Provider secrets for integrations without a dedicated connect endpoint (auth0, better_auth) or to rotate Clerk secrets. Stored encrypted and never returned; omitting it keeps previously stored credentials.
Integration upserted.
application/json- response
integration*curl -X PUT 'https://capydb.dev/api/capydb/v1/projects/string/integrations/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "integration": { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" }}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
provider*stringIntegration provider (e.g. vercel, netlify, clerk).
Env sync queued.
application/json- response
job*curl -X POST 'https://capydb.dev/api/capydb/v1/projects/string/integrations/string/sync'{ "job": { "attempts": 0, "claimed_at": "2019-08-24T14:15:22Z", "claimed_by": "string", "host_id": "string", "instance_id": "string", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "error": "string", "id": "string", "last_exit_code": 0, "last_stderr": "string", "last_stdout": "string", "locked_resource": "string", "max_attempts": 0, "organization_id": "string", "preview_database_id": "string", "project_id": "string", "result": null, "retry_classification": "string", "started_at": "2019-08-24T14:15:22Z", "state": "pending", "type": "project.apply_plan", "updated_at": "2019-08-24T14:15:22Z" }}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
application/json- body
vercel_project_id*stringVercel project to bind ("prj_..." id or project name).
team_id?stringtoken*stringVercel API token. Stored encrypted; never returned.
preview_branches?booleanEnable preview-database-per-branch via deploy webhooks.
Integration connected; env sync runs asynchronously via the returned job.
application/json- response
integration*job*curl -X POST 'https://capydb.dev/api/capydb/v1/projects/string/integrations/vercel/connect' \ -H 'Content-Type: application/json' \ -d '{ "vercel_project_id": "string", "token": "string"}'{ "integration": { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" }, "job": { "attempts": 0, "claimed_at": "2019-08-24T14:15:22Z", "claimed_by": "string", "host_id": "string", "instance_id": "string", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "error": "string", "id": "string", "last_exit_code": 0, "last_stderr": "string", "last_stdout": "string", "locked_resource": "string", "max_attempts": 0, "organization_id": "string", "preview_database_id": "string", "project_id": "string", "result": null, "retry_classification": "string", "started_at": "2019-08-24T14:15:22Z", "state": "pending", "type": "project.apply_plan", "updated_at": "2019-08-24T14:15:22Z" }}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
application/json- body
site_id*stringtoken*stringNetlify personal access token. Stored encrypted; never returned.
preview_branches?booleanEnable preview-database-per-branch via deploy hooks.
Integration connected; env sync runs asynchronously via the returned job.
application/json- response
integration*job*curl -X POST 'https://capydb.dev/api/capydb/v1/projects/string/integrations/netlify/connect' \ -H 'Content-Type: application/json' \ -d '{ "site_id": "string", "token": "string"}'{ "integration": { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" }, "job": { "attempts": 0, "claimed_at": "2019-08-24T14:15:22Z", "claimed_by": "string", "host_id": "string", "instance_id": "string", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "error": "string", "id": "string", "last_exit_code": 0, "last_stderr": "string", "last_stdout": "string", "locked_resource": "string", "max_attempts": 0, "organization_id": "string", "preview_database_id": "string", "project_id": "string", "result": null, "retry_classification": "string", "started_at": "2019-08-24T14:15:22Z", "state": "pending", "type": "project.apply_plan", "updated_at": "2019-08-24T14:15:22Z" }}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
application/json- body
account_id*stringCloudflare account id that owns the Worker or Pages project.
api_token*stringCloudflare API token with Workers Scripts:Edit (or Pages:Edit) and Hyperdrive:Edit on that account. Stored encrypted; never returned.
target?stringWhich Cloudflare compute product to bind.
"workers""workers""pages"worker_name?stringWorker script name. Required when target is workers.
pages_project?stringPages project name. Required when target is pages.
hyperdrive?booleanCreate a Hyperdrive configuration in front of the cell and bind it as HYPERDRIVE.
truedeploy_binding?booleanAttach the Hyperdrive binding to the Worker, which creates and deploys a new Worker version. Turn off to add the binding to wrangler.jsonc yourself. Ignored for Pages, whose bindings apply on the next deploy.
trueIntegration connected; the Hyperdrive configuration and env sync run asynchronously via the returned job.
application/json- response
integration*job*curl -X POST 'https://capydb.dev/api/capydb/v1/projects/string/integrations/cloudflare/connect' \ -H 'Content-Type: application/json' \ -d '{ "account_id": "string", "api_token": "string"}'{ "integration": { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" }, "job": { "attempts": 0, "claimed_at": "2019-08-24T14:15:22Z", "claimed_by": "string", "host_id": "string", "instance_id": "string", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "error": "string", "id": "string", "last_exit_code": 0, "last_stderr": "string", "last_stdout": "string", "locked_resource": "string", "max_attempts": 0, "organization_id": "string", "preview_database_id": "string", "project_id": "string", "result": null, "retry_classification": "string", "started_at": "2019-08-24T14:15:22Z", "state": "pending", "type": "project.apply_plan", "updated_at": "2019-08-24T14:15:22Z" }}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
projectID*stringProject id.
application/json- body
secret_key*stringClerk secret key. Stored encrypted; never returned.
webhook_signing_secret?stringSvix signing secret of the Clerk webhook endpoint pointing at CapyDB's receiver. Optional: without it the sync is backfill-only.
Integration connected; user backfill runs asynchronously via the returned job.
application/json- response
integration*job*curl -X POST 'https://capydb.dev/api/capydb/v1/projects/string/integrations/clerk/connect' \ -H 'Content-Type: application/json' \ -d '{ "secret_key": "string"}'{ "integration": { "config": null, "created_at": "2019-08-24T14:15:22Z", "external_id": "string", "has_credentials": true, "id": "string", "organization_id": "string", "project_id": "string", "provider": "auth0", "state": "active", "updated_at": "2019-08-24T14:15:22Z" }, "job": { "attempts": 0, "claimed_at": "2019-08-24T14:15:22Z", "claimed_by": "string", "host_id": "string", "instance_id": "string", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "error": "string", "id": "string", "last_exit_code": 0, "last_stderr": "string", "last_stdout": "string", "locked_resource": "string", "max_attempts": 0, "organization_id": "string", "preview_database_id": "string", "project_id": "string", "result": null, "retry_classification": "string", "started_at": "2019-08-24T14:15:22Z", "state": "pending", "type": "project.apply_plan", "updated_at": "2019-08-24T14:15:22Z" }}projectID*stringProject id.
application/json- body
Raw Vercel webhook event payload.
Event accepted.
application/json- response
received*booleancurl -X POST 'https://capydb.dev/api/capydb/v1/integrations/vercel/webhook/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "received": true}projectID*stringProject id.
application/json- body
Raw Netlify deploy event payload.
Event accepted.
application/json- response
received*booleancurl -X POST 'https://capydb.dev/api/capydb/v1/integrations/netlify/webhook/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "received": true}projectID*stringProject id.
application/json- body
Raw Clerk (svix) webhook event payload.
Event accepted.
application/json- response
received*booleancurl -X POST 'https://capydb.dev/api/capydb/v1/integrations/clerk/webhook/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "received": true}projectID*stringProject id.
application/json- body
Raw Auth0 webhook event payload.
Event accepted.
application/json- response
received*booleancurl -X POST 'https://capydb.dev/api/capydb/v1/integrations/auth0/webhook/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "received": true}projectID*stringProject id.
application/json- body
Raw Better Auth webhook event payload.
Event accepted.
application/json- response
received*booleancurl -X POST 'https://capydb.dev/api/capydb/v1/integrations/better-auth/webhook/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "received": true}AuthorizationBearer <token>Org or project-scoped API key, format capy_live_...; Clerk session tokens also accepted.
provider*stringIntegration provider (e.g. vercel, netlify, clerk).
project_id*stringThe CapyDB project to bind the OAuth state to.
Authorization URL.
application/json- response
authorize_url*stringThe provider's authorization URL to open in a browser.
uricurl -X GET 'https://capydb.dev/api/capydb/v1/integrations/string/oauth/start?project_id=string'{ "authorize_url": "http://example.com"}provider*stringIntegration provider (e.g. vercel, netlify, clerk).
code*stringOAuth authorization code from the provider.
state*stringSigned OAuth state issued by the start endpoint.
Redirect to the dashboard integrations page with the provider access token in the URL fragment.
curl -X GET 'https://capydb.dev/api/capydb/v1/integrations/string/oauth/callback?code=string&state=string'