> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rippit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Gorgias

> Technical reference for the Rippit Gorgias data integration: API key authorization, API endpoints, what a ticket becomes in Rippit, attachments, and sync behavior.

A read-only API key integration that syncs Gorgias support tickets and conversations into Rippit on a schedule. For what applies to every integration, see [how data integrations work](https://docs.rippit.com/plg/data-integrations.md). For the security model, see [Data integration security](https://docs.rippit.com/security/data-integrations.md).

## Connection summary

| | |
| - | - |
| Authorization | A Gorgias API key, together with the email of the Gorgias user it belongs to |
| Writes to Gorgias | None |
| Credentials shared with Rippit | The user email, API key, and subdomain. Rippit stores them and uses them for every sync |
| Credential check | The credentials are tested against Gorgias before the connection is created. If Gorgias rejects them, Rippit shows "The integration rejected these credentials. Check them and try again." and creates no connection |
| Connection identity | Your Gorgias subdomain. One connection per subdomain |
| Required Rippit role | Workspace admin |
| API base | `https://<subdomain>.gorgias.com/api` |
| Sync method | Scheduled polling |
| Attachments | Downloaded and stored by Rippit, including voice recordings |
| Maximum historical backfill | 90 days. The default is 7 |

## Before you connect

Rippit asks for three values:

* **User email.** The email address of the Gorgias user who owns the API key.
* **API key.** That user's Gorgias API key. See Gorgias's [access tokens and API keys guide](https://developers.gorgias.com/docs/access-tokens-api-keys) for where to find it.
* **Subdomain.** The part of your Gorgias URL before `.gorgias.com`: `acme` in `acme.gorgias.com`. Use lowercase letters, numbers, hyphens, and underscores only.

Rippit can read only what that user can read in Gorgias, so connect with an admin account, ideally one dedicated to the integration.

## Data handling

| Question | Answer |
| - | - |
| Is ticket content ingested, or only metadata? | Full content: the ticket, every message and internal note, attachments, satisfaction surveys, and completed voice calls linked to the ticket |
| Are internal notes ingested? | Yes. Notes are stored and marked as not public |
| Are attachments stored? | Yes. Message attachments and voice recordings are downloaded and stored rather than linked |
| Can Rippit modify Gorgias? | No. The integration is read-only |
| Is data used to train models? | No. Rippit does not train any AI models. Your data is used for inference only |

### What a ticket becomes in Rippit

Each Gorgias ticket becomes one conversation in Rippit.

| Rippit record | Content |
| - | - |
| Subject | The ticket subject |
| Agent | The ticket's assignee |
| Start and end | The ticket's created time and its last updated time |
| Status | The ticket status from Gorgias |
| Tags | Tag names on the ticket |
| Default selected fields | Subject, status, tags, CSAT score, team name, channel, last assignee, all assignees, source assignee, commenters, first commenter, and last commenter |
| Other fields | Team ID, via (how the ticket was created), language, priority, whether Gorgias marked the ticket as spam, the CSAT comment, and ticket custom fields you select |
| Messages | Every message on the ticket. The body is the HTML Gorgias sends, or the plain text when there is no HTML. A message from an agent is attributed to that agent. Internal notes are stored and marked as not public |
| Attachments | Files attached to messages, downloaded and stored |
| Satisfaction | The survey score, on a 1 to 5 scale, and the written comment. The comment is also stored on the ticket, attributed to the customer |
| Voice calls | A completed call linked to the ticket, attributed to the last agent who answered it, at the call's start time. The recording is downloaded when the call has one and a user has not deleted it |
| People | Users whose Gorgias role is admin, agent, basic agent, lite agent, observer, or bot, with name, email, and role. They are stored as agents. The customer on the ticket, with name, email, and phone |

Channel collects the ticket's channel and the channel of each agent message. Last assignee is the agent assigned to the ticket. All assignees are the assignees Rippit has seen on it. Source assignee lists the agents who sent messages, and the assignee when the ticket has a satisfaction survey. Commenters are the agents who sent messages. First commenter and last commenter are the agents who wrote the earliest and latest public messages, including a completed call.

The field picker lists your ticket custom fields by the label Gorgias gives them. Archived fields are left out. Each one is synced only if you select it. Setup accepts up to 150 fields, plus Rippit's standard columns.

## API endpoints

The user email and API key are sent as HTTP Basic authentication, with the email as the username and the API key as the password. Paths below are under `https://<subdomain>.gorgias.com/api`.

### Authentication

| Purpose | Endpoint | Method |
| - | - | - |
| Credential check when you connect, and before each sync | `/account` | GET |

### Tickets, messages, and people

| Object | Endpoint | Method |
| - | - | - |
| Tickets updated since the last sync | `/tickets?limit=100&order_by=updated_datetime:desc` | GET |
| Tickets, by ID, up to 30 per request, to re-sync them | `/tickets?ticket_ids=<id>&ticket_ids=<id>` | GET |
| A ticket's messages | `/messages?ticket_id=<id>&order_by=created_datetime:desc&limit=100` | GET |
| A customer, by ID | `/customers/<id>` | GET |
| Users | `/users?roles=admin&roles=agent&roles=basic-agent&roles=lite-agent&roles=observer-agent&roles=bot&limit=100&order_by=name:asc` | GET |
| A single user, by ID | `/users/<id>` | GET |
| Tags | `/tags?limit=100&order_by=created_datetime:desc` | GET |
| A single tag, by ID | `/tags/<id>` | GET |
| Satisfaction surveys | `/satisfaction-surveys?limit=100&order_by=created_datetime:desc` | GET |
| A single satisfaction survey, by ID | `/satisfaction-surveys/<id>` | GET |
| Voice calls | `/phone/voice-calls?limit=100` | GET |
| Voice recordings | `/phone/voice-call-recordings?limit=100` | GET |
| A single voice recording, by ID | `/phone/voice-call-recordings/<id>` | GET |
| Ticket custom field definitions, for the field picker | `/custom-fields?object_type=Ticket&archived=false&limit=100` | GET |
| Message attachments | The attachment URL on each message, as returned by Gorgias | GET |
| Voice recordings, the file | `/attachment/download/<path>`, rewritten from the recording URL | GET |

List endpoints page with `meta.next_cursor`. Rippit sends that cursor back as `&cursor=` on the same path until it is absent.

Each ticket returned by the tickets list has its messages fetched separately, 100 per page, and its customer fetched by ID. Users and tags are read in full on every sync.

The custom field catalog is read up to 3 pages. Archived ticket fields are not requested.

Attachment downloads for a `gorgias.com` or `gorgias.io` host send the API key, and that authenticated request is tried first. A voice recording is downloaded through `/attachment/download/<path>` on your Gorgias API host.

## Sync behavior

| | |
| - | - |
| Ticket discovery | Newest first by `updated_datetime`, 100 per page, cursor pagination |
| Initial lookback | The backfill chosen at setup: 7 days by default, up to 90. Tickets, satisfaction surveys, voice calls, and voice recordings are read back to that date |
| Trailing buffer | Each sync closes 5 minutes behind the current time |
| Messages | Fetched per ticket, one ticket at a time, 100 per page, newest message first |
| Customers | Fetched by ID from each ticket, one at a time |
| Users and tags | Full list on every sync |
| Satisfaction surveys | Newest first by `created_datetime`, 100 per page |
| Voice calls | Paged 100 at a time. A completed call linked to a ticket is stored on that ticket |
| Voice recordings | Listed, and also fetched by ID when a call has a recording |
| Update handling | An updated ticket is listed again, and its messages and customer are fetched again |
| Resumption | High water mark on ticket `updated_datetime`. Changed tickets only, no full rescan |

Rippit selects tickets by last update, not creation. A ticket created before the backfill window but updated inside it is synced with its original created time, and every message on it is fetched. Satisfaction surveys are selected by the time they were created, so a new survey on a ticket already in Rippit is picked up when the survey list reaches it.

## Rate limiting

Gorgias caps API requests at 40 per 20 seconds. Each response reports calls used out of that limit in `X-Gorgias-Account-Api-Call-Limit`. Rippit slows down as the remaining budget runs low. A `429` response waits, including any `Retry-After`, and retries. Rippit fetches each ticket's messages with a separate request, so a large backfill spends most of its time on messages. This is why the default backfill is 7 days.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.