The Geniziz REST API. Everything in the app is built on it, so anything you can do in the product you can automate.
Authentication
Send your API key as HTTP Basic auth — the key is the username, the password is blank. Set the api_key collection variable once and every request inherits it. Create keys under Settings → API & Webhooks.
curl -u YOUR_API_KEY: {{base_url}}/api/v1/me/
Base URL
The base_url variable (defaults to your app domain).
IDs
Opaque, prefixed strings — lead_…, cont_…, oppo_…, acti_…, task_…. Never assume a format beyond the prefix.
Responses & pagination
Single resources return the object. List endpoints return { "data": [ … ], "has_more": true|false } and page with _limit (default 100, max 200) and _skip (offset).
Field selection
Add _fields=id,name,date_created to any read to trim the response.
Errors
Non-2xx responses use { "error": "message", "field-errors": { "field": "why" } } with a matching HTTP status (400 validation, 401 auth, 402 billing, 404 not found, 405 method, 429 rate limit).
Rate limits
Per-endpoint-group limits with standard ratelimit-* response headers.
MCP
The same key authenticates the MCP server at {{base_url}}/mcp/ (send a Geniziz-Scope header of read, write_safe, or write_destructive) for AI agents.
Alongside task-specific tools (search, send_email, lead scoring…), generic list_records / get_record / create_record / update_record / delete_record tools dispatch into the same handlers as this reference and cover every business resource here — so an agent can work the whole CRM. Admin/identity endpoints (users, roles, API keys, credentials, organization) are intentionally not exposed over MCP.
Workspaces over MCP
An OAuth connection (Bearer oat_…, obtained through /oauth2/authorize/) authenticates the user, so it reaches every workspace they are an active member of — not only the one they consented in. list_workspaces returns them with the active one flagged, switch_workspace moves the connection for good (surviving refresh-token rotation), and passing a workspace argument to any other tool targets a single call without moving. Membership, role, and permissions are re-read in the target workspace on every call, so this grants nothing the user does not already have there.
An API key is scoped to the workspace it was created in and cannot switch — create a key inside the other workspace instead.
Activity
GET /activity/ — the unified stream, newest first.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}AI
Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}Generate a structured, validated ICP scoring rubric from a plain-English description. Returns the rubric; persist it via PUT /organization/ settings.icp.rubric to make scoring use it.
Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}API Key
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Automation
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Bulk Action
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
PUT pause/resume.
Request body (JSON)
{
}Comment
GET /comment/ — exactly one of object_id= or thread_id=.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Tombstone; the thread disappears with its last comment.
Comment Thread
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Connected Account
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Contact
POST /contact/merge/ {source, destination}: the source's activities, conversations, enrollments, and files move to the destination, its emails/phones/urls are unioned in, and the source is deleted.
Request body (JSON)
{
}POST /contact/share_bulk/ {organization_id, all|query|contact_ids} — queue a worker job sharing many contacts (e.g. an entire customer base into a sister product's workspace).
Request body (JSON)
{
}GET /contact/share_bulk/ — recent jobs; GET .../{id}/ — one job.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"data": [
{
"id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Connie Carter",
"title": "VP Sales",
"emails": [
{
"email": "connie@acme.example",
"type": "direct"
}
],
"phones": [
{
"phone": "+15557654321",
"type": "mobile"
}
],
"tags": [
"champion"
],
"date_created": "2026-01-15T09:31:00.000Z"
}
],
"has_more": false
}Request body (JSON)
{
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Connie Carter",
"title": "VP Sales",
"emails": [
{
"email": "connie@acme.example",
"type": "direct"
}
],
"phones": [
{
"phone": "+15557654321",
"type": "mobile"
}
],
"tags": [
"champion"
]
}Example response 201
{
"id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Connie Carter",
"title": "VP Sales",
"emails": [
{
"email": "connie@acme.example",
"type": "direct"
}
],
"phones": [
{
"phone": "+15557654321",
"type": "mobile"
}
],
"tags": [
"champion"
],
"date_created": "2026-01-15T09:31:00.000Z"
}POST /contact/{id}/share/ {organization_id, lead_id?}
Request body (JSON)
{
}POST /contact/{id}/unshare/ {organization_id} — sever the link to one workspace. The contact there stays as an independent copy (nothing is deleted); it just stops syncing with the person. Passing the current workspace detaches THIS contact instead — useful when the person is shared with workspaces you cannot administer. When only one linked contact remains, the share dissolves entirely.
Request body (JSON)
{
}POST /contact/{id}/enrich/ — queue a job for the worker.
Request body (JSON)
{
}GET /contact/{id}/shares/ — where else this person exists.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Connie Carter",
"title": "VP Sales",
"emails": [
{
"email": "connie@acme.example",
"type": "direct"
}
],
"phones": [
{
"phone": "+15557654321",
"type": "mobile"
}
],
"tags": [
"champion"
],
"date_created": "2026-01-15T09:31:00.000Z"
}Request body (JSON)
{
}Contact List
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}POST /contact_list/copy_from_source/ {name, source?} — materialize a read-only source-provider list (GetSales, LeadShark, …) as an internal one: every contact whose synced profile references that list becomes a member. Idempotent; re-copy adds newly synced members. `source` (a Sources key) tags the created list; it defaults to the first registered provider. Also mounted as the legacy /contact_list/copy_getsales/ route.
Request body (JSON)
{
}POST /contact_list/copy_from_source/ {name, source?} — materialize a read-only source-provider list (GetSales, LeadShark, …) as an internal one: every contact whose synced profile references that list becomes a member. Idempotent; re-copy adds newly synced members. `source` (a Sources key) tags the created list; it defaults to the first registered provider. Also mounted as the legacy /contact_list/copy_getsales/ route.
Request body (JSON)
{
}PUT /contact_list/{id}/ {name} — rename.
Request body (JSON)
{
}POST /contact_list/{id}/members/ {contact_ids: [...]}
Request body (JSON)
{
}DELETE /contact_list/{id}/members/{contact_id}/
Contact Tag
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}PUT /contact_tag/{id}/ {name} — rename everywhere it is used.
Request body (JSON)
{
}DELETE /contact_tag/{id}/ — strip from every contact, drop the registry row.
Conversation
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Soft delete: hide the thread but keep its messages attached.
POST /conversation/{id}/restore/ — undo a soft delete.
Request body (JSON)
{
}POST /conversation/{id}/message/ — add a message into the thread. {type: note|email|sms, ...} — emails/SMS run through the real message state machine (draft by default; "outbox" sends); recipients default to the conversation's contact.
Request body (JSON)
{
}Credentials
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Custom Activity
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Custom Field
Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Custom Field Schema
GET /custom_field_schema/?object_type=lead
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Custom Object
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Custom Object Type
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Data
Request body (JSON)
{
"query": {
"type": "object_type",
"object_type": "lead"
},
"_limit": 20
}Example response 200
{
"data": [
{
"id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Acme Inc",
"url": "https://acme.example",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"mrr": 4900,
"date_created": "2026-01-15T09:30:00.000Z",
"date_updated": "2026-01-15T09:30:00.000Z"
}
],
"has_more": false
}Dialer
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
PUT pause/resume/done.
Request body (JSON)
{
}The dialer's heartbeat: next lead with a dialable contact; advances the cursor. {"done": true} when the view is exhausted.
Request body (JSON)
{
}Email Template
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}GET /email_template/{id}/render/?lead_id=&contact_id=
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Enrichment
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Event
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Export
Request body (JSON)
{
}Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
File
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"data": [
{
"id": "file_3c4d5e6f7g8h9i0j1k2l3m",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"opportunity_id": null,
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"size": 184320,
"type": "pdf",
"subtype": "proposal",
"subtype_label": "Proposal",
"outreach_channel": "email",
"scope": null,
"is_system": false,
"share_url": "https://app.geniziz.com/f/file_3c4d5e6f7g8h9i0j1k2l3m.9f1c0b7a2e4d6f8a0b2c4d6e/",
"created_by": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:34:00.000Z",
"date_updated": "2026-01-15T09:34:00.000Z"
}
],
"has_more": false
}Request body (JSON)
{
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"content_base64": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGgg…",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"subtype": "proposal",
"outreach_channel": "email"
}Example response 201
{
"id": "file_3c4d5e6f7g8h9i0j1k2l3m",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"opportunity_id": null,
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"size": 184320,
"type": "pdf",
"subtype": "proposal",
"subtype_label": "Proposal",
"outreach_channel": "email",
"scope": null,
"is_system": false,
"share_url": "https://app.geniziz.com/f/file_3c4d5e6f7g8h9i0j1k2l3m.9f1c0b7a2e4d6f8a0b2c4d6e/",
"created_by": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:34:00.000Z",
"date_updated": "2026-01-15T09:34:00.000Z"
}The one file to send to this record over this channel: the contact's own assignment, else the lead's, else the workspace default. The whole point of the channel slot — an agent gets a single answer instead of a list it has to guess from.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"scope": "contact",
"id": "file_3c4d5e6f7g8h9i0j1k2l3m",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"opportunity_id": null,
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"size": 184320,
"type": "pdf",
"subtype": "proposal",
"subtype_label": "Proposal",
"outreach_channel": "email",
"is_system": false,
"share_url": "https://app.geniziz.com/f/file_3c4d5e6f7g8h9i0j1k2l3m.9f1c0b7a2e4d6f8a0b2c4d6e/",
"created_by": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:34:00.000Z",
"date_updated": "2026-01-15T09:34:00.000Z"
}Query parameters
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "file_3c4d5e6f7g8h9i0j1k2l3m",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"opportunity_id": null,
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"size": 184320,
"type": "pdf",
"subtype": "proposal",
"subtype_label": "Proposal",
"outreach_channel": "email",
"scope": null,
"is_system": false,
"share_url": "https://app.geniziz.com/f/file_3c4d5e6f7g8h9i0j1k2l3m.9f1c0b7a2e4d6f8a0b2c4d6e/",
"created_by": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:34:00.000Z",
"date_updated": "2026-01-15T09:34:00.000Z"
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Metadata-only edit: classify a file after the fact, or hand it an outreach slot. Never touches the bytes — re-upload for that.
Request body (JSON)
{
"type": "pdf",
"subtype": "proposal",
"outreach_channel": "email"
}Example response 200
{
"id": "file_3c4d5e6f7g8h9i0j1k2l3m",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"contact_id": "cont_7h8i9j0k1l2m3n4o5p6q7r",
"opportunity_id": null,
"name": "acme-proposal.pdf",
"mime": "application/pdf",
"size": 184320,
"type": "pdf",
"subtype": "proposal",
"subtype_label": "Proposal",
"outreach_channel": "email",
"scope": null,
"is_system": false,
"share_url": "https://app.geniziz.com/f/file_3c4d5e6f7g8h9i0j1k2l3m.9f1c0b7a2e4d6f8a0b2c4d6e/",
"created_by": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:34:00.000Z",
"date_updated": "2026-01-15T09:34:00.000Z"
}File Subtype
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Goal
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
POST /goal/ — upsert on (period, user_id). Admin-only.
Request body (JSON)
{
}Group
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Import
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}GET /import/presets/ — valid mapping targets, grouped for the UI.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
PUT /import/{id}/ — set the mapping on a draft and queue it.
Request body (JSON)
{
}Inbox Folder
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Inbox Prospect
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
POST /inbox_prospect/{id}/convert/ — lead + contact + the message.
Request body (JSON)
{
}POST /inbox_prospect/{id}/dismiss/
Request body (JSON)
{
}Inbox Rule
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Integration Link
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Lead
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"data": [
{
"id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Acme Inc",
"url": "https://acme.example",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"mrr": 4900,
"date_created": "2026-01-15T09:30:00.000Z",
"date_updated": "2026-01-15T09:30:00.000Z"
}
],
"has_more": false
}Request body (JSON)
{
"name": "Acme Inc",
"url": "https://acme.example",
"industry": "Software",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"owner_id": "user_0a1b2c3d4e5f6g7h8i9j0k",
"mrr": 4900,
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"addresses": [
{
"city": "Austin",
"country": "US"
}
]
}Example response 201
{
"id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Acme Inc",
"url": "https://acme.example",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"mrr": 4900,
"date_created": "2026-01-15T09:30:00.000Z",
"date_updated": "2026-01-15T09:30:00.000Z"
}POST /lead/merge/ {source, destination}: children move to the destination, the source lead is deleted.
Request body (JSON)
{
}POST /lead/{id}/move/ {target_organization_id}: move a lead and all its records into another workspace the caller administers. Org-scoped references that don't exist in the target are remapped to defaults (lead/opportunity status) or cleared (owner, assignee, custom fields), so the lead lands valid. The caller must be an admin of both workspaces.
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"name": "Acme Inc",
"url": "https://acme.example",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"mrr": 4900,
"date_created": "2026-01-15T09:30:00.000Z",
"date_updated": "2026-01-15T09:30:00.000Z"
}Request body (JSON)
{
"name": "Acme Incorporated",
"status_id": "stat_won0000000000000000000"
}Example response 200
{
"name": "Acme Incorporated",
"id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"url": "https://acme.example",
"status_id": "stat_1a2b3c4d5e6f7g8h9i0j1k",
"emails": [
{
"email": "hello@acme.example",
"type": "office"
}
],
"phones": [
{
"phone": "+15551234567",
"type": "office"
}
],
"mrr": 4900,
"date_created": "2026-01-15T09:30:00.000Z",
"date_updated": "2026-01-15T09:30:00.000Z"
}Lead List
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}PUT /lead_list/{id}/ {name} — rename.
Request body (JSON)
{
}POST /lead_list/{id}/members/ {lead_ids: [...]}
Request body (JSON)
{
}DELETE /lead_list/{id}/members/{lead_id}/
Lead Tag
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}PUT /lead_tag/{id}/ {name} — rename everywhere it is used.
Request body (JSON)
{
}DELETE /lead_tag/{id}/ — strip from every lead, drop the registry row.
Mailing Export
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
POST /mailing_export/ {platform, filters{...}, config{...}}. Dry-runs the audience so the caller sees the match count immediately, then queues the push for the worker.
Request body (JSON)
{
}GET /mailing_export/platforms/ — the registry as the UI needs it: each platform with its config fields and whether its credential is connected for this workspace.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Me
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "user_0a1b2c3d4e5f6g7h8i9j0k",
"email": "you@acme.example",
"first_name": "Alex",
"last_name": "Rivera",
"organizations": [
{
"id": "orga_3c4d5e6f7g8h9i0j1k2l3m",
"name": "Acme Inc"
}
]
}PUT /me/ — the user edits their own profile (name, signature).
Request body (JSON)
{
}Membership
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
POST /membership/ {email, role_id?}: invite by email — creates the user when no account exists (they set a password via reset once email lands in Phase 6; until then an admin shares an API key).
Request body (JSON)
{
}Request body (JSON)
{
}Notification
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
PUT /notification/{id}/ — mark (un)read; own notifications only.
Request body (JSON)
{
}POST /notification/mark_all_read/
Request body (JSON)
{
}OAuth App
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Opportunity
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"data": [
{
"id": "oppo_5e6f7g8h9i0j1k2l3m4n5o",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"status_id": "stat_pipe000000000000000000",
"value": 1200000,
"value_period": "annual",
"value_formatted": "$12,000.00",
"confidence": 60,
"note": "Evaluating the Scale plan for 40 reps.",
"date_created": "2026-01-15T09:32:00.000Z"
}
],
"has_more": false
}Request body (JSON)
{
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"status_id": "stat_pipe000000000000000000",
"value": 1200000,
"value_period": "annual",
"confidence": 60,
"note": "Evaluating the Scale plan for 40 reps."
}Example response 201
{
"id": "oppo_5e6f7g8h9i0j1k2l3m4n5o",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"status_id": "stat_pipe000000000000000000",
"value": 1200000,
"value_period": "annual",
"value_formatted": "$12,000.00",
"confidence": 60,
"note": "Evaluating the Scale plan for 40 reps.",
"date_created": "2026-01-15T09:32:00.000Z"
}Query parameters
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "oppo_5e6f7g8h9i0j1k2l3m4n5o",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"status_id": "stat_pipe000000000000000000",
"value": 1200000,
"value_period": "annual",
"value_formatted": "$12,000.00",
"confidence": 60,
"note": "Evaluating the Scale plan for 40 reps.",
"date_created": "2026-01-15T09:32:00.000Z"
}Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Organization
POST /organization/ — create an additional workspace for the signed-in user. The caller becomes its admin and gets the same structural defaults as bin/bootstrap provisions. The workspace bills under an account the user owns: pass `account_id` to choose, or it defaults to their account (required when they own more than one).
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}DELETE /organization/{id}/ — delete the CURRENT workspace and all its data (genizizcrm extension). Admin only; refused while it is the caller's only workspace, so nobody locks themselves out. Stored files are removed from disk; orphaned shared-person rows dissolve.
Phone Number
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Pipeline
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Port
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Query parameters
| _fields | Comma-separated fields to return. |
Product
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Project
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Project Task
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Quote
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Report
GET /report/activity/ — the metrics catalog.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
POST /report/activity/ — per-user activity metrics for a period.
Request body (JSON)
{
}POST /report/funnel/ — pipeline totals by status (+ won in period).
Request body (JSON)
{
}POST /report/calls_funnel/ — call volume, outcomes, and connect funnel.
Request body (JSON)
{
}POST /report/opportunity_funnels/ — stage funnel per pipeline.
Request body (JSON)
{
}POST /report/sales/ — won revenue by month, stage conversion, forecast by expected close month, per-rep leaderboard, and workflow performance, in one payload (feeds the dashboard and reports page).
Request body (JSON)
{
}Request body (JSON)
{
}Request body (JSON)
{
}POST /report/sent_emails/ — per-template performance.
Request body (JSON)
{
}Role
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Request body (JSON)
{
}Saved Search
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
"name": "Hot leads",
"type": "lead",
"is_shared": true,
"s_query": {
"query": {
"type": "object_type",
"object_type": "lead"
}
}
}Example response 201
{
"id": "view_8h9i0j1k2l3m4n5o6p7q8r",
"name": "Hot leads",
"type": "lead",
"is_shared": true,
"s_query": {
"query": {
"type": "object_type",
"object_type": "lead"
}
},
"date_created": "2026-01-15T09:34:00.000Z"
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Scheduling Link
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Send As
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Sequence
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Sequence Subscription
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
PUT: pause/resume.
Request body (JSON)
{
}SMS Template
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Status
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}Task
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Example response 200
{
"data": [
{
"id": "task_4d5e6f7g8h9i0j1k2l3m4n",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"_type": "call",
"text": "Follow up on the proposal",
"date": "2026-02-01",
"is_complete": false,
"assigned_to": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:33:00.000Z"
}
],
"has_more": false
}Request body (JSON)
{
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"_type": "call",
"text": "Follow up on the proposal",
"date": "2026-02-01",
"assigned_to": "user_0a1b2c3d4e5f6g7h8i9j0k"
}Example response 201
{
"id": "task_4d5e6f7g8h9i0j1k2l3m4n",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"_type": "call",
"text": "Follow up on the proposal",
"date": "2026-02-01",
"is_complete": false,
"assigned_to": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:33:00.000Z"
}PUT /task/ — bulk update by id__in (by convention), e.g. marking a set of tasks complete.
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Example response 200
{
"id": "task_4d5e6f7g8h9i0j1k2l3m4n",
"lead_id": "lead_2x9Qb1c3d4e5f6g7h8i9j0",
"_type": "call",
"text": "Follow up on the proposal",
"date": "2026-02-01",
"is_complete": false,
"assigned_to": "user_0a1b2c3d4e5f6g7h8i9j0k",
"date_created": "2026-01-15T09:33:00.000Z"
}Request body (JSON)
{
}User
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
GET /user/availability/ — dialer presence of all members.
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
PUT /user/availability/ {availability: online|offline} — own status.
Request body (JSON)
{
}Query parameters
| _fields | Comma-separated fields to return. |
Webhook
Query parameters
| _limit | Page size (max 200). · e.g. 100 |
| _skip | Offset for pagination. |
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
"url": "https://hooks.example/geniziz",
"events": [
"lead.created",
"lead.updated",
"opportunity.status_updated"
],
"status": "active",
"verify_ssl": true
}Example response 201
{
"id": "whk_9i0j1k2l3m4n5o6p7q8r9s",
"url": "https://hooks.example/geniziz",
"events": [
"lead.created",
"lead.updated",
"opportunity.status_updated"
],
"status": "active",
"verify_ssl": true,
"date_created": "2026-01-15T09:35:00.000Z"
}Query parameters
| _fields | Comma-separated fields to return. |
Request body (JSON)
{
}