https://api.nextlevelmca.com/v1 needs a bearer credential: an API key you create in the app, or an OAuth access token issued to an MCP client. Both are checked the same way and both are bound to one location.
Create an API key
1
Open Settings → Developers → API keys
You need settings access in the app; admins have it by default.
2
Choose a name, role, scopes and expiry
- Name is for you. It also appears in activity logs as
API key "name"on anything the key changes. - Role sets what the key can see and do:
admin,manager(the default) oruser. See Roles. - Scopes limit which resources the key can touch. Leave the list empty to grant every scope. See Scopes.
- Expiry is optional. After
expires_atthe key returns401.
3
Copy the key
The full key is shown once. Afterwards the app only shows the prefix and the last four characters (
nlmca_live_ab12…wxyz). If you lose it, revoke it and create a new one.nlmca_live_ followed by 32 random base62 characters. Only a SHA-256 hash is stored; the key itself cannot be recovered.
Send the key
/v1. The app’s internal routes reject them, so a leaked key cannot reach anything that is not documented here. A missing or invalid credential returns 401 with type: "authentication_error".
Roles
A role sets the depth of access: which records the key can read, which actions it can perform and which fields are masked. Scopes then narrow the breadth. Both must pass on every request.
Role also decides PII visibility:
dob is returned only to admin and manager. SSNs are never returned by the API for any role.
Scopes
A key with no scopes has all of them. Otherwise each endpoint requires the scope listed on its reference page, and a missing one returns403 with code: "missing_scope" and param set to the scope you need.
Two details worth knowing: reading submissions comes with
deals:read (there is no submissions:read), and PATCH /v1/tasks/{id} accepts either businesses:write or deals:write.
Revoke a key
Settings → Developers → API keys → Revoke. Revocation is immediate; the next request with that key gets401 with message: "API key has been revoked". Expired keys answer the same way with "API key has expired".
OAuth access tokens
Access tokens minted by the authorization server for MCP clients are accepted on/v1 with the same Authorization: Bearer header. They act as the user who approved them (that user’s role and deal visibility) with the scopes shown on the consent screen. Tokens are audience-bound: a token minted for the MCP server also works on /v1, but a token minted for /v1 (with resource=https://api.nextlevelmca.com) is not accepted on /mcp. If the user is deactivated or removed from the location, their tokens stop working immediately.