POST
Stable
Dry run contact send
/v1/contacts/send/dry-run
Evaluates template data and existing send-permission rules before enqueueing.
Request
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
projectId |
string | Yes | Project id. | |
environmentId |
string | Yes | Environment id. | |
templateId |
string | Yes | Template id. | |
templateData |
object | Yes | Template data. | |
contactIds |
array | No | Selected contact ids. | |
groupSlug |
string | No | Group slug. | |
curl
curl -X POST 'https://api.emailsdone.dev/v1/contacts/send/dry-run' \
-H 'Authorization: Bearer ed_...' \
-H 'Content-Type: application/json' \
-d '{}'
Response
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
ok |
boolean | Yes | True when dry run completed. | |
eligible |
number | Yes | Eligible recipients. | |
skipped |
object | Yes | Skip counts by reason. | |
{}
Errors
| Status | Code | Message |
|---|---|---|
| 400 | invalid_request |
Request body failed validation. |
| 401 | missing_api_key |
Authorization bearer token is missing. |
| 401 | invalid_api_key |
API key is invalid. |
| 403 | api_key_revoked |
API key has been revoked. |
| 404 | contact_not_found |
Contact was not found. |
| 405 | method_not_allowed |
Only POST is allowed. |
| 500 | internal |
Unexpected server error. |
Notes
- Contacts are tenant-level recipients for app email history, not CRM records.
- Existing environment API keys can access tenant contacts endpoints.