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.