Partner API base path is /api/v1 on https://api.dcast.pro. This site documents the live surface; use the Quickstart QA curls to validate keys and routes.

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

FieldRequiredNotes
subjectyesBrief title (non-empty).
messageyesBody of the request. Markdown not parsed.
categorynoOne of GENERAL, BILLING, TECHNICAL, ACCOUNT, CONTENT, FEATURE_REQUEST, BUG_REPORT, OTHER. Default GENERAL.
prioritynoOne of LOW, MEDIUM, HIGH, URGENT. Default MEDIUM.
sourceUrlnoPage URL where the issue happened (helps triage).
attachmentsnoJSON 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

CodeHTTPMeaning
BAD_REQUEST400missing/invalid subject, message, category, or priority
USER_HAS_NO_EMAIL400your account has no verified email on file
NOT_FOUND404ticket id is not yours or does not exist
TICKET_CLOSED409cannot reply to a CLOSED ticket
Support tickets — dcast.pro API docs