Support tickets
Open and follow your own support tickets without leaving your integration. All endpoints are owner-scoped to the API key holder — you can only see and reply to tickets you created.
Out of scope: staff-side status / assignment / priority / tags surfaces are intentionally not exposed on the Partner API. Those live on the internal staff tool. If you need to escalate or change priority, mention it in a reply and our team will adjust it.
Open a ticket
curl -s -X POST https://api.dcast.pro/api/v1/support/tickets \
-H "Authorization: Bearer pk_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"subject": "Webhook delivery to my endpoint is 401-ing",
"message": "Detail of the issue, expected behavior, what you have already tried.",
"category": "TECHNICAL",
"priority": "MEDIUM",
"sourceUrl": "https://my.app/dashboard/integrations/dcast"
}'
# Response — 201 Created
{
"success": true,
"data": {
"id": "tkt_...",
"ticketNumber": "TKT-20260528-AB1CD",
"userId": "...",
"email": "[email protected]", // pulled from your account
"subject": "Webhook delivery to my endpoint is 401-ing",
"message": "...",
"category": "TECHNICAL",
"priority": "MEDIUM",
"status": "OPEN",
"source": "API",
"createdAt": "...",
"updatedAt": "..."
}
}Body
| Field | Required | Notes |
|---|---|---|
subject | yes | Brief title (non-empty). |
message | yes | Body of the request. Markdown not parsed. |
category | no | One of GENERAL, BILLING, TECHNICAL, ACCOUNT, CONTENT, FEATURE_REQUEST, BUG_REPORT, OTHER. Default GENERAL. |
priority | no | One of LOW, MEDIUM, HIGH, URGENT. Default MEDIUM. |
sourceUrl | no | Page URL where the issue happened (helps triage). |
attachments | no | JSON array of { url, name, mimeType }. Hosted by you; we don't mirror. |
List your tickets
curl -s -H "Authorization: Bearer pk_YOUR_KEY_HERE" \
"https://api.dcast.pro/api/v1/support/tickets?status=OPEN&page=1&limit=25"
# Response — 200
{
"success": true,
"data": [{ "id": "tkt_...", "ticketNumber": "TKT-...", "subject": "...", "status": "OPEN", ... }],
"pagination": { "page": 1, "limit": 25, "total": 3, "pages": 1 }
}?status filter accepts OPEN / IN_PROGRESS / WAITING / RESOLVED / CLOSED.
Read one ticket (with replies)
curl -s -H "Authorization: Bearer pk_YOUR_KEY_HERE" https://api.dcast.pro/api/v1/support/tickets/{ticketId}
# Response includes the conversation:
{
"success": true,
"data": {
"id": "tkt_...", "ticketNumber": "...", "subject": "...", "status": "WAITING",
"replies": [
{ "id": "rpl_...", "userId": "<staff_or_you>", "isStaff": true, "message": "Looking into this.", "createdAt": "..." },
{ "id": "rpl_...", "userId": "<you>", "isStaff": false, "message": "Reproduces every 5 min.", "createdAt": "..." }
]
}
}Internal staff notes (when staff use isInternal=true in their own tool) are filtered out of this response. You only see public replies on the thread.
Reply to a ticket
curl -s -X POST https://api.dcast.pro/api/v1/support/tickets/{ticketId}/replies \
-H "Authorization: Bearer pk_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "message": "Adding more detail: error happens only when..." }'A reply on a RESOLVED ticket auto-moves it back to WAITING so support sees it again. Replies are rejected with 409 TICKET_CLOSED when status is CLOSED — open a new ticket.
Errors
| Code | HTTP | Meaning |
|---|---|---|
BAD_REQUEST | 400 | missing/invalid subject, message, category, or priority |
USER_HAS_NO_EMAIL | 400 | your account has no verified email on file |
NOT_FOUND | 404 | ticket id is not yours or does not exist |
TICKET_CLOSED | 409 | cannot reply to a CLOSED ticket |
