Skip to main content

Documentation Index

Fetch the complete documentation index at: https://osforms.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

All endpoints require authentication via JWT cookie or Authorization: Bearer <token> header.

List integrations

GET /api/v1/integrations
Returns all integrations for the authenticated user.
[
  {
    "_id": "64f1a2b3c4d5e6f7a8b9c0d1",
    "type": "EMAIL",
    "enabled": true,
    "createdAt": "2026-03-01T00:00:00.000Z"
  }
]

Create an integration

POST /api/v1/integrations
{
  "type": "EMAIL",
  "config": {
    "apiKey": "re_xxxxxxxxxxxx",
    "fromEmail": "you@yourdomain.com",
    "toEmail": "you@yourdomain.com",
    "subject": "New form submission"
  }
}
Integration types: EMAIL, WEBHOOK, GOOGLE_SHEETS

EMAIL config

FieldRequiredDescription
apiKeyYesResend API key (re_...)
fromEmailYesSender address on your verified Resend domain
toEmailYesRecipient address for submission notifications
subjectNoEmail subject. Default: "New submission: {form name}"

WEBHOOK config

FieldRequiredDescription
urlYesHTTPS endpoint URL
signingSecretAuto-generatedHMAC-SHA256 signing key — returned on creation, not updatable

GOOGLE_SHEETS config

Google Sheets integrations are configured via OAuth. Use the dashboard UI at /dashboard/integrations to connect your Google account.

Update an integration

PATCH /api/v1/integrations/{id}
{
  "enabled": false
}
Updateable fields: enabled, config (partial updates supported). Config fields are merged, not replaced. Pass only the fields you want to change.

Delete an integration

DELETE /api/v1/integrations/{id}
Returns 204 No Content.

Test an integration

POST /api/v1/integrations/{id}/test
Sends a sample payload through the integration to verify it’s configured correctly.
{
  "success": true,
  "message": "Test email sent"
}

Check integration status

GET /api/v1/integrations/{id}/status
{
  "status": "healthy",
  "lastRun": "2026-03-27T10:00:00.000Z",
  "lastError": null
}
Status values: healthy, failing, never_run