Overview
The Ensoras API gives you access to your project's tickets. Read tickets with their messages and attachments, and post replies from your own tools. Use it to build custom integrations, dashboards, or sync ticket data with external systems.
Replying to Tickets
POST /tickets/{uuid}/messages posts a reply as a human agent. By default the reply reaches the customer right away on the ticket's channel. Send status=draft to hold it for approval instead: the reply waits in the ticket view with Approve and Reject buttons, and the customer sees nothing until someone on your team approves it.
To send a reply later, add scheduled_at with an ISO 8601 time that includes your timezone offset, for example 2025-12-02T09:00:00+02:00. It must be in the future and at most 48 hours ahead. The reply comes back with status scheduled and goes out at that time. Scheduling works for replies you send, not for drafts. Every ticket in the list and single-ticket responses shows scheduled_messages_count and next_scheduled_at, so you can see which tickets have replies queued.
To attach files, send the request as multipart/form-data with up to 5 files in attachments[]:
curl -H "Authorization: Bearer ensk_your_api_key_here" \
-F "message=Your refund was issued today." \
-F "status=draft" \
-F "attachments[]=@receipt.pdf" \
https://app.ensoras.com/api/v1/tickets/{uuid}/messages
To change a draft before someone approves it, send PATCH /tickets/{uuid}/messages/{messageUuid} with the new message. This works for any reply waiting for approval, including drafts Ensoras wrote.
Resolving Tickets
POST /tickets/{uuid}/resolve marks a ticket resolved once the issue is handled. It counts toward your resolution stats, and the ticket reopens if the customer writes again.
Attachments
Each message in a ticket response lists its attachments. The url and download_url links are signed and stop working after 60 minutes. Fetch the ticket again to get fresh links.
Base URL: https://app.ensoras.com/api/v1
Authentication
All API requests require a project API key sent as a Bearer token in the Authorization header:
curl -H "Authorization: Bearer ensk_your_api_key_here" \
https://app.ensoras.com/api/v1/tickets
Creating an API Key
- Open your project in Ensoras
- Navigate to Developers > API Keys
- Enter a name for the key and click Create Key
- Copy the key immediately — it will not be shown again
API keys are prefixed with ensk_ and are scoped to a single project. Each key can only access tickets belonging to the project it was created for.
Rate Limiting
Requests are limited to 60 per minute per IP address. If you exceed the limit, you will receive a 429 Too Many Requests response.
Pagination
List endpoints return paginated results. Use page and per_page query parameters to navigate through results. The maximum per_page value is 100 (default: 25).
Pagination metadata is included in the meta and links fields of the response.