Creating an API key
1
Open Settings → Developers → API keys
You need settings access in the app; admins have it.
2
Name it, then choose a role, scopes and an expiry
The name shows up in the activity log on anything the key changes, so use something a colleague would recognise (“Website intake”, “Underwriting bot”). Role and scopes are explained below. Expiry is optional; an expired key simply stops working.
3
Copy the key
It is shown once. Afterwards the app shows only the first and last few characters. If you lose it, revoke it and create a new one.
Roles: how much a connection can see and do
Role also decides who sees personal details. Dates of birth are returned only to
admin and manager. Social security numbers are never returned to anyone: they can be saved through the API, and reads show only the last four digits (***-**-6789).
Scopes: what a connection may touch
A scope is permission for one kind of work. A key with no scopes selected can do everything its role allows; pick scopes to narrow it, for example read-only scopes for a reporting integration, orbusinesses:write and deals:write alone for a website intake form. Assistant connections choose scopes on the consent screen when the user signs in.
Role and scopes are checked together on every request, so a scope never grants more than the role allows. Two details worth knowing: submissions are read with
deals:read (there is no submissions:read), and a task can be updated with either businesses:write or deals:write.
Assistant connections
AI assistants such as Claude and ChatGPT do not use keys. The team member signs in with a one-time emailed code, picks a workspace and approves the scopes; from then on the assistant acts as that person, with their role and their view of the pipeline. Connections are listed and revoked under Settings → Developers → Connected apps. See Security. The one exception is a CRM workflow’s AI agent. No one is signed in while a workflow runs, so it connects to the MCP server with an API key. See Connect from CRM workflows.For developers
Send the key as a bearer token on every request:- Keys look like
nlmca_live_followed by 32 random characters and are stored only as a hash. They are accepted only on/v1and the MCP server, where they have the same role and scopes. The app’s internal routes reject them, so a leaked key cannot reach anything not documented here. - A missing, invalid, expired or revoked key returns
401withtype: "authentication_error"andcode: "unauthorized"; the message says which ("API key has been revoked","API key has expired"). - A key without the scope an endpoint needs returns
403withtype: "permission_error",code: "missing_scope"andparamset to the scope to add. A role without the permission returns403withcode: "forbidden". - OAuth access tokens issued to assistant connections are accepted on
/v1with the same header. They act as the user who approved them, with the scopes from the consent screen. A token issued for the MCP server also works on/v1; a token issued for/v1(resource=https://api.nextlevelmca.com) is not accepted on/mcp. Deactivating or removing the user stops their tokens immediately.