Skip to content
Chat on your store is live, answered from the same inbox.
GROWTH DEPT.HELPDESK

REST API

Everything in the helpdesk, from your own code.

GET /api/tickets?limit=1
{
  "object": "list",
  "data": [{
    "id": 4182,
    "status": "open",
    "channel": "email",
    "subject": "Where is order #1042?"
  }],
  "meta": { "next_cursor": "aWQ6NDE4Mg" }
}

Tickets, messages, customers, agents, teams, tags, macros, rules, views, fields, surveys, integrations and events, over HTTPS with JSON. Paths, fields and pagination follow Gorgias's REST API.

  • HTTP Basic or Bearer
  • Cursor pagination
  • Signed webhooks
  • OpenAPI reference

Why it matters

Keep the code you wrote for Gorgias's REST API

  • Rewriting integrations to switch helpdesks

    Change the base URL and key

    Paths, fields and pagination follow Gorgias's REST API.

  • Polling for changes

    Webhooks on every change

    Ticket created, updated and new message events, signed and retried.

  • Things only the app can do

    The app uses the same API

    Anything an agent does on screen, a script can do.

A key for each job, shown once

Create a key in Settings for an agent. It acts with that agent's role, so a key for a read-only agent can only read. The key is shown once, stored only as a hash, and can be revoked at any time.

Send the agent's email and the key as HTTP Basic credentials, or the key alone as a Bearer token. The key decides which helpdesk the request is for.

Copy this key now. It is not shown again.

7c1e0b4f2a9d6e3b8a51f0c2d7e4b9a6

KeyLast used
Order sync7c1e0b…Just nowRevoke
Warehouse export19ab3d…2h agoRevoke

Answer a customer from a script

Add a public message to an email ticket and the helpdesk sends it like any other reply: from the mailbox the ticket came in on, in the same thread, with the agent's signature.

Lists page with a cursor and sort with order_by, so a sync job can walk every ticket without missing or repeating one.

curl -X POST https://cs.growthdept.ai/api/tickets/4182/messages \
  -u "$HELPDESK_EMAIL:$HELPDESK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "email",
    "via": "api",
    "from_agent": true,
    "public": true,
    "sender": { "email": "ana@demostore.example" },
    "receiver": { "email": "maya.okafor@example.com" },
    "body_text": "Hi Maya, your parcel is at the regional hub. We have asked the carrier to trace it."
  }'

Hear about changes as they happen

An HTTP integration posts to your URL when a ticket is created or updated or gets a new message. You write the body as a template, and fields such as {{ticket.id}} are filled in for each delivery.

Deliveries are signed, and retried with a growing delay when your server does not answer.

URL

https://hooks.example.com/helpdesk

Method

POST

Content type

application/json

Send on

  • Ticket created
  • Ticket updated
  • Message added

Body

{"ticket_id": {{ticket.id}},
 "status": "{{ticket.status}}"}

Built to be scripted

  • The app uses it too

    The helpdesk's own pages call the same endpoints, so nothing on screen is out of reach for a script.

  • Moving code from Gorgias

    Scripts written for Gorgias's REST API work once they point at the new base URL and key.

  • Clear limits

    40 calls in any 20 seconds per key. Past that the API answers 429 and says how long to wait.

  • Errors that say why

    A request the API refuses comes back with the field and the reason, not a bare status code.

Questions

HTTP Basic with an agent's email and API key, or the key alone as a Bearer token.

40 calls in any 20 seconds per key. Past that the API answers 429 and says how long to wait.

Yes. The API docs on this site are generated from it.

Point your scripts at a new base URL

Book a 45-minute call, or bring your history over from Gorgias with the import.