---
title: "Overview"
description: "Build your own support UI on top of Gleap — the Server-to-Server Conversations API"
url: https://docs.gleap.ai/en/articles/718-overview
collection: "Guide"
updated: 2026-11-01
language: en
---

# Overview

Build your own support UI on top of Gleap — the Server-to-Server Conversations API

The Server-to-Server (S2S) Conversations API gives your backend headless access to Gleap conversations: create and read conversations, send messages as your end customer, drive bot workflows, upload files, and receive every change as an event — without the Gleap SDK or widget in your app.

```javascript
Your app  →  Your backend  →  https://api.gleap.io/v3/s2s/…
```

> **Info:** `api.gleap.io` is the API host of the EU data region. Projects in the US region use `https://api.us.gleap.ai` instead — see [Data regions](https://gleap-developer-docs.gleap.help/en/articles/711-data-regions).

It is an **access layer, not a separate product**: a conversation your backend opens is indistinguishable from one opened through the widget. The same inbox, the same agents, the same workflows, AI agents, routing rules and reporting apply — your support team changes nothing.

## The two planes

REST

Contacts, conversations, messages, workflows and uploads. Everything you write here is authored **as the end customer** — the key difference from the admin REST API, which always acts as a teammate.

Events

A single Pusher-protocol **realtime stream** per backend instance (recommended) and/or HMAC-signed **webhooks**. Same event types, same envelope on both.

## Core concepts

-   **Contacts are addressed by _your_ user identifier** — `/v3/s2s/contacts/{userId}` — with no session handshake and no identity-verification hashing. Contacts deduplicate against SDK-created contacts on the same `userId`.
    
-   **Conversation and message ids are opaque** (`cnv_…`, `msg_…`). Treat them as strings.
    
-   **Event payloads are authoritative** for the conversation they carry; order and dedupe events by `(conversation id, sequence)`.
    
-   **Recovery is per-conversation catch-up**, the same model the Gleap widget uses: re-pull a contact's conversation list and each conversation's messages (`?after=<last id you have>`) whenever your app opens the support screen or your consumer suspects a gap.
    

## Start here

1.  [Authentication](https://gleap-developer-docs.gleap.help/en/articles/719-authentication) — create your token (2 minutes, self-serve).
    
2.  [Quickstart](https://gleap-developer-docs.gleap.help/en/articles/720-quickstart) — the full conversation loop in six requests.
    
3.  [Realtime stream](https://gleap-developer-docs.gleap.help/en/articles/723-realtime-stream) — the recommended event channel; [Webhooks & events](https://gleap-developer-docs.gleap.help/en/articles/722-webhooks-and-events) covers the catalog, envelope and signatures.

## Related

- [Authentication](https://docs.gleap.ai/en/articles/719-authentication.md)
- [Quickstart](https://docs.gleap.ai/en/articles/720-quickstart.md)
- [Workflows & bots](https://docs.gleap.ai/en/articles/721-workflows-and-bots.md)
- [Webhooks & events](https://docs.gleap.ai/en/articles/722-webhooks-and-events.md)
- [Realtime stream](https://docs.gleap.ai/en/articles/723-realtime-stream.md)
