Skip to content

Firm and members

38 operations, each with its parameters, curl and TypeScript examples ready to copy, and its errors.

Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication

memberList

GET/_x/query/member-list

Firm memberPermission: org:read

memberList

Parameters of memberList
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/member-list?orgId=<orgId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myAgentConnections

GET/_x/query/my-agent-connections

Firm memberPermission: org:read

myAgentConnections

Parameters of myAgentConnections
NameInTypeRequired
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-agent-connections' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myMfa

GET/_x/query/my-mfa

Firm memberPermission: org:read

myMfa

Parameters of myMfa
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-mfa?userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myOnboardingEmails

GET/_x/query/my-onboarding-emails

Firm memberPermission: org:read

myOnboardingEmails

Parameters of myOnboardingEmails
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-onboarding-emails?userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myOrgs

GET/_x/query/my-orgs

Firm memberPermission: org:read

myOrgs

Parameters of myOrgs
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-orgs?userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myPreferences

GET/_x/query/my-preferences

Firm memberPermission: org:read

myPreferences

Parameters of myPreferences
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-preferences?userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

mySessions

GET/_x/query/my-sessions

Firm memberPermission: org:read

mySessions

Parameters of mySessions
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-sessions?userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

oauthViewer

GET/_x/query/oauth-viewer

Firm memberPermission: org:read

oauthViewer

Parameters of oauthViewer
NameInTypeRequired
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/oauth-viewer' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

onboardingProgress

GET/_x/query/onboarding-progress

Firm memberPermission: dashboard:read

onboardingProgress

Parameters of onboardingProgress
NameInTypeRequired
orgIdQuerystring (uuid)Yes
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/onboarding-progress?orgId=<orgId>&userId=<userId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

orgActivity

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
NameInTypeRequired
actionQuerystring 1–80No
actorIdQuerystring (uuid)No
categoryQuery"cases" | "notifications" | "evidence" | "members" | "agents" | "billing"No
cursorQuerystring 1–64No
limitQueryinteger 1–100No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/org-activity?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

pendingInvites

GET/_x/query/pending-invites

Firm memberPermission: org:manage

pendingInvites

Parameters of pendingInvites
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/pending-invites?orgId=<orgId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

seatUsage

GET/_x/query/seat-usage

Firm memberPermission: org:read

seatUsage

Parameters of seatUsage
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/seat-usage?orgId=<orgId>' \
  -b cookies.txt
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

acceptInvite

POST/api/accept-invite

Firm memberPermission: org:accept-invite

acceptInvite

Parameters of acceptInvite
NameInTypeRequired
tokenBodystring 1–2048Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

changePassword

POST/api/change-password

Firm memberPermission: org:read

changePassword

Parameters of changePassword
NameInTypeRequired
codeBodystring 0–64No
currentPasswordBodystring 0–1024No
passwordBodystring 1–1024Yes
passwordConfirmBodystring 1–1024Yes
revokeTokensBodyboolean | "on" | "off"No
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

confirmMfa

POST/api/confirm-mfa

Firm memberPermission: org:read

confirmMfa

Parameters of confirmMfa
NameInTypeRequired
codeBodystring 6–8Yes
passwordBodystring 1–1024No
secretBodystring 16–128Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

disableMfa

POST/api/disable-mfa

Firm memberPermission: org:read

disableMfa

Parameters of disableMfa
NameInTypeRequired
codeBodystring 6–64Yes
passwordBodystring 1–1024No
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

dismissOnboarding

POST/api/dismiss-onboarding

Firm memberPermission: org:read

dismissOnboarding

curl
curl -X POST 'https://www.notificado.co/api/dismiss-onboarding' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

enrolMfa

POST/api/enrol-mfa

Firm memberPermission: org:read

enrolMfa

curl
curl -X POST 'https://www.notificado.co/api/enrol-mfa' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

inviteMember

POST/api/invite-member

Firm memberPermission: org:manage

inviteMember

Parameters of inviteMember
NameInTypeRequired
codeBodystring 0–64No
emailBodystring (email) ≤ 320Yes
passwordBodystring 0–1024No
roleBody"owner" | "lawyer" | "paralegal" | "billing" | "viewer"Yes
curl
curl -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"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

leaveOrg

POST/api/leave-org

Firm memberPermission: org:read

leaveOrg

Parameters of leaveOrg
NameInTypeRequired
confirmBodystring 1–8No
curl
curl -X POST 'https://www.notificado.co/api/leave-org' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

regenerateRecoveryCodes

POST/api/regenerate-recovery-codes

Firm memberPermission: org:read

regenerateRecoveryCodes

Parameters of regenerateRecoveryCodes
NameInTypeRequired
codeBodystring 6–16Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

reissueConstancia

POST/api/reissue-constancia

Firm memberPermission: org:manage

reissueConstancia

Parameters of reissueConstancia
NameInTypeRequired
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

removeMember

POST/api/remove-member

Firm memberPermission: org:manage

removeMember

Parameters of removeMember
NameInTypeRequired
codeBodystring 0–64No
passwordBodystring 0–1024No
userIdBodystring (uuid)Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

renameOrg

POST/api/rename-org

Firm memberPermission: org:manage

renameOrg

Parameters of renameOrg
NameInTypeRequired
nameBodystring 1–200Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

requestEmailChange

POST/api/request-email-change

Firm memberPermission: org:read

requestEmailChange

Parameters of requestEmailChange
NameInTypeRequired
codeBodystring 0–64No
newEmailBodystring (email)Yes
passwordBodystring 0–1024No
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

resendInvite

POST/api/resend-invite

Firm memberPermission: org:manage

resendInvite

Parameters of resendInvite
NameInTypeRequired
idBodystring 1–64Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

revokeInvite

POST/api/revoke-invite

Firm memberPermission: org:manage

revokeInvite

Parameters of revokeInvite
NameInTypeRequired
idBodystring 1–64Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

revokeMyAgentConnections

POST/api/revoke-my-agent-connections

Firm memberPermission: org:read

revokeMyAgentConnections

curl
curl -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 '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

revokeOtherSessions

POST/api/revoke-other-sessions

Firm memberPermission: org:read

revokeOtherSessions

curl
curl -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 '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

revokeSession

POST/api/revoke-session

Firm memberPermission: org:read

revokeSession

Parameters of revokeSession
NameInTypeRequired
sessionIdBodystring 1–64Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

setMemberRole

POST/api/set-member-role

Firm memberPermission: org:manage

setMemberRole

Parameters of setMemberRole
NameInTypeRequired
codeBodystring 0–64No
passwordBodystring 0–1024No
roleBody"owner" | "lawyer" | "paralegal" | "billing" | "viewer"Yes
userIdBodystring (uuid)Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

setOnboardingEmails

POST/api/set-onboarding-emails

Firm memberPermission: org:read

setOnboardingEmails

Parameters of setOnboardingEmails
NameInTypeRequired
emailsBody"on" | "off"Yes
returnToBodystring 1–2048No
curl
curl -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"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

setPreferences

POST/api/set-preferences

Firm memberPermission: org:read

setPreferences

Parameters of setPreferences
NameInTypeRequired
localeBody"es-co" | "en" | "auto" | nullNo
returnToBodystring 1–2048No
themeBody"system" | "light" | "dark"No
curl
curl -X POST 'https://www.notificado.co/api/set-preferences' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

setRequireMfa

POST/api/set-require-mfa

Firm memberPermission: org:manage

setRequireMfa

Parameters of setRequireMfa
NameInTypeRequired
codeBodystring 0–64No
passwordBodystring 0–1024No
requireMfaBody"on" | "off"Yes
curl
curl -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"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

switchOrg

POST/api/switch-org

Firm memberPermission: org:read

switchOrg

Parameters of switchOrg
NameInTypeRequired
nextBodystring 1–2048No
orgIdBodystring (uuid)Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

transferOwnership

POST/api/transfer-ownership

Firm memberPermission: org:manage

transferOwnership

Parameters of transferOwnership
NameInTypeRequired
codeBodystring 0–64No
passwordBodystring 0–1024No
userIdBodystring (uuid)Yes
curl
curl -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>"}'
TypeScript
const 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_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds