Developer documentation
Muchcane API
Programmatically manage tickets and agents. Base URL: https://api.muchcane.site/v1
Authentication
Authenticate every request with a Bearer API key issued from your workspace settings. Keys are scoped to a single workspace and can be rotated at any time.
Authorization: Bearer mc_live_xxxxxxxxxxxxxxxx
Content-Type: application/json
Never embed API keys in client-side code. Prefer server-to-server calls or secure backend proxies.
Tickets
Tickets represent support conversations with ownership, priority, and SLA state.
List tickets
GET https://api.muchcane.site/v1/tickets
Query parameters: status, assignee_id, priority, page, per_page.
curl -X GET "https://api.muchcane.site/v1/tickets?status=open" \
-H "Authorization: Bearer mc_live_xxxxxxxx"
{
"data": [
{
"id": "tkt_01HXYZ",
"subject": "Billing inquiry",
"status": "open",
"priority": "normal",
"assignee_id": "agt_42",
"sla": {
"first_response_due_at": "2026-06-15T18:00:00Z",
"breached": false
},
"created_at": "2026-06-15T16:12:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 128 }
}
Create a ticket
POST https://api.muchcane.site/v1/tickets
curl -X POST "https://api.muchcane.site/v1/tickets" \
-H "Authorization: Bearer mc_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"subject": "Account access issue",
"body": "Customer cannot reset password.",
"priority": "high",
"requester_email": "customer@example.com"
}'
Get a ticket
GET https://api.muchcane.site/v1/tickets/{id}
Update a ticket
PATCH https://api.muchcane.site/v1/tickets/{id}
Updatable fields include status, priority, assignee_id, and tags.
Add a reply
POST https://api.muchcane.site/v1/tickets/{id}/messages
curl -X POST "https://api.muchcane.site/v1/tickets/tkt_01HXYZ/messages" \
-H "Authorization: Bearer mc_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"body": "We have reset your access link.",
"public": true
}'
Agents
Agents are workspace users who can own tickets and appear in assignment rules.
List agents
GET https://api.muchcane.site/v1/agents
{
"data": [
{
"id": "agt_42",
"name": "Jordan Lee",
"email": "jordan@company.com",
"role": "agent",
"active": true,
"open_ticket_count": 14
}
]
}
Get an agent
GET https://api.muchcane.site/v1/agents/{id}
Create an agent
POST https://api.muchcane.site/v1/agents
curl -X POST "https://api.muchcane.site/v1/agents" \
-H "Authorization: Bearer mc_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Sam Rivera",
"email": "sam@company.com",
"role": "agent"
}'
Update an agent
PATCH https://api.muchcane.site/v1/agents/{id}
Set active to false to deactivate without deleting historical ownership records.
Errors
Errors return JSON with a machine-readable code and human-readable message.
{
"error": {
"code": "not_found",
"message": "Ticket not found"
}
}
- 400 Invalid request body or parameters
- 401 Missing or invalid API key
- 403 Insufficient permissions for the resource
- 404 Resource does not exist
- 429 Rate limit exceeded
- 500 Unexpected server error
Rate limits
Standard workspaces are limited to 120 requests per minute per API key. Rate limit headers are returned on every response:
- X-RateLimit-Limit
- X-RateLimit-Remaining
- X-RateLimit-Reset
Questions about the API? Email hello@muchcane.site.