Rex is an AI-native, API-first CRM for go-to-market operations. It provides a headless data layer for managing contacts, companies, deals, pipelines, activities, tasks, and more โ designed for developers, AI agents, and GTM teams.
Developers building integrations, automations, and custom workflows on the Rex API. You'll find API references, quickstart guides, and code examples throughout.
GTM Operators configuring pipelines and workflows through the Rex UI. Guides walk you through common tasks step by step.
AI Agents (Claude, GPT, custom LLMs) operating Rex through the MCP server or direct API calls. Every page has a "Copy as Markdown" button, and the full docs are available at /docs/llms.txt.
| I want to... | Go to |
|---|---|
| Make my first API call | Your First API Call |
| Connect Claude to Rex | Connect Claude |
| Understand the data model | Contacts & Companies |
| Set up authentication | Authentication |
| Browse the API | API Reference |
| Receive real-time events | Webhooks & Events |
API-first. Every Rex feature is available through the API. The web UI is a client of the same API you use. If the UI can do it, the API can do it.
AI-native. Rex is designed to be operated by AI agents. Schema discovery at runtime (GET /schema), structured error responses, and machine-readable documentation make agent integration straightforward.
OpenAPI as source of truth. The OpenAPI spec defines every endpoint, request, response, and error. Client code is generated from it. Documentation is generated from it. If the spec says it works, it works.
https://{your-subdomain}.rexgtm.com
Each Rex account gets its own subdomain. All API endpoints are relative to this base URL.
For local development:
http://localhost:8080
All API requests require an API key passed via the X-Api-Key header:
curl https://acme.rexgtm.com/contacts \
-H "X-Api-Key: rex_live_abc123..."
See Authentication for details on key scopes, rate limits, and security best practices.
All responses follow a consistent envelope:
{
"data": { ... }
}
List endpoints include pagination metadata:
{
"data": [ ... ],
"meta": {
"cursor": "eyJpZCI6...",
"has_more": true
}
}
Errors use a structured format:
{
"error": {
"code": "validation_failed",
"message": "Invalid email address",
"details": [
{ "field": "email", "code": "invalid_format", "message": "must be a valid email address" }
]
}
}