tickets:write scope. Rate limit: 30 requests / minute (see Rate limits).
Prerequisites
- API key with
tickets:readandtickets:write— create or update under Settings → API. - Connected channel — the
channelvalue you send must match a channel type connected in your workspace (for exampleemailorwidget). If the organization has multiple channels of the same type, usechannel_identifierto target a specific inbox address or identifier. - HTTP client —
curl, Postman, or any server that can sendPOSTwith JSON.
Request
Send only the fields listed below. Extra fields in the JSON body return an error.
Request body
Required
Optional — ticket
Optional — contact
Optional — messages
Instead of (or in addition to)note, you can send up to 10 initial messages in messages[]:
Attachments
Attach a file to a message in three calls: request an upload URL, upload the file, then confirm it before referencing it on ticket creation.POST /public/v1/attachments/upload-urlwith the file’s name, MIME type, and size. Returnsidand a presignedupload_url(valid for 30 minutes).PUTthe raw file bytes toupload_url— directly to storage, not through this API.POST /public/v1/attachments/{id}/confirm. This checks the upload against the size limit and the file’s actual content, not just the MIME type you declared in step 1.- Pass the confirmed
idinmessages[].attachment_idswhen you create the ticket.
Minimal example
Internal note only — no contact required:Full example
Contact, tags, and external reference inmetadata:
metadata keys with whatever your system uses — the API stores them as opaque integration fields.
Automation and webhooks
Many teams call this endpoint from HTTP request actions in automation platforms (custom scripts, Zapier, Make, n8n, ecommerce workflows, etc.):- Trigger when your business rule fires (tag added, field missing, status change).
POSTtohttps://api.armin.cx/public/v1/ticketswith your platform’s variable syntax insubject,note,contact, andmetadata.- Map your external order or case ID into
metadataso agents can trace the source.
Every successful request creates a new ticket. Run your automation only when the event should open a ticket (for example when a tag is added), not on every update to the same record.
Response
201 Created — standard v1 success envelope:
data.id (UUID) or data.ticket_number (numeric inbox number) to correlate with later GET requests.
Errors
See Errors for the full catalog and
request_id usage.
Try it first
- In Settings → API, create a key with
tickets:write. - Send a test request using the examples above. Use a test subject or tag (for example
api-test) so your team can spot it in the inbox. - Confirm the ticket appears with the expected channel, contact, tags, and metadata.
Related
OpenAPI reference
Interactive schema and Try it for
POST /tickets.Authentication
Scopes, key rotation, and least privilege.
Rate limits
Write tier (30/min) and backoff on 429.
Migrating from legacy
Map legacy
POST /public/tickets to v1.