Providers
Providers API
Section titled “Providers API”Connect, manage, and validate email provider accounts. Optail supports SendGrid, Postmark, Mailgun, and Amazon SES.
GET /v1/providers
Section titled “GET /v1/providers”List all provider accounts for the organization. Credentials are never returned.
Response
Section titled “Response”{ "data": [ { "id": "pa-uuid", "organizationId": "org-uuid", "providerType": "SENDGRID", "displayName": "SendGrid Production", "isActive": true, "createdAt": "2025-01-10T08:00:00Z", "updatedAt": "2025-01-10T08:00:00Z" } ]}POST /v1/providers
Section titled “POST /v1/providers”Connect a new provider account. Credentials are validated against the provider’s API before being encrypted and stored.
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
providerType | string | Yes | One of: SENDGRID, POSTMARK, MAILGUN, SES. |
displayName | string | Yes | A human-readable name for this account (max 255 chars). |
credentials | object | Yes | Provider-specific credentials (see below). |
Credential Fields by Provider
Section titled “Credential Fields by Provider”| Provider | Required Fields |
|---|---|
SENDGRID | apiKey |
POSTMARK | serverToken |
MAILGUN | apiKey, domain |
SES | accessKeyId, secretAccessKey, region |
Example
Section titled “Example”curl -X POST https://api.optail.io/v1/providers \ -H "Authorization: Bearer ms_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "providerType": "SENDGRID", "displayName": "SendGrid Production", "credentials": { "apiKey": "SG.xxxxxxxxxxxxxxxxxxxxx" } }'Response
Section titled “Response”Status: 201 Created
{ "data": { "id": "pa-uuid", "organizationId": "org-uuid", "providerType": "SENDGRID", "displayName": "SendGrid Production", "isActive": true, "createdAt": "2025-01-10T08:00:00Z", "updatedAt": "2025-01-10T08:00:00Z" }}If credentials are invalid, the API returns 422:
{ "error": { "code": "PROVIDER_INVALID_CREDENTIALS", "message": "Email provider error (SENDGRID)" }}GET /v1/providers/:id
Section titled “GET /v1/providers/:id”Get a single provider account. Credentials are never exposed.
PATCH /v1/providers/:id
Section titled “PATCH /v1/providers/:id”Update a provider’s display name or active status.
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | No | New display name. |
isActive | boolean | No | Enable or disable the provider. |
DELETE /v1/providers/:id
Section titled “DELETE /v1/providers/:id”Remove a provider account. Any routing rules pointing to this provider should be updated first.
Status: 200 OK
{ "success": true }POST /v1/providers/:id/validate
Section titled “POST /v1/providers/:id/validate”Re-validate stored credentials for an existing provider account. Updates the isActive flag based on the validation result.
Response
Section titled “Response”{ "valid": true, "providerType": "SENDGRID"}GET /v1/providers/:id/domains
Section titled “GET /v1/providers/:id/domains”List domain verification status for a provider account.
Response
Section titled “Response”{ "data": [ { "id": "dv-uuid", "providerAccountId": "pa-uuid", "domain": "yourdomain.com", "isVerified": true, "dnsRecords": [...], "createdAt": "2025-01-10T08:30:00Z" } ]}