Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
POST/api/cancel-email-change
Firm memberPermission: auth:email-change-link
cancelEmailChange
Parameters of cancelEmailChange| Name | In | Type | Required |
|---|
token | Body | string 1–2048 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/cancel-email-change' \
-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/cancel-email-change', {
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{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/complete-google-sign-up
No sessionPermission: auth:anonymous
completeGoogleSignUp
Parameters of completeGoogleSignUp| Name | In | Type | Required |
|---|
attribution | Body | string 0–2048 | No |
next | Body | string 0–2048 | No |
orgName | Body | string 0–200 | Yes |
referralCode | Body | string 0–40 | No |
termsVersion | Body | string 1–64 | No |
curlcurl -X POST 'https://www.notificado.co/api/complete-google-sign-up' \
-H 'content-type: application/json' \
-d '{"orgName":"<orgName>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/complete-google-sign-up', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"orgName": "<orgName>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-email-change
Firm memberPermission: auth:email-change-link
confirmEmailChange
Parameters of confirmEmailChange| Name | In | Type | Required |
|---|
token | Body | string 1–2048 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/confirm-email-change' \
-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/confirm-email-change', {
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{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-google-code
No sessionPermission: auth:anonymous
confirmGoogleCode
Parameters of confirmGoogleCode| Name | In | Type | Required |
|---|
code | Body | string 1–64 | Yes |
next | Body | string 0–2048 | No |
curlcurl -X POST 'https://www.notificado.co/api/confirm-google-code' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/confirm-google-code', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-sign-in-code
No sessionPermission: auth:anonymous
confirmSignInCode
Parameters of confirmSignInCode| Name | In | Type | Required |
|---|
code | Body | string 1–64 | Yes |
next | Body | string 0–2048 | No |
curlcurl -X POST 'https://www.notificado.co/api/confirm-sign-in-code' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/confirm-sign-in-code', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/consume-magic-link
No sessionPermission: auth:anonymous
consumeMagicLink
Parameters of consumeMagicLink| Name | In | Type | Required |
|---|
intent | Body | string 0–32 | No |
next | Body | string 0–2048 | No |
password | Body | string 0–1024 | No |
token | Body | string 1–2048 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/consume-magic-link' \
-H 'content-type: application/json' \
-d '{"token":"<token>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/consume-magic-link', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"token": "<token>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/request-magic-link
No sessionPermission: auth:anonymous
requestMagicLink
Parameters of requestMagicLink| Name | In | Type | Required |
|---|
captchaToken | Body | string 0–4096 | No |
cf-turnstile-response | Body | string 0–4096 | No |
email | Body | string 1–320 | Yes |
h-captcha-response | Body | string 0–4096 | No |
locale | Body | string 0–16 | No |
next | Body | string 0–2048 | No |
curlcurl -X POST 'https://www.notificado.co/api/request-magic-link' \
-H 'content-type: application/json' \
-d '{"email":"<email>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/request-magic-link', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"email": "<email>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/request-password-reset
No sessionPermission: auth:anonymous
requestPasswordReset
Parameters of requestPasswordReset| Name | In | Type | Required |
|---|
captchaToken | Body | string 0–4096 | No |
cf-turnstile-response | Body | string 0–4096 | No |
email | Body | string 0–320 | Yes |
h-captcha-response | Body | string 0–4096 | No |
locale | Body | string 0–16 | No |
curlcurl -X POST 'https://www.notificado.co/api/request-password-reset' \
-H 'content-type: application/json' \
-d '{"email":"<email>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/request-password-reset', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"email": "<email>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/reset-password
No sessionPermission: auth:anonymous
resetPassword
Parameters of resetPassword| Name | In | Type | Required |
|---|
password | Body | string 0–1024 | Yes |
passwordConfirm | Body | string 0–1024 | No |
token | Body | string 0–2048 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/reset-password' \
-H 'content-type: application/json' \
-d '{"password":"<password>","token":"<token>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/reset-password', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"password": "<password>",
"token": "<token>"
}),
});
const result = await response.json();
Example response
200{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/sign-in
No sessionPermission: auth:anonymous
signIn
Parameters of signIn| Name | In | Type | Required |
|---|
code | Body | string 0–64 | No |
email | Body | string 1–320 | Yes |
locale | Body | string 0–16 | No |
next | Body | string 0–2048 | No |
password | Body | string 1–1024 | Yes |
curlcurl -X POST 'https://www.notificado.co/api/sign-in' \
-H 'content-type: application/json' \
-d '{"email":"<email>","password":"<password>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/sign-in', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"email": "<email>",
"password": "<password>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/sign-out
Firm memberPermission: auth:sign-out
signOut
curlcurl -X POST 'https://www.notificado.co/api/sign-out' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/sign-out', {
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{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID
POST/api/sign-up
No sessionPermission: auth:anonymous
signUp
Parameters of signUp| Name | In | Type | Required |
|---|
attribution | Body | string 0–2048 | No |
captchaToken | Body | string 0–4096 | No |
cf-turnstile-response | Body | string 0–4096 | No |
email | Body | string 1–320 | Yes |
h-captcha-response | Body | string 0–4096 | No |
locale | Body | string 0–16 | No |
name | Body | string 1–200 | Yes |
next | Body | string 0–2048 | No |
orgName | Body | string 0–200 | Yes |
password | Body | string 1–1024 | Yes |
referralCode | Body | string 0–40 | No |
termsVersion | Body | string 1–64 | No |
curlcurl -X POST 'https://www.notificado.co/api/sign-up' \
-H 'content-type: application/json' \
-d '{
"email": "<email>",
"name": "<name>",
"orgName": "<orgName>",
"password": "<password>"
}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/sign-up', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"email": "<email>",
"name": "<name>",
"orgName": "<orgName>",
"password": "<password>"
}),
});
const result = await response.json();
Example response
200{
"ok": true,
"orgId": "<orgId>",
"userId": "<userId>"
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/unsubscribe-onboarding
Firm memberPermission: growth:unsubscribe-link
unsubscribeOnboarding
Parameters of unsubscribeOnboarding| Name | In | Type | Required |
|---|
List-Unsubscribe | Body | string 1–32 | No |
t | Body | string 1–512 | No |
curlcurl -X POST 'https://www.notificado.co/api/unsubscribe-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/unsubscribe-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{
"ok": true
}
Errors
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds