Saltar al contenido
Notificado

Tokens de agente

14 operaciones, cada una con sus parámetros, ejemplos en curl y TypeScript listos para copiar y sus errores.

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

listWebhookDeliveries

GET/v1/list-webhook-deliveries

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: listWebhookDeliveries

One endpoint's delivery log: status, attempts, HTTP answer, next try.

Parámetros de listWebhookDeliveries
NombreDóndeTipoObligatorio
endpointIdConsultastring (uuid)Sí
limitConsultainteger 1–100No
orgIdConsultastring (uuid)Sí
_firstConsultainteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterConsultastringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/list-webhook-deliveries?endpointId=<endpointId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/list-webhook-deliveries?endpointId=<endpointId>&orgId=<orgId>', {
  headers: { authorization: `Bearer ${token}` },
});
const result = await response.json();
Ejemplo de respuesta
200
[
  null
]

Errores

  • 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

listWebhookEndpoints

GET/v1/list-webhook-endpoints

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: listWebhookEndpoints

The firm's webhook endpoints and their status; never the secret.

Parámetros de listWebhookEndpoints
NombreDóndeTipoObligatorio
orgIdConsultastring (uuid)Sí
_firstConsultainteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterConsultastringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/list-webhook-endpoints?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/list-webhook-endpoints?orgId=<orgId>', {
  headers: { authorization: `Bearer ${token}` },
});
const result = await response.json();
Ejemplo de respuesta
200
[
  null
]

Errores

  • 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

oauthHandoff

GET/_x/query/oauth-handoff

Miembro de la firmaPermiso: or(api-access:write, admin:tokens:self)

oauthHandoff

Parámetros de oauthHandoff
NombreDóndeTipoObligatorio
codeConsultastring 1–200Sí
orgIdConsultastring (uuid)Sí
userIdConsultastring (uuid)Sí
_firstConsultainteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterConsultastringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/oauth-handoff?code=<code>&orgId=<orgId>&userId=<userId>' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/oauth-handoff?code=<code>&orgId=<orgId>&userId=<userId>', {
  headers: { cookie: sessionCookie },
});
const result = await response.json();
Ejemplo de respuesta
200
[
  null
]

Errores

  • 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

authorizeClient

POST/api/authorize-client

Miembro de la firmaPermiso: or(api-access:write, admin:tokens:self)

authorizeClient

Parámetros de authorizeClient
NombreDóndeTipoObligatorio
client_idCuerpostring 1–100Sí
codeCuerpostring 1–64No
code_challengeCuerpostring 1–2000No
code_challenge_methodCuerpostring 1–2000No
idleCuerpo"60"No
orgIdCuerpostring (uuid)Sí
passwordCuerpostring 1–1024No
redirect_uriCuerpostring 1–2000Sí
resourceCuerpostring 1–2000No
response_typeCuerpostring 1–2000No
scopeCuerpostring 1–2000No
scopesCuerpostring 1–40 | array of string 1–40No
stateCuerpostring 1–4096No
curl
curl -X POST 'https://www.notificado.co/api/authorize-client' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{
  "client_id": "<client_id>",
  "orgId": "<orgId>",
  "redirect_uri": "<redirect_uri>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/authorize-client', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "client_id": "<client_id>",
    "orgId": "<orgId>",
    "redirect_uri": "<redirect_uri>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "redirectTo": "<redirectTo>"
}

Errores

  • 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

createWebhookEndpoint

POST/v1/create-webhook-endpoint

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: createWebhookEndpoint

Register a public https URL for signed event POSTs. The secret is shown ONCE. docs://recipes/set-up-a-webhook.

Parámetros de createWebhookEndpoint
NombreDóndeTipoObligatorio
descriptionCuerpostring 1–200 | nullNo
eventTypesCuerpoarray of string 1–40Sí
orgIdCuerpostring (uuid)Sí
urlCuerpostring 1–2000Sí
curl
curl -X POST 'https://www.notificado.co/v1/create-webhook-endpoint' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"eventTypes":["<eventTypes>"],"orgId":"<orgId>","url":"<url>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/create-webhook-endpoint', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "eventTypes": [
      "<eventTypes>"
    ],
    "orgId": "<orgId>",
    "url": "<url>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "endpoint": {
    "createdAt": "<createdAt>",
    "createdAtBogota": "<createdAtBogota>",
    "description": "<description>",
    "disabledAtBogota": "<disabledAtBogota>",
    "eventTypes": [
      "notification.sent"
    ],
    "failureCount": -9007199254740991,
    "id": "<id>",
    "lastFailureAt": "<lastFailureAt>",
    "lastFailureAtBogota": "<lastFailureAtBogota>",
    "lastSuccessAt": "<lastSuccessAt>",
    "lastSuccessAtBogota": "<lastSuccessAtBogota>",
    "rotating": true,
    "status": "active",
    "url": "<url>"
  },
  "secret": "<secret>"
}

Errores

  • 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

deleteWebhookEndpoint

POST/v1/delete-webhook-endpoint

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: deleteWebhookEndpoint

Stop sending to an endpoint: pending deliveries are cancelled, the log is kept.

Parámetros de deleteWebhookEndpoint
NombreDóndeTipoObligatorio
endpointIdCuerpostring (uuid)Sí
orgIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/v1/delete-webhook-endpoint' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"endpointId":"<endpointId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/delete-webhook-endpoint', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "endpointId": "<endpointId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "deleted": true,
  "id": "<id>"
}

Errores

  • 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

issueAgentToken

POST/api/issue-agent-token

Miembro de la firmaPermiso: api-access:write

issueAgentToken

Parámetros de issueAgentToken
NombreDóndeTipoObligatorio
codeCuerpostring 1–64No
expiresOnCuerpostringNo
nameCuerpostring 1–100Sí
orgIdCuerpostring (uuid)Sí
passwordCuerpostring 1–1024No
scopesCuerpoarray of string 1–40Sí
ttlDaysCuerpo30 | 60 | 90 | 180 | 365 | nullNo
curl
curl -X POST 'https://www.notificado.co/api/issue-agent-token' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"name":"<name>","orgId":"<orgId>","scopes":["<scopes>"]}'
TypeScript
const response = await fetch('https://www.notificado.co/api/issue-agent-token', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "name": "<name>",
    "orgId": "<orgId>",
    "scopes": [
      "<scopes>"
    ]
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "summary": {
    "createdAt": "2026-09-25T15:00:00Z",
    "createdAtBogota": "<createdAtBogota>",
    "expiresAt": "2026-09-25T15:00:00Z",
    "expiresAtBogota": "<expiresAtBogota>",
    "id": "<id>",
    "lastUsedAt": "2026-09-25T15:00:00Z",
    "lastUsedAtBogota": "<lastUsedAtBogota>",
    "name": "<name>",
    "oauthClient": "<oauthClient>",
    "prefix": "<prefix>",
    "revokedAt": "2026-09-25T15:00:00Z",
    "revokedAtBogota": "<revokedAtBogota>",
    "scopes": [
      "cases:read"
    ],
    "status": "active",
    "userId": "<userId>"
  },
  "token": "<token>"
}

Errores

  • 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

listAgentTokens

POST/api/list-agent-tokens

Miembro de la firmaPermiso: api-access:read

listAgentTokens

Parámetros de listAgentTokens
NombreDóndeTipoObligatorio
orgIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/list-agent-tokens' \
  -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/list-agent-tokens', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "tokens": [
    {
      "createdAt": "2026-09-25T15:00:00Z",
      "createdAtBogota": "<createdAtBogota>",
      "expiresAt": "2026-09-25T15:00:00Z",
      "expiresAtBogota": "<expiresAtBogota>",
      "id": "<id>",
      "lastUsedAt": "2026-09-25T15:00:00Z",
      "lastUsedAtBogota": "<lastUsedAtBogota>",
      "name": "<name>",
      "oauthClient": "<oauthClient>",
      "prefix": "<prefix>",
      "revokedAt": "2026-09-25T15:00:00Z",
      "revokedAtBogota": "<revokedAtBogota>",
      "scopes": [
        "cases:read"
      ],
      "status": "active",
      "userId": "<userId>"
    }
  ]
}

Errores

  • 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

revokeAgentToken

POST/api/revoke-agent-token

Miembro de la firmaPermiso: or(api-access:write, org:read)

revokeAgentToken

Parámetros de revokeAgentToken
NombreDóndeTipoObligatorio
orgIdCuerpostring (uuid)Sí
returnToCuerpo"api" | "security"No
tokenIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/revoke-agent-token' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>","tokenId":"<tokenId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/revoke-agent-token', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "orgId": "<orgId>",
    "tokenId": "<tokenId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "createdAt": "2026-09-25T15:00:00Z",
  "createdAtBogota": "<createdAtBogota>",
  "expiresAt": "2026-09-25T15:00:00Z",
  "expiresAtBogota": "<expiresAtBogota>",
  "id": "<id>",
  "lastUsedAt": "2026-09-25T15:00:00Z",
  "lastUsedAtBogota": "<lastUsedAtBogota>",
  "name": "<name>",
  "oauthClient": "<oauthClient>",
  "prefix": "<prefix>",
  "revokedAt": "2026-09-25T15:00:00Z",
  "revokedAtBogota": "<revokedAtBogota>",
  "scopes": [
    "cases:read"
  ],
  "status": "active",
  "userId": "<userId>"
}

Errores

  • 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

rotateWebhookSecret

POST/v1/rotate-webhook-secret

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: rotateWebhookSecret

A new signing secret, shown ONCE; the old one also signs for 24 h.

Parámetros de rotateWebhookSecret
NombreDóndeTipoObligatorio
endpointIdCuerpostring (uuid)Sí
orgIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/v1/rotate-webhook-secret' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"endpointId":"<endpointId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/rotate-webhook-secret', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "endpointId": "<endpointId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "endpoint": {
    "createdAt": "<createdAt>",
    "createdAtBogota": "<createdAtBogota>",
    "description": "<description>",
    "disabledAtBogota": "<disabledAtBogota>",
    "eventTypes": [
      "notification.sent"
    ],
    "failureCount": -9007199254740991,
    "id": "<id>",
    "lastFailureAt": "<lastFailureAt>",
    "lastFailureAtBogota": "<lastFailureAtBogota>",
    "lastSuccessAt": "<lastSuccessAt>",
    "lastSuccessAtBogota": "<lastSuccessAtBogota>",
    "rotating": true,
    "status": "active",
    "url": "<url>"
  },
  "secret": "<secret>"
}

Errores

  • 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

sendTestWebhook

POST/v1/send-test-webhook

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: sendTestWebhook

POST a signed webhook.test now; answers the status, duration or failure.

Parámetros de sendTestWebhook
NombreDóndeTipoObligatorio
endpointIdCuerpostring (uuid)Sí
orgIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/v1/send-test-webhook' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"endpointId":"<endpointId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/send-test-webhook', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "endpointId": "<endpointId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "deliveryId": "<deliveryId>",
  "durationMs": -9007199254740991,
  "error": "http_status",
  "ok": true,
  "statusCode": -9007199254740991
}

Errores

  • 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

updateAgentTokenExpiry

POST/api/update-agent-token-expiry

Miembro de la firmaPermiso: or(api-access:write, org:manage)

updateAgentTokenExpiry

Parámetros de updateAgentTokenExpiry
NombreDóndeTipoObligatorio
codeCuerpostring 1–64No
expiresOnCuerpostringNo
lifetimeCuerpo"30" | "60" | "90" | "180" | "365" | "never" | "date"Sí
orgIdCuerpostring (uuid)Sí
passwordCuerpostring 1–1024No
tokenIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/update-agent-token-expiry' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"lifetime":"30","orgId":"<orgId>","tokenId":"<tokenId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/update-agent-token-expiry', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "lifetime": "30",
    "orgId": "<orgId>",
    "tokenId": "<tokenId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "createdAt": "2026-09-25T15:00:00Z",
  "createdAtBogota": "<createdAtBogota>",
  "expiresAt": "2026-09-25T15:00:00Z",
  "expiresAtBogota": "<expiresAtBogota>",
  "id": "<id>",
  "lastUsedAt": "2026-09-25T15:00:00Z",
  "lastUsedAtBogota": "<lastUsedAtBogota>",
  "name": "<name>",
  "oauthClient": "<oauthClient>",
  "prefix": "<prefix>",
  "revokedAt": "2026-09-25T15:00:00Z",
  "revokedAtBogota": "<revokedAtBogota>",
  "scopes": [
    "cases:read"
  ],
  "status": "active",
  "userId": "<userId>"
}

Errores

  • 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

updateWebhookEndpoint

POST/v1/update-webhook-endpoint

Miembro de la firmaPermiso: webhook:manage/v1 · token BearerHerramienta MCP: updateWebhookEndpoint

Change url, events or description; pause or resume (resuming delivers what waited).

Parámetros de updateWebhookEndpoint
NombreDóndeTipoObligatorio
descriptionCuerpostring 1–200 | nullNo
endpointIdCuerpostring (uuid)Sí
eventTypesCuerpoarray of string 1–40No
orgIdCuerpostring (uuid)Sí
stateCuerpo"active" | "paused"No
urlCuerpostring 1–2000No
curl
curl -X POST 'https://www.notificado.co/v1/update-webhook-endpoint' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"endpointId":"<endpointId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/update-webhook-endpoint', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "endpointId": "<endpointId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "createdAt": "<createdAt>",
  "createdAtBogota": "<createdAtBogota>",
  "description": "<description>",
  "disabledAtBogota": "<disabledAtBogota>",
  "eventTypes": [
    "notification.sent"
  ],
  "failureCount": -9007199254740991,
  "id": "<id>",
  "lastFailureAt": "<lastFailureAt>",
  "lastFailureAtBogota": "<lastFailureAtBogota>",
  "lastSuccessAt": "<lastSuccessAt>",
  "lastSuccessAtBogota": "<lastSuccessAtBogota>",
  "rotating": true,
  "status": "active",
  "url": "<url>"
}

Errores

  • 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