# E04xxx — Email sending & delivery

Error codes in the `E04xxx` range that the public Bird API returns. Each code links to its own page (the page its `doc_url` points at) with the cause and what to do. Retired codes stay listed; they are never renamed or reused.

| Code                                | Name                            | Status | Message                                                                                                                                                                                                  |
| ----------------------------------- | ------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`E04000`](/docs/api/errors/E04000) | `EmailBatchRequestTooLarge`     | `413`  | Batch request body exceeds the 20 MB cap.                                                                                                                                                                |
| [`E04001`](/docs/api/errors/E04001) | `AttachmentContentTypeBlocked`  | `422`  | The attachment content type is not allowed. See the email attachment documentation for the blocklist.                                                                                                    |
| [`E04002`](/docs/api/errors/E04002) | `MessageTooLarge`               | `413`  | Estimated generated message size exceeds the 20 MB cap.                                                                                                                                                  |
| [`E04004`](/docs/api/errors/E04004) | `SuppressionNotFound`           | `404`  | Email suppression not found.                                                                                                                                                                             |
| [`E04006`](/docs/api/errors/E04006) | `DomainNotVerified`             | `422`  | The from address uses a domain that is not verified in this workspace.                                                                                                                                   |
| [`E04007`](/docs/api/errors/E04007) | `UnsupportedEmailFeature`       | `422`  | This request contains a reserved field that is not yet supported.                                                                                                                                        |
| [`E04008`](/docs/api/errors/E04008) | `EmailBackendUnavailable`       | `503`  | The email service is temporarily unavailable. Please retry.                                                                                                                                              |
| [`E04009`](/docs/api/errors/E04009) | `OnboardingRecipientNotAllowed` | `422`  | Sends from the shared onboarding domain can only go to verified members of your workspace. To send to any recipient, add and verify a custom sending domain.                                             |
| [`E04010`](/docs/api/errors/E04010) | `OnboardingSendLimitExceeded`   | `429`  | The daily send limit for the shared onboarding domain has been reached. Verify your own sending domain to remove the limit.                                                                              |
| [`E04011`](/docs/api/errors/E04011) | `RecipientDomainNotAllowed`     | `422`  | Sending to reserved testing domains such as @example.com or @test.com is not supported. These domains cannot receive mail — use a real recipient address instead.                                        |
| [`E04012`](/docs/api/errors/E04012) | `EmailContentNotFound`          | `404`  | No content was stored for this message.                                                                                                                                                                  |
| [`E04013`](/docs/api/errors/E04013) | `EmailContentExpired`           | `410`  | The stored content for this message has expired and is no longer available.                                                                                                                              |
| [`E04014`](/docs/api/errors/E04014) | `EmailContentNotReady`          | `425`  | The content for this message is not available yet because it is still being stored. Retry shortly.                                                                                                       |
| [`E04015`](/docs/api/errors/E04015) | `MonthlySendLimitExceeded`      | `429`  | This organization has reached its monthly email send limit.                                                                                                                                              |
| [`E04016`](/docs/api/errors/E04016) | `SendCeilingUnavailable`        | `503`  | The email send-limit service is temporarily unavailable. Please retry.                                                                                                                                   |
| [`E04017`](/docs/api/errors/E04017) | `DailySendLimitExceeded`        | `429`  | This organization has reached its daily email send limit.                                                                                                                                                |
| [`E04021`](/docs/api/errors/E04021) | `EmailTemplateNotFound`         | `404`  | Email template not found.                                                                                                                                                                                |
| [`E04024`](/docs/api/errors/E04024) | `EmailTemplateNotPublished`     | `422`  | The email template has no published version to send. Publish the template first.                                                                                                                         |
| [`E04026`](/docs/api/errors/E04026) | `ContactEmailExists`            | `409`  | A contact with this email address already exists in this workspace.                                                                                                                                      |
| [`E04027`](/docs/api/errors/E04027) | `ContactExternalIdExists`       | `409`  | A contact with this external_id already exists in this workspace.                                                                                                                                        |
| [`E04028`](/docs/api/errors/E04028) | `AudienceInUse`                 | `409`  | This audience is targeted by one or more broadcasts and cannot be deleted. Remove it from those broadcasts first.                                                                                        |
| [`E04029`](/docs/api/errors/E04029) | `ContactPropertyArchived`       | `409`  | This contact property is already archived.                                                                                                                                                               |
| [`E04030`](/docs/api/errors/E04030) | `ContactPropertyNotArchived`    | `409`  | This contact property is not archived.                                                                                                                                                                   |
| [`E04031`](/docs/api/errors/E04031) | `ContactPropertyLimit`          | `422`  | This workspace has reached the maximum number of contact properties. Archived properties still count toward this limit, so archiving does not free a slot; reuse or update an existing property instead. |
| [`E04032`](/docs/api/errors/E04032) | `ContactPropertyKeyExists`      | `409`  | A contact property with this key already exists in this workspace.                                                                                                                                       |
| [`E04033`](/docs/api/errors/E04033) | `EmailSmtpConfigNotFound`       | `404`  | SMTP config not found for this API key.                                                                                                                                                                  |
| [`E04036`](/docs/api/errors/E04036) | —                               | —      | _Retired: no longer returned, never reused._                                                                                                                                                             |

## Related

- [Errors](/docs/api/errors): the full wire contract, status mapping, and all code ranges
- [Error handling](/docs/guides/errors): branching on `type` and `code`, validation details, and `vendor_code`