Las operaciones marcadas /v1 se autentican con un token de agente; las demás, con una sesión del panel. Cómo funcionan ambas está en Autenticación
POST/api/cancel-email-change
Miembro de la firmaPermiso: auth:email-change-link
cancelEmailChange
Parámetros de cancelEmailChange| Nombre | Dónde | Tipo | Obligatorio |
|---|
token | Cuerpo | string 1–2048 | Sí |
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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/complete-google-sign-up
Sin sesiónPermiso: auth:anonymous
completeGoogleSignUp
Parámetros de completeGoogleSignUp| Nombre | Dónde | Tipo | Obligatorio |
|---|
attribution | Cuerpo | string 0–2048 | No |
next | Cuerpo | string 0–2048 | No |
orgName | Cuerpo | string 0–200 | Sí |
referralCode | Cuerpo | string 0–40 | No |
termsVersion | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true,
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-email-change
Miembro de la firmaPermiso: auth:email-change-link
confirmEmailChange
Parámetros de confirmEmailChange| Nombre | Dónde | Tipo | Obligatorio |
|---|
token | Cuerpo | string 1–2048 | Sí |
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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-google-code
Sin sesiónPermiso: auth:anonymous
confirmGoogleCode
Parámetros de confirmGoogleCode| Nombre | Dónde | Tipo | Obligatorio |
|---|
code | Cuerpo | string 1–64 | Sí |
next | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true,
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-sign-in-code
Sin sesiónPermiso: auth:anonymous
confirmSignInCode
Parámetros de confirmSignInCode| Nombre | Dónde | Tipo | Obligatorio |
|---|
code | Cuerpo | string 1–64 | Sí |
next | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true,
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/consume-magic-link
Sin sesiónPermiso: auth:anonymous
consumeMagicLink
Parámetros de consumeMagicLink| Nombre | Dónde | Tipo | Obligatorio |
|---|
intent | Cuerpo | string 0–32 | No |
next | Cuerpo | string 0–2048 | No |
password | Cuerpo | string 0–1024 | No |
token | Cuerpo | string 1–2048 | Sí |
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();
Ejemplo de respuesta
200{
"ok": true,
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/request-magic-link
Sin sesiónPermiso: auth:anonymous
requestMagicLink
Parámetros de requestMagicLink| Nombre | Dónde | Tipo | Obligatorio |
|---|
captchaToken | Cuerpo | string 0–4096 | No |
cf-turnstile-response | Cuerpo | string 0–4096 | No |
email | Cuerpo | string 1–320 | Sí |
h-captcha-response | Cuerpo | string 0–4096 | No |
locale | Cuerpo | string 0–16 | No |
next | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/request-password-reset
Sin sesiónPermiso: auth:anonymous
requestPasswordReset
Parámetros de requestPasswordReset| Nombre | Dónde | Tipo | Obligatorio |
|---|
captchaToken | Cuerpo | string 0–4096 | No |
cf-turnstile-response | Cuerpo | string 0–4096 | No |
email | Cuerpo | string 0–320 | Sí |
h-captcha-response | Cuerpo | string 0–4096 | No |
locale | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/reset-password
Sin sesiónPermiso: auth:anonymous
resetPassword
Parámetros de resetPassword| Nombre | Dónde | Tipo | Obligatorio |
|---|
password | Cuerpo | string 0–1024 | Sí |
passwordConfirm | Cuerpo | string 0–1024 | No |
token | Cuerpo | string 0–2048 | Sí |
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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/sign-in
Sin sesiónPermiso: auth:anonymous
signIn
Parámetros de signIn| Nombre | Dónde | Tipo | Obligatorio |
|---|
code | Cuerpo | string 0–64 | No |
email | Cuerpo | string 1–320 | Sí |
locale | Cuerpo | string 0–16 | No |
next | Cuerpo | string 0–2048 | No |
password | Cuerpo | string 1–1024 | Sí |
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();
Ejemplo de respuesta
200{
"ok": true,
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/sign-out
Miembro de la firmaPermiso: 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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID
POST/api/sign-up
Sin sesiónPermiso: auth:anonymous
signUp
Parámetros de signUp| Nombre | Dónde | Tipo | Obligatorio |
|---|
attribution | Cuerpo | string 0–2048 | No |
captchaToken | Cuerpo | string 0–4096 | No |
cf-turnstile-response | Cuerpo | string 0–4096 | No |
email | Cuerpo | string 1–320 | Sí |
h-captcha-response | Cuerpo | string 0–4096 | No |
locale | Cuerpo | string 0–16 | No |
name | Cuerpo | string 1–200 | Sí |
next | Cuerpo | string 0–2048 | No |
orgName | Cuerpo | string 0–200 | Sí |
password | Cuerpo | string 1–1024 | Sí |
referralCode | Cuerpo | string 0–40 | No |
termsVersion | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true,
"orgId": "<orgId>",
"userId": "<userId>"
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/unsubscribe-onboarding
Miembro de la firmaPermiso: growth:unsubscribe-link
unsubscribeOnboarding
Parámetros de unsubscribeOnboarding| Nombre | Dónde | Tipo | Obligatorio |
|---|
List-Unsubscribe | Cuerpo | string 1–32 | No |
t | Cuerpo | 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();
Ejemplo de respuesta
200{
"ok": true
}
Errores
400 X_INPUT_INVALID403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds