API overview.
How to reach the Mosaik API, sign in to it, and find the high-level endpoints in the API reference.
The Mosaik API lets your own systems read and write companies, contacts, deals, and activities. It also accepts form submissions. Every workspace runs on its own address, and the API answers on that same address. This guide writes it as https://<your-portal>.example.com. Use the address you open the app on.
This page covers the high-level endpoints. The API reference lists every endpoint. Use it when you need a field or a response in full.
Open the API reference
The interactive API reference opens at the root of the API service address. That address is separate from the app address. Ask your administrator for it.
The OpenAPI document is available as JSON on your workspace address:
https://<your-portal>.example.com/openapi.jsonThe JSON document needs an API key in the x-api-key header, or a signed-in session. A request without either gets 401.
Tools that read OpenAPI documents, such as client generators and API testing tools, can use the JSON document directly.
Base paths
| Path | What it serves |
|---|---|
/rest/* |
Records and workspace actions, one path for each operation. This is the path to use for integrations. |
/health |
A status check for the API and its database. |
/openapi.json |
The OpenAPI document. |
The /rest paths map to the same operations the Mosaik app uses. They validate input and apply the same permissions, so a request through /rest behaves like the same action in the app.
Sign in
Each request needs one of these:
- An API key in the
x-api-keyheader. Create a key in Settings → API keys. A key acts as the account that created it, and it has that account’s permissions. - A session cookie from a signed-in browser. Use this for requests from the Mosaik app. Integrations should use an API key.
Send the key on every request except /health:
curl https://<your-portal>.example.com/rest/companies/search \
-H "x-api-key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"page": 1, "pageSize": 25}'const response = await fetch("https://<your-portal>.example.com/rest/companies/search", {
method: "POST",
headers: {
"x-api-key": "<your-api-key>",
"Content-Type": "application/json",
},
body: JSON.stringify({ page: 1, pageSize: 25 }),
});
const { rows, total } = await response.json();import requests
response = requests.post(
"https://<your-portal>.example.com/rest/companies/search",
headers={"x-api-key": "<your-api-key>"},
json={"page": 1, "pageSize": 25},
)
response.raise_for_status()
data = response.json()Keep API keys secret. Revoke a key in Settings → API keys when it is no longer needed.
High-level endpoints
These groups cover most integrations. Each group has its own page.
| Group | Use it to | Page |
|---|---|---|
| Companies | Search, read, create, update, archive, and restore companies | Records API |
| Contacts | Search, read, create, update, archive, and restore contacts | Records API |
| Deals | Search, read, create, update, change stage, archive, and restore deals | Records API |
| Activities | Log activity, read your tasks, and complete a task | Records API |
| Finance | Search, read, create, update, link, archive, and restore invoices, subscriptions, and payments | Finance API |
| Intake | Create a contact, company, or deal from a submission | Intake API |
| MCP | Read and change records from an AI client over MCP | MCP server |
| Health | Check that the API and its database respond | This page |
Health check
GET /health requires no key. It returns 200 with status: "ok" when the API and its database respond. It returns 503 with status: "error" when the database does not respond.
curl https://<your-portal>.example.com/healthUse this endpoint in uptime monitors.
Other groups in the API reference
The API reference also lists groups for workspace settings, dashboards, saved views, custom fields, agents, conversations, currency, legal e-signature, enrichment, connections, and tracking. These groups are not documented here. Most of them back the app’s own settings screens rather than outside integrations, and their shapes can change as the product changes. Check the API reference before you build on them.