Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET/_x/query/member-list
Firm memberPermission: org:read
memberList
Parameters of memberList| Name | In | Type | Required |
|---|
orgId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/member-list?orgId=<orgId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/member-list?orgId=<orgId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-agent-connections
Firm memberPermission: org:read
myAgentConnections
Parameters of myAgentConnections| Name | In | Type | Required |
|---|
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-agent-connections' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-agent-connections', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-mfa
Firm memberPermission: org:read
myMfa
Parameters of myMfa| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-mfa?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-mfa?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-onboarding-emails
Firm memberPermission: org:read
myOnboardingEmails
Parameters of myOnboardingEmails| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-onboarding-emails?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-onboarding-emails?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-orgs
Firm memberPermission: org:read
myOrgs
Parameters of myOrgs| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-orgs?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-orgs?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-preferences
Firm memberPermission: org:read
myPreferences
Parameters of myPreferences| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-preferences?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-preferences?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/my-sessions
Firm memberPermission: org:read
mySessions
Parameters of mySessions| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-sessions?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-sessions?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/oauth-viewer
Firm memberPermission: org:read
oauthViewer
Parameters of oauthViewer| Name | In | Type | Required |
|---|
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/oauth-viewer' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/oauth-viewer', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/onboarding-progress
Firm memberPermission: dashboard:read
onboardingProgress
Parameters of onboardingProgress| Name | In | Type | Required |
|---|
orgId | Query | string (uuid) | Yes |
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/onboarding-progress?orgId=<orgId>&userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/onboarding-progress?orgId=<orgId>&userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/v1/org-activity
Firm memberPermission: activity:read/v1 · bearer tokenMCP tool: orgActivity
Who in the firm did what, newest first; filter by actorId, action or category.
Parameters of orgActivity| Name | In | Type | Required |
|---|
action | Query | string 1–80 | No |
actorId | Query | string (uuid) | No |
category | Query | "cases" | "notifications" | "evidence" | "members" | "agents" | "billing" | No |
cursor | Query | string 1–64 | No |
limit | Query | integer 1–100 | No |
orgId | Query | string (uuid) | Yes |
_first | Query | integer 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/v1/org-activity?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScriptconst response = await fetch('https://www.notificado.co/v1/org-activity?orgId=<orgId>', {
headers: { authorization: `Bearer ${token}` },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/pending-invites
Firm memberPermission: org:manage
pendingInvites
Parameters of pendingInvites| Name | In | Type | Required |
|---|
orgId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/pending-invites?orgId=<orgId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/pending-invites?orgId=<orgId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/pending-legal-acceptance
Firm memberPermission: org:read
pendingLegalAcceptance
Parameters of pendingLegalAcceptance| Name | In | Type | Required |
|---|
userId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/pending-legal-acceptance?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/pending-legal-acceptance?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
GET/_x/query/seat-usage
Firm memberPermission: org:read
seatUsage
Parameters of seatUsage| Name | In | Type | Required |
|---|
orgId | Query | string (uuid) | Yes |
_first | Query | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Query | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/seat-usage?orgId=<orgId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/seat-usage?orgId=<orgId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200[
null
]
Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/accept-invite
Firm memberPermission: org:accept-invite
acceptInvite
Parameters of acceptInvite| Name | In | Type | Required |
|---|
token | Body | string 1–2048 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/accept-invite' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"token":"<token>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/accept-invite', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"token": "<token>"
}),
});
const result = await response.json();
Example response
200{
"orgId": "<orgId>",
"redirectTo": "<redirectTo>",
"role": "<role>",
"status": "joined"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/accept-legal-version
Firm memberPermission: org:read
acceptLegalVersion
Parameters of acceptLegalVersion| Name | In | Type | Required |
|---|
returnTo | Body | string 1–2048 | No |
version | Body | string 1–64 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/accept-legal-version' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"version":"<version>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/accept-legal-version', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"version": "<version>"
}),
});
const result = await response.json();
Example response
200{
"pending": true,
"version": "<version>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/change-password
Firm memberPermission: org:read
changePassword
Parameters of changePassword| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
currentPassword | Body | string 0–1024 | No |
password | Body | string 1–1024 | Yes |
passwordConfirm | Body | string 1–1024 | Yes |
revokeTokens | Body | boolean | "on" | "off" | No |
curlcurl -X POST 'https://www.notificado.co/api/change-password' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"password":"<password>","passwordConfirm":"<passwordConfirm>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/change-password', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"password": "<password>",
"passwordConfirm": "<passwordConfirm>"
}),
});
const result = await response.json();
Example response
200{
"kind": "changed",
"ok": true,
"tokensRevoked": 1
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-mfa
Firm memberPermission: org:read
confirmMfa
Parameters of confirmMfa| Name | In | Type | Required |
|---|
code | Body | string 6–8 | Yes |
password | Body | string 1–1024 | No |
secret | Body | string 16–128 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/confirm-mfa' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>","secret":"<secret>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/confirm-mfa', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"code": "<code>",
"secret": "<secret>"
}),
});
const result = await response.json();
Example response
200{
"recoveryCodes": [
"<recoveryCodes>"
]
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/disable-mfa
Firm memberPermission: org:read
disableMfa
Parameters of disableMfa| Name | In | Type | Required |
|---|
code | Body | string 6–64 | Yes |
password | Body | string 1–1024 | No |
curlcurl -X POST 'https://www.notificado.co/api/disable-mfa' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/disable-mfa', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/dismiss-onboarding
Firm memberPermission: org:read
dismissOnboarding
curlcurl -X POST 'https://www.notificado.co/api/dismiss-onboarding' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/dismiss-onboarding', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"dismissed": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/enrol-mfa
Firm memberPermission: org:read
enrolMfa
curlcurl -X POST 'https://www.notificado.co/api/enrol-mfa' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/enrol-mfa', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"secret": "<secret>",
"uri": "<uri>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/invite-member
Firm memberPermission: org:manage
inviteMember
Parameters of inviteMember| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
email | Body | string (email) ≤ 320 | Yes |
password | Body | string 0–1024 | No |
role | Body | "owner" | "lawyer" | "paralegal" | "billing" | "viewer" | Yes |
curlcurl -X POST 'https://www.notificado.co/api/invite-member' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"email":"<email>","role":"owner"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/invite-member', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"email": "<email>",
"role": "owner"
}),
});
const result = await response.json();
Example response
200{
"email": "<email>",
"expiresAt": "2026-09-25T15:00:00Z",
"role": "<role>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/leave-org
Firm memberPermission: org:read
leaveOrg
Parameters of leaveOrg| Name | In | Type | Required |
|---|
confirm | Body | string 1–8 | No |
curlcurl -X POST 'https://www.notificado.co/api/leave-org' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/leave-org', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"nextOrgId": "<nextOrgId>",
"ok": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/regenerate-recovery-codes
Firm memberPermission: org:read
regenerateRecoveryCodes
Parameters of regenerateRecoveryCodes| Name | In | Type | Required |
|---|
code | Body | string 6–16 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/regenerate-recovery-codes' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/regenerate-recovery-codes', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Example response
200{
"recoveryCodes": [
"<recoveryCodes>"
]
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/reissue-constancia
Firm memberPermission: org:manage
reissueConstancia
Parameters of reissueConstancia| Name | In | Type | Required |
|---|
notificationId | Body | string (uuid) | Yes |
orgId | Body | string (uuid) | Yes |
curlcurl -X POST 'https://www.notificado.co/api/reissue-constancia' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/reissue-constancia', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"notificationId": "<notificationId>",
"orgId": "<orgId>"
}),
});
const result = await response.json();
Example response
200{
"queued": true,
"version": 2
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/remove-member
Firm memberPermission: org:manage
removeMember
Parameters of removeMember| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
password | Body | string 0–1024 | No |
userId | Body | string (uuid) | Yes |
curlcurl -X POST 'https://www.notificado.co/api/remove-member' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"userId":"<userId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/remove-member', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"userId": "<userId>"
}),
});
const result = await response.json();
Example response
200{
"createdAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"role": "owner",
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/rename-org
Firm memberPermission: org:manage
renameOrg
Parameters of renameOrg| Name | In | Type | Required |
|---|
name | Body | string 1–200 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/rename-org' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"name":"<name>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/rename-org', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"name": "<name>"
}),
});
const result = await response.json();
Example response
200{
"createdAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"kind": "customer",
"name": "<name>",
"requireMfa": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/request-email-change
Firm memberPermission: org:read
requestEmailChange
Parameters of requestEmailChange| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
newEmail | Body | string (email) | Yes |
password | Body | string 0–1024 | No |
curlcurl -X POST 'https://www.notificado.co/api/request-email-change' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"newEmail":"<newEmail>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/request-email-change', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"newEmail": "<newEmail>"
}),
});
const result = await response.json();
Example response
200{
"newEmail": "<newEmail>",
"ok": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/resend-invite
Firm memberPermission: org:manage
resendInvite
Parameters of resendInvite| Name | In | Type | Required |
|---|
id | Body | string 1–64 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/resend-invite' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"id":"<id>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/resend-invite', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"id": "<id>"
}),
});
const result = await response.json();
Example response
200{
"email": "<email>",
"expiresAt": "2026-09-25T15:00:00Z"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/revoke-invite
Firm memberPermission: org:manage
revokeInvite
Parameters of revokeInvite| Name | In | Type | Required |
|---|
id | Body | string 1–64 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/revoke-invite' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"id":"<id>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/revoke-invite', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"id": "<id>"
}),
});
const result = await response.json();
Example response
200{
"email": "<email>",
"id": "<id>",
"role": "<role>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/revoke-my-agent-connections
Firm memberPermission: org:read
revokeMyAgentConnections
curlcurl -X POST 'https://www.notificado.co/api/revoke-my-agent-connections' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/revoke-my-agent-connections', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"revoked": 1
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/revoke-other-sessions
Firm memberPermission: org:read
revokeOtherSessions
curlcurl -X POST 'https://www.notificado.co/api/revoke-other-sessions' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/revoke-other-sessions', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"revoked": 1,
"tokensRevoked": 1
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/revoke-session
Firm memberPermission: org:read
revokeSession
Parameters of revokeSession| Name | In | Type | Required |
|---|
sessionId | Body | string 1–64 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/revoke-session' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"sessionId":"<sessionId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/revoke-session', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"sessionId": "<sessionId>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/set-member-role
Firm memberPermission: org:manage
setMemberRole
Parameters of setMemberRole| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
password | Body | string 0–1024 | No |
role | Body | "owner" | "lawyer" | "paralegal" | "billing" | "viewer" | Yes |
userId | Body | string (uuid) | Yes |
curlcurl -X POST 'https://www.notificado.co/api/set-member-role' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"role":"owner","userId":"<userId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/set-member-role', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"role": "owner",
"userId": "<userId>"
}),
});
const result = await response.json();
Example response
200{
"createdAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"role": "owner",
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/set-onboarding-emails
Firm memberPermission: org:read
setOnboardingEmails
Parameters of setOnboardingEmails| Name | In | Type | Required |
|---|
emails | Body | "on" | "off" | Yes |
returnTo | Body | string 1–2048 | No |
curlcurl -X POST 'https://www.notificado.co/api/set-onboarding-emails' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"emails":"on"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/set-onboarding-emails', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"emails": "on"
}),
});
const result = await response.json();
Example response
200{
"emails": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/set-preferences
Firm memberPermission: org:read
setPreferences
Parameters of setPreferences| Name | In | Type | Required |
|---|
locale | Body | "es-co" | "en" | "auto" | null | No |
returnTo | Body | string 1–2048 | No |
theme | Body | "system" | "light" | "dark" | No |
curlcurl -X POST 'https://www.notificado.co/api/set-preferences' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/set-preferences', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Example response
200{
"locale": "es-co",
"theme": "system"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/set-require-mfa
Firm memberPermission: org:manage
setRequireMfa
Parameters of setRequireMfa| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
password | Body | string 0–1024 | No |
requireMfa | Body | "on" | "off" | Yes |
curlcurl -X POST 'https://www.notificado.co/api/set-require-mfa' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"requireMfa":"on"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/set-require-mfa', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"requireMfa": "on"
}),
});
const result = await response.json();
Example response
200{
"requireMfa": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/switch-org
Firm memberPermission: org:read
switchOrg
Parameters of switchOrg| Name | In | Type | Required |
|---|
next | Body | string 1–2048 | No |
orgId | Body | string (uuid) | Yes |
curlcurl -X POST 'https://www.notificado.co/api/switch-org' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/switch-org', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"orgId": "<orgId>"
}),
});
const result = await response.json();
Example response
200{
"orgId": "<orgId>"
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/transfer-ownership
Firm memberPermission: org:manage
transferOwnership
Parameters of transferOwnership| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
password | Body | string 0–1024 | No |
userId | Body | string (uuid) | Yes |
curlcurl -X POST 'https://www.notificado.co/api/transfer-ownership' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"userId":"<userId>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/transfer-ownership', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"userId": "<userId>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds