# Blujay API > Send and receive iMessage, RCS and SMS from your Blujay phone numbers with the Blujay API. - [Blujay API](https://docs.blujay.io/index.md): Send and receive iMessage, RCS and SMS from your Blujay phone numbers. - [Quickstart](https://docs.blujay.io/quickstart.md): Get an API key, send your first message and see the reply come back, in about five minutes. - [Key concepts](https://docs.blujay.io/key-concepts.md): The handful of things the Blujay API is built around, and how they fit together. - [Plans](https://docs.blujay.io/plans.md): What the API can do on a Free Plan, Dedicated or AI Agent phone number, and which error each limit returns. - [Authentication](https://docs.blujay.io/authentication.md): Authenticate every request with your workspace API key. - [Making requests](https://docs.blujay.io/making-requests.md): Base URL, response format, IDs, pagination, tracing and versioning. - [Phone numbers and limits](https://docs.blujay.io/phone-numbers.md): List your Blujay phone numbers, read their live sending limits and queue, and handle the limit errors a send can return. - [Send messages](https://docs.blujay.io/messaging/send-messages.md): Start a chat with a first message, send follow-ups, and read back chats and messages. - [Sending rules](https://docs.blujay.io/messaging/sending-rules.md): The rules Blujay enforces on every API send, and the exact error each one returns. - [Track a message](https://docs.blujay.io/messaging/lifecycle.md): Understand message statuses, which service carried a message, why it failed, and how to follow it with webhooks or polling. - [Receive messages](https://docs.blujay.io/messaging/receive-messages.md): How replies, photos, group messages, reactions and edits reach you, and what to do with each. - [iMessage, RCS or SMS](https://docs.blujay.io/messaging/choosing-a-service.md): What works on each service, how to check which service a phone number gets, and when to skip the check and send with Auto. - [Media](https://docs.blujay.io/messaging/media.md): Send photos, videos and files by uploading them once or from a public URL, and download media you receive. - [Contact cards](https://docs.blujay.io/messaging/contact-cards.md): Save vCards once and send them as native contact cards that recipients can save in one tap. - [Group chats](https://docs.blujay.io/messaging/group-chats.md): Start group chats, send follow-ups, and manage a group's participants, name and membership. - [Threaded replies](https://docs.blujay.io/messaging/replies.md): Reply to a specific iMessage in a thread, read reply details back, and page through a whole thread. - [Effects and text styles](https://docs.blujay.io/messaging/effects.md): Add iMessage screen and bubble effects to a message, and style ranges of text as bold, italic, strikethrough or underline. - [Edit and unsend](https://docs.blujay.io/messaging/edit-and-unsend.md): Change the text of an iMessage you sent, take one back, and track edits and unsends through webhooks. - [Typing and read receipts](https://docs.blujay.io/messaging/typing-and-read-receipts.md): Show a typing indicator, mark chats as read, and display your contacts' typing indicators from webhooks. - [Contacts](https://docs.blujay.io/contacts.md): Create, find, update and delete contacts, and set their tags, stage and assignee. - [Opt-outs](https://docs.blujay.io/opt-outs.md): Stop messages to a contact or an address, lift an opt-out, and handle RECIPIENT_SUPPRESSED on sends. - [Workflows](https://docs.blujay.io/workflows.md): List the manual workflows in your workspace and enroll contacts in them, with safe retries. - [Webhooks](https://docs.blujay.io/webhooks/overview.md): Get replies, delivery updates and other events pushed to your server as they happen. - [Verify signatures](https://docs.blujay.io/webhooks/verify-signatures.md): Confirm that every webhook request came from Blujay and wasn't changed or replayed. - [Events](https://docs.blujay.io/webhooks/events.md): Every webhook event type, when it is sent and what its payload contains. - [Delivery and retries](https://docs.blujay.io/webhooks/delivery.md): How Blujay retries failed deliveries, how to inspect attempts, and how to replay an event. - [Versions](https://docs.blujay.io/webhooks/versions.md): Webhook payloads are versioned by date, so new fields never surprise an existing receiver. - [Idempotency](https://docs.blujay.io/idempotency.md): Retry sends and other changes safely, without ever sending a message twice. - [Rate limits](https://docs.blujay.io/rate-limits.md): API request limits, capability-check quotas, and how to back off. - [Sending best practices](https://docs.blujay.io/best-practices.md): Advice for integrations that get replies and keep your Blujay numbers healthy. The hard rules live on Sending rules. - [Debugging](https://docs.blujay.io/debugging.md): Trace a request, find out why a message didn't arrive, and fix the most common problems. - [Examples](https://docs.blujay.io/examples.md): Complete, copy-paste programs for the most common Blujay integrations. - [Build with AI](https://docs.blujay.io/build-with-ai.md): The machine-readable docs (llms.txt, OpenAPI, Postman, MCP) and the prompts that let an AI coding assistant write and review your integration. - [FAQ](https://docs.blujay.io/faq.md): Quick answers to the questions developers ask most. - [Glossary](https://docs.blujay.io/glossary.md): The words the Blujay API docs use, each defined once. - [Support](https://docs.blujay.io/support.md): How to get help with the Blujay API. - [API reference](https://docs.blujay.io/api-reference/introduction.md): Every Blujay API endpoint, with a playground you can call from your browser. - [Get the current credential](https://docs.blujay.io/api-reference/auth/get-the-current-credential.md): Returns the workspace and the API key that authenticated this request. Call it to confirm your key works. - [List chats](https://docs.blujay.io/api-reference/chats/list-chats.md): Returns the chats in your workspace, one page at a time. Pass `next_cursor` from the previous page as `cursor` to get the next page. - [Create a chat and send the first message](https://docs.blujay.io/api-reference/chats/create-a-chat-and-send-the-first-message.md): Starts a chat from one of your Blujay numbers and sends its first message. One recipient in `to` creates a direct chat; two or more create a group chat. - [Get a chat](https://docs.blujay.io/api-reference/chats/get-a-chat.md): Returns one chat in your workspace. - [Rename a group chat](https://docs.blujay.io/api-reference/chats/rename-a-group-chat.md): Sets the name of an active iMessage group chat. Everyone in the group sees the new name. Blujay returns `202` once the change is accepted. - [Leave a group chat](https://docs.blujay.io/api-reference/chats/leave-a-group-chat.md): Removes one of your Blujay numbers from an active iMessage group chat. If more than one of your numbers is in the group, set `from_phone_number_id` to choose which one leaves; otherwise you can send an empty body. - [List group participants](https://docs.blujay.io/api-reference/chats/list-group-participants.md): Returns the people in a group chat. Your own Blujay numbers in the group aren't listed here; they appear in the chat's `phone_numbers` field. - [Add a group participant](https://docs.blujay.io/api-reference/chats/add-a-group-participant.md): Adds a phone number or email address to an active iMessage group chat. One of your Blujay numbers in the group makes the change. If more than one of your numbers is in the group, set `from_phone_number_id` to choose which one. - [Remove a group participant](https://docs.blujay.io/api-reference/chats/remove-a-group-participant.md): Removes a phone number or email address from an active iMessage group chat. If more than one of your Blujay numbers is in the group, set `from_phone_number_id` to choose which one makes the change. - [Start a typing indicator](https://docs.blujay.io/api-reference/chats/start-a-typing-indicator.md): Shows a typing indicator in an active direct or group chat. Typing is best effort: - Direct chats confirmed as iMessage get a typing indicator. - iMessage group chats get one when the chat's number is still in the group. - SMS and RCS chats, direct chats whose service isn't confirmed yet, and groups… - [Stop a typing indicator](https://docs.blujay.io/api-reference/chats/stop-a-typing-indicator.md): Clears a typing indicator in an active direct or group chat. The same rules apply as for starting one. A `204` means Blujay accepted the request, not that an indicator was showing or was cleared. - [Mark a chat as read](https://docs.blujay.io/api-reference/chats/mark-a-chat-as-read.md): Marks the chat's incoming messages as read in Blujay. In direct iMessage and RCS chats, Blujay also sends a read receipt when it can. SMS and group chats are only marked read in Blujay. A `204` means the request was accepted; it doesn't confirm that the other person sees a read receipt. - [List messages in a chat](https://docs.blujay.io/api-reference/messages/list-messages-in-a-chat.md): Returns the messages in one chat, one page at a time, most recently updated first (a read receipt or an edit moves an older message up). Sort a page by `created_at` to display a conversation in order. - [Send a message](https://docs.blujay.io/api-reference/messages/send-a-message.md): Sends a message in an existing chat. Blujay returns `202` as soon as the message is accepted and sends it in the background. Follow its progress with message webhooks or `GET /v1/messages/{message_id}`. - [List messages](https://docs.blujay.io/api-reference/messages/list-messages.md): Returns messages across all chats in your workspace, one page at a time, most recently updated first. Filter by `status`, or by `updated_after` to pick up changes since your last sync. Sort a page by `created_at` to display messages in order. - [Get a message](https://docs.blujay.io/api-reference/messages/get-a-message.md): Returns one message, including its current status and the service that carried it. Add `include=edit_history` to get earlier versions of an edited message. - [Edit a message](https://docs.blujay.io/api-reference/messages/edit-a-message.md): Changes the text of an iMessage you sent from this workspace. The edit also shows on the recipient's device. - [List a reply thread](https://docs.blujay.io/api-reference/messages/list-a-reply-thread.md): Given any message in an iMessage reply thread, returns the original message and every reply, including replies that are still sending. Reactions are never part of a thread. - [Unsend a message](https://docs.blujay.io/api-reference/messages/unsend-a-message.md): Unsends a text-only iMessage you sent from this workspace. Apple allows this within 2 minutes of sending. Recipients on older Apple software may still see the message. - [Retry a failed message](https://docs.blujay.io/api-reference/messages/retry-a-failed-message.md): Sends a failed outbound message again. Only direct-chat messages that failed before they left Blujay can be retried. Group messages, and messages that may already have reached the recipient, return `409 RETRY_NOT_ALLOWED`. `RETRY_NOT_ALLOWED` means Blujay can't safely send this message again, often… - [List phone numbers](https://docs.blujay.io/api-reference/phone-numbers/list-phone-numbers.md): Returns the Blujay numbers in your workspace. For each number you get whether it can send right now (`send_status`), what it supports (`capabilities`), and its link rules (`outbound_policy`). - [Get a phone number](https://docs.blujay.io/api-reference/phone-numbers/get-a-phone-number.md): Returns one of your Blujay numbers with the same detail as the list. A number that has been retired returns `status: unavailable` and never reports current health, capacity, label or calling readiness. - [Check iMessage, RCS or SMS support](https://docs.blujay.io/api-reference/capability/check-imessage-rcs-or-sms-support.md): Checks which service Blujay would use to reach a US phone number from one of your numbers: `iMessage`, `RCS` or `SMS`. If Blujay can't confirm iMessage or RCS, the result is `SMS`. - [List assignable team members](https://docs.blujay.io/api-reference/team-members/list-assignable-team-members.md): Returns the active team members in your workspace that you can assign contacts to. Pass a member's `id` to `PATCH /v1/contacts/{contact_id}/assignee`. - [List workflows](https://docs.blujay.io/api-reference/workflows/list-workflows.md): Returns the active, published workflows in your workspace that start manually. Each has a `workflow_id` and `label`; use the ID to enroll a contact. Workflow steps and run history aren't returned. - [Enroll a contact in a workflow](https://docs.blujay.io/api-reference/workflows/enroll-a-contact-in-a-workflow.md): Starts a manual workflow for one contact. - [List contacts](https://docs.blujay.io/api-reference/contacts/list-contacts.md): Returns the contacts in your workspace. - [Create a contact](https://docs.blujay.io/api-reference/contacts/create-a-contact.md): Creates a contact. `phone_number` is required; `email` and `name` are optional. Returns `409 CONTACT_ALREADY_EXISTS` if the phone number or email already belongs to a contact in your workspace. - [Create or update a contact](https://docs.blujay.io/api-reference/contacts/create-or-update-a-contact.md): Creates or updates a contact by phone number. `phone_number` is required; `email` and `name` are optional. - [Search contacts](https://docs.blujay.io/api-reference/contacts/search-contacts.md): Finds contacts by phone number, email address, or free text (`q`). Returns up to `limit` best matches. Results aren't paginated. - [Get a contact](https://docs.blujay.io/api-reference/contacts/get-a-contact.md): Returns one contact, including its tags, stage, assignee and opt-out state. - [Delete a contact](https://docs.blujay.io/api-reference/contacts/delete-a-contact.md): Deletes the contact. If the contact had opted out, the opt-out stays in place, so you still can't message that phone number or email. - [Update a contact](https://docs.blujay.io/api-reference/contacts/update-a-contact.md): Changes a contact's phone number, email or name. Fields you leave out keep their values. A phone number or email that already belongs to another contact returns `409 CONTACT_ALREADY_EXISTS`. To change tags, stage or assignee, use their own endpoints. - [Add a tag to a contact](https://docs.blujay.io/api-reference/contacts/add-a-tag-to-a-contact.md): Adds a tag to the contact and returns the contact. `tag_added` tells you whether the tag was new. - [Mark a contact completed](https://docs.blujay.io/api-reference/contacts/mark-a-contact-completed.md): Sets the contact's stage to `Completed` and returns the contact. `Completed` is the only stage you can set through the API. `stage_changed` tells you whether the stage changed. - [Assign a contact to a team member](https://docs.blujay.io/api-reference/contacts/assign-a-contact-to-a-team-member.md): Assigns the contact to a team member and returns the contact. Get member IDs from `GET /v1/team-members/assignable`. `assignment_changed` tells you whether the assignee changed. - [Opt out a contact](https://docs.blujay.io/api-reference/contacts/opt-out-a-contact.md): Opts the contact out of messages. Sends to an opted-out contact are rejected with `403 RECIPIENT_SUPPRESSED`. - [Remove a contact's opt-out](https://docs.blujay.io/api-reference/contacts/remove-a-contacts-opt-out.md): Removes an explicit opt-out from the contact. - [Opt out a phone number or email](https://docs.blujay.io/api-reference/contacts/opt-out-a-phone-number-or-email.md): Opts out a phone number or email address, even if it doesn't belong to a contact yet. Sends to that address are rejected with `403 RECIPIENT_SUPPRESSED`. - [Upload an attachment](https://docs.blujay.io/api-reference/attachments/upload-an-attachment.md): Starts an upload for a file you can reuse in messages. The response gives you an `upload_url` and `upload_headers`. - [Get an attachment](https://docs.blujay.io/api-reference/attachments/get-an-attachment.md): Returns an attachment's details. The first read after an upload checks the uploaded bytes. Until the upload finishes you get `409 ATTACHMENT_NOT_READY`; if the bytes don't match what you declared you get `422 ATTACHMENT_UPLOAD_INVALID`. - [Delete an attachment](https://docs.blujay.io/api-reference/attachments/delete-an-attachment.md): Stops the attachment from being sent or downloaded again, effective immediately. Messages that already include it keep their reference to it. - [Download an attachment](https://docs.blujay.io/api-reference/attachments/download-an-attachment.md): Returns the attachment's file. Authenticate the same way as any other API call. Message parts link here through `download_url`. - [List saved vCards](https://docs.blujay.io/api-reference/vcards/list-saved-vcards.md): Returns your workspace's saved contact cards, most recently updated first. - [Save a vCard](https://docs.blujay.io/api-reference/vcards/save-a-vcard.md): Saves a contact card for your workspace, such as your support line or a colleague's details. To send it, add a `vcard` part with its ID to a message. Card photos are managed in the Blujay app. - [Get a saved vCard](https://docs.blujay.io/api-reference/vcards/get-a-saved-vcard.md): Returns one saved contact card. - [Delete a saved vCard](https://docs.blujay.io/api-reference/vcards/delete-a-saved-vcard.md): Deletes a saved contact card. Messages that already included the card keep their copy. - [Update a saved vCard](https://docs.blujay.io/api-reference/vcards/update-a-saved-vcard.md): Changes only the fields you send. The card must keep at least one phone number or email. - [List webhook subscriptions](https://docs.blujay.io/api-reference/webhooks/list-webhook-subscriptions.md): Returns your workspace's webhook subscriptions. Signing secrets aren't included; each subscription shows only `signing_secret_hint`. - [Create a webhook subscription](https://docs.blujay.io/api-reference/webhooks/create-a-webhook-subscription.md): Subscribes an HTTPS endpoint to the events you choose. The response includes `signing_secret`, which is shown only this once. Store it securely; you need it to verify webhook signatures. To change the secret, create a new subscription and delete the old one. - [Get a webhook subscription](https://docs.blujay.io/api-reference/webhooks/get-a-webhook-subscription.md): Returns one webhook subscription. The signing secret isn't included. - [Delete a webhook subscription](https://docs.blujay.io/api-reference/webhooks/delete-a-webhook-subscription.md): Deletes the subscription so it stops receiving new events. Deleting it again returns `404`. - [Update a webhook subscription](https://docs.blujay.io/api-reference/webhooks/update-a-webhook-subscription.md): Changes only the fields you send. Set `status: disabled` to pause a subscription; disabled subscriptions don't receive new events. Changing `webhook_version` affects only events created after the change. - [List webhook delivery attempts](https://docs.blujay.io/api-reference/webhooks/list-webhook-delivery-attempts.md): Returns the attempts Blujay made to deliver events to this subscription. Each attempt shows the HTTP status your endpoint returned and, when it failed, an `error_code` and `error_message`. Filter by `event_id` to see every attempt for one event. - [Replay a webhook event](https://docs.blujay.io/api-reference/webhooks/replay-a-webhook-event.md): Requests that a stored event be sent to this subscription again. The event keeps its original `event_id`. - [Webhook event](https://docs.blujay.io/api-reference/webhooks/webhook-event.md): Blujay sends each event as an HTTPS `POST` with a JSON body to the URL on your subscription. Respond with any `2xx` status to acknowledge it. You can see every delivery attempt with `GET /v1/webhook-subscriptions/{subscription_id}/deliveries`. - [Errors](https://docs.blujay.io/errors/index.md): Every error has a stable code, a retry signal and a page that explains how to fix it. - [VALIDATION_ERROR](https://docs.blujay.io/errors/validation-error.md): Validation error - [INVALID_PUBLIC_ID](https://docs.blujay.io/errors/invalid-public-id.md): Invalid ID - [INVALID_CURSOR](https://docs.blujay.io/errors/invalid-cursor.md): Invalid pagination cursor - [NOT_FOUND](https://docs.blujay.io/errors/not-found.md): Not found - [FEATURE_NOT_ENABLED](https://docs.blujay.io/errors/feature-not-enabled.md): Feature not enabled - [UNAUTHORIZED](https://docs.blujay.io/errors/unauthorized.md): Unauthorized - [API_KEY_REVOKED](https://docs.blujay.io/errors/api-key-revoked.md): API key revoked - [API_KEY_EXPIRED](https://docs.blujay.io/errors/api-key-expired.md): API key expired - [OAUTH_TOKEN_INVALID](https://docs.blujay.io/errors/oauth-token-invalid.md): OAuth token invalid - [OAUTH_SCOPE_REQUIRED](https://docs.blujay.io/errors/oauth-scope-required.md): OAuth scope required - [OAUTH_ROUTE_NOT_ENABLED](https://docs.blujay.io/errors/oauth-route-not-enabled.md): Endpoint requires an API key - [IDEMPOTENCY_REQUEST_MISMATCH](https://docs.blujay.io/errors/idempotency-request-mismatch.md): Idempotency key reused with a different request - [IDEMPOTENCY_KEY_MISMATCH](https://docs.blujay.io/errors/idempotency-key-mismatch.md): Idempotency keys disagree - [IDEMPOTENCY_IN_PROGRESS](https://docs.blujay.io/errors/idempotency-in-progress.md): Request with this key still in progress - [RATE_LIMIT_EXCEEDED](https://docs.blujay.io/errors/rate-limit-exceeded.md): Rate limit exceeded - [QUEUE_FULL](https://docs.blujay.io/errors/queue-full.md): Phone number queue full - [ATTACHMENT_CAPACITY_EXCEEDED](https://docs.blujay.io/errors/attachment-capacity-exceeded.md): Too many pending uploads - [FIRST_MESSAGE_LINK_NOT_ALLOWED](https://docs.blujay.io/errors/first-message-link-not-allowed.md): Links not allowed in a first message - [PRE_REPLY_CONTENT_BLOCKED](https://docs.blujay.io/errors/pre-reply-content-blocked.md): Links and attachments wait for a reply - [PRE_REPLY_LENGTH_EXCEEDED](https://docs.blujay.io/errors/pre-reply-length-exceeded.md): Text too long before a reply - [PRE_REPLY_LIMIT_REACHED](https://docs.blujay.io/errors/pre-reply-limit-reached.md): Too many texts in a row without a reply - [RECIPIENT_SUPPRESSED](https://docs.blujay.io/errors/recipient-suppressed.md): Recipient opted out - [CONTACT_NOT_VERIFIED](https://docs.blujay.io/errors/contact-not-verified.md): Contact not verified - [CONTACT_MUST_TEXT_FIRST](https://docs.blujay.io/errors/contact-must-text-first.md): Number only replies to people who text it first - [SENDER_SUSPENDED](https://docs.blujay.io/errors/sender-suspended.md): Sending suspended - [SENDER_RETIRED](https://docs.blujay.io/errors/sender-retired.md): Phone number retired - [FROM_NUMBER_REQUIRED](https://docs.blujay.io/errors/from-number-required.md): Blujay can't tell which number to send from - [INVALID_MESSAGE](https://docs.blujay.io/errors/invalid-message.md): Message cannot be retried - [RETRY_NOT_ALLOWED](https://docs.blujay.io/errors/retry-not-allowed.md): Retry not allowed - [UNSUPPORTED_CHAT_OPERATION](https://docs.blujay.io/errors/unsupported-chat-operation.md): Not supported for this chat - [REPLY_TARGET_NOT_FOUND](https://docs.blujay.io/errors/reply-target-not-found.md): Reply target not found - [REPLY_TARGET_NOT_IN_CHAT](https://docs.blujay.io/errors/reply-target-not-in-chat.md): Reply target is in another chat - [REPLY_TARGET_NOT_REPLYABLE](https://docs.blujay.io/errors/reply-target-not-replyable.md): Message cannot be replied to - [REPLY_TARGET_NOT_SENT](https://docs.blujay.io/errors/reply-target-not-sent.md): Reply target not sent yet - [PHONE_NUMBER_REQUIRED](https://docs.blujay.io/errors/phone-number-required.md): Phone number required - [LAST_PHONE_NUMBER_IN_GROUP](https://docs.blujay.io/errors/last-phone-number-in-group.md): Last phone number in the group - [GROUP_MINIMUM_PARTICIPANTS](https://docs.blujay.io/errors/group-minimum-participants.md): Group too small - [PHONE_NUMBER_HAS_SCHEDULED_MESSAGES](https://docs.blujay.io/errors/phone-number-has-scheduled-messages.md): Scheduled messages pending - [PHONE_NUMBER_HAS_MESSAGES_SENDING](https://docs.blujay.io/errors/phone-number-has-messages-sending.md): Messages still sending - [MESSAGE_NOT_SENT_YET](https://docs.blujay.io/errors/message-not-sent-yet.md): Message not sent yet - [MESSAGE_NOT_EDITABLE](https://docs.blujay.io/errors/message-not-editable.md): Message cannot be changed - [EDIT_WINDOW_EXPIRED](https://docs.blujay.io/errors/edit-window-expired.md): Edit window expired - [EDIT_LIMIT_REACHED](https://docs.blujay.io/errors/edit-limit-reached.md): Edit limit reached - [UNSEND_WINDOW_EXPIRED](https://docs.blujay.io/errors/unsend-window-expired.md): Unsend window expired - [EDIT_UNCHANGED](https://docs.blujay.io/errors/edit-unchanged.md): Text unchanged - [SENDER_UNAVAILABLE](https://docs.blujay.io/errors/sender-unavailable.md): Phone number unavailable - [CHANGE_REJECTED](https://docs.blujay.io/errors/change-rejected.md): Change refused - [CHANGE_UNCONFIRMED](https://docs.blujay.io/errors/change-unconfirmed.md): Change not confirmed - [ATTACHMENT_NOT_READY](https://docs.blujay.io/errors/attachment-not-ready.md): Attachment not uploaded yet - [ATTACHMENT_UPLOAD_INVALID](https://docs.blujay.io/errors/attachment-upload-invalid.md): Upload does not match - [ATTACHMENT_TOO_LARGE](https://docs.blujay.io/errors/attachment-too-large.md): Attachment too large - [UNSUPPORTED_ATTACHMENT_TYPE](https://docs.blujay.io/errors/unsupported-attachment-type.md): Unsupported file type - [ATTACHMENT_FETCH_FAILED](https://docs.blujay.io/errors/attachment-fetch-failed.md): Media URL could not be fetched - [ATTACHMENT_STORAGE_UNAVAILABLE](https://docs.blujay.io/errors/attachment-storage-unavailable.md): Storage temporarily unavailable - [CONTACT_ALREADY_EXISTS](https://docs.blujay.io/errors/contact-already-exists.md): Contact already exists - [CONTACT_MATCH_CONFLICT](https://docs.blujay.io/errors/contact-match-conflict.md): Email belongs to another contact - [WORKFLOW_LIFECYCLE_ERROR](https://docs.blujay.io/errors/workflow-lifecycle-error.md): Workflow not accepting enrollments - [WORKFLOW_VALIDATION_ERROR](https://docs.blujay.io/errors/workflow-validation-error.md): Enrollment invalid - [UNSUPPORTED_WEBHOOK_EVENT](https://docs.blujay.io/errors/unsupported-webhook-event.md): Unknown webhook event - [WEBHOOK_URL_INVALID](https://docs.blujay.io/errors/webhook-url-invalid.md): Webhook URL invalid - [WEBHOOK_URL_UNSAFE](https://docs.blujay.io/errors/webhook-url-unsafe.md): Webhook URL not allowed - [WEBHOOK_URL_UNRESOLVABLE](https://docs.blujay.io/errors/webhook-url-unresolvable.md): Webhook host not found - [WEBHOOK_VERSION_UNSUPPORTED](https://docs.blujay.io/errors/webhook-version-unsupported.md): Webhook version not supported - [WEBHOOK_SUBSCRIPTION_INACTIVE](https://docs.blujay.io/errors/webhook-subscription-inactive.md): Subscription not active for this event - [WEBHOOK_PHONE_NUMBER_EXCLUDED](https://docs.blujay.io/errors/webhook-phone-number-excluded.md): Phone number not selected - [CAPABILITY_CHECK_UNAVAILABLE](https://docs.blujay.io/errors/capability-check-unavailable.md): Capability check unavailable - [QUEUE_UNAVAILABLE](https://docs.blujay.io/errors/queue-unavailable.md): Queue unavailable - [PHONE_NUMBER_UNAVAILABLE](https://docs.blujay.io/errors/phone-number-unavailable.md): Phone number temporarily unreachable - [INTERNAL_ERROR](https://docs.blujay.io/errors/internal-error.md): Internal error ## OpenAPI Specs - [openapi](/api-reference/openapi.yaml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.