Saltar al contenido
Notificado

Afiliados

18 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

myAffiliate

GET/_x/query/my-affiliate

AfiliadoPermiso: affiliate:self

The signed-in person's own affiliate program page, in one read: whether the program is open, the terms version, their affiliate account, latest KYC, funnel, balances and statements. Panel session only; agents read myAffiliateSummary instead.

Parámetros de myAffiliate
NombreDóndeTipoObligatorio
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/my-affiliate?userId=<userId>' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/my-affiliate?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

myAffiliateAgentTokens

GET/_x/query/my-affiliate-agent-tokens

AfiliadoPermiso: affiliate:self

The signed-in person's own affiliate agent tokens, newest first, revoked and expired ones included: name, prefix, scopes, created, last used, expiry. Never a secret. Panel session only: a token never lists tokens.

Parámetros de myAffiliateAgentTokens
NombreDóndeTipoObligatorio
_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/my-affiliate-agent-tokens' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/my-affiliate-agent-tokens', {
  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

myAffiliateLedger

GET/v1/afiliados/my-affiliate-ledger

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosHerramienta MCP: myAffiliateLedger

Your commission ledger, newest first: accrued (and when it matures), matured, reversed, paid, adjust; amounts in COP minor units. Paged. Read-only.

Parámetros de myAffiliateLedger
NombreDóndeTipoObligatorio
_firstConsultainteger 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200)No
_afterConsultastringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/afiliados/my-affiliate-ledger' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-ledger', {
  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

myAffiliateStatements

GET/v1/afiliados/my-affiliate-statements

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosHerramienta MCP: myAffiliateStatements

Your monthly statements, newest first: amounts, status, what to invoice (einvoice) or the documento soporte (dsno), accepted invoice or refusal reasons. Paged. Read-only.

Parámetros de myAffiliateStatements
NombreDóndeTipoObligatorio
_firstConsultainteger 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100)No
_afterConsultastringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/afiliados/my-affiliate-statements' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-statements', {
  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

myAffiliateSummary

GET/v1/afiliados/my-affiliate-summary

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosHerramienta MCP: myAffiliateSummary

Your affiliate account: code, referral link, status, KYC status, funnel, balances (COP minor units) and pending invoice filings. Read-only.

curl
curl 'https://www.notificado.co/v1/afiliados/my-affiliate-summary' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-summary', {
  headers: { authorization: `Bearer ${token}` },
});
const result = await response.json();
Ejemplo de respuesta
200
{}

Errores

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 404 X_NOT_FOUND — the read matched no row for this input
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myPendingAffiliateInvoices

GET/v1/afiliados/my-pending-affiliate-invoices

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosHerramienta MCP: myPendingAffiliateInvoices

Invoice filings you requested that wait for the affiliate to confirm on /afiliados, newest first, with confirmUrl and expiry. Read-only.

Parámetros de myPendingAffiliateInvoices
NombreDóndeTipoObligatorio
_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/afiliados/my-pending-affiliate-invoices' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/my-pending-affiliate-invoices', {
  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

payoutBanks

GET/_x/query/payout-banks

AfiliadoPermiso: affiliate:self

The banks the payout provider pays to (code and name), for the payout account form. Panel session only: the payout account is set by the person, never by an agent.

Parámetros de payoutBanks
NombreDóndeTipoObligatorio
_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/payout-banks' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/payout-banks', {
  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

applyAffiliate

POST/api/apply-affiliate

AfiliadoPermiso: affiliate:selfIdempotency-Key

Apply to the affiliate program, accepting the terms version shown and the disclosure duty. Panel session only: accepting terms is the person's own act, never an agent's.

Parámetros de applyAffiliate
NombreDóndeTipoObligatorio
Idempotency-KeyEncabezadostring ≤ 255Replays the first response for a repeated key.No
disclosureAckCuerpoboolean | "on" | "true" | "false" | "off"No
termsVersionCuerpostring 1–40Sí
curl
curl -X POST 'https://www.notificado.co/api/apply-affiliate' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"termsVersion":"<termsVersion>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/apply-affiliate', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "termsVersion": "<termsVersion>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "code": "<code>",
  "disclosureAck": true,
  "id": "<id>",
  "link": "<link>",
  "status": "applied",
  "termsAcceptedAt": "2026-09-25T15:00:00Z",
  "termsVersion": "<termsVersion>"
}

Errores

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

confirmAffiliateInvoice

POST/api/confirm-affiliate-invoice

AfiliadoPermiso: affiliate:self

Confirm an invoice filing an affiliate agent requested (requestId from myPendingAffiliateInvoices, with the fingerprint shown): the pinned files are re-hashed and filed through the same path as a person's own upload, accepted or refused with reasons. Panel session only: this IS the human step, no token can call it.

Parámetros de confirmAffiliateInvoice
NombreDóndeTipoObligatorio
fingerprintCuerpostring 64–64No
requestIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/confirm-affiliate-invoice' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"requestId":"<requestId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/confirm-affiliate-invoice', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "requestId": "<requestId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "invoiceId": "<invoiceId>",
  "payoutId": "<payoutId>",
  "payoutStatus": "<payoutStatus>",
  "reasons": [
    "<reasons>"
  ],
  "rejectionId": "<rejectionId>",
  "requestId": "<requestId>",
  "status": "accepted"
}

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

confirmAffiliateInvoiceUpload

POST/v1/afiliados/confirm-affiliate-invoice-upload

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosIdempotency-KeyHerramienta MCP: confirmAffiliateInvoiceUpload

Step 2: checks the stored bytes (type, size, SHA-256) and answers the document id for submitAffiliateInvoice. Files nothing.

Parámetros de confirmAffiliateInvoiceUpload
NombreDóndeTipoObligatorio
Idempotency-KeyEncabezadostring ≤ 255Replays the first response for a repeated key.No
contentTypeCuerpostring 1–127Sí
filenameCuerpostring 1–255Sí
keyCuerpostring 1–512Sí
kindCuerpo"einvoice_xml" | "einvoice_pdf"Sí
curl
curl -X POST 'https://www.notificado.co/v1/afiliados/confirm-affiliate-invoice-upload' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "contentType": "<contentType>",
  "filename": "<filename>",
  "key": "<key>",
  "kind": "einvoice_xml"
}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/confirm-affiliate-invoice-upload', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
  body: JSON.stringify({
    "contentType": "<contentType>",
    "filename": "<filename>",
    "key": "<key>",
    "kind": "einvoice_xml"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "bytes": -9007199254740991,
  "createdAt": "2026-09-25T15:00:00Z",
  "filename": "<filename>",
  "id": "<id>",
  "kind": "certificado_vigencia",
  "mime": "<mime>",
  "pageCount": -9007199254740991,
  "sha256": "<sha256>"
}

Errores

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

createAffiliateAgentToken

POST/api/create-affiliate-agent-token

AfiliadoPermiso: affiliate:self

Mint an affiliate agent token (affiliate:read, affiliate:invoices) for the signed-in approved affiliate, served at /mcp/afiliados and /v1/afiliados only. Re-authenticated (password or authenticator code); the lifetime is 30 to 365 days, a Bogotá date or none. The whole token is in this answer only. Panel session only.

Parámetros de createAffiliateAgentToken
NombreDóndeTipoObligatorio
codeCuerpostring 1–64No
expiresOnCuerpostringNo
nameCuerpostring 1–100Sí
passwordCuerpostring 1–1024No
scopesCuerpoarray of string 1–40Sí
ttlDaysCuerpo30 | 60 | 90 | 180 | 365 | nullNo
curl
curl -X POST 'https://www.notificado.co/api/create-affiliate-agent-token' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"name":"<name>","scopes":["<scopes>"]}'
TypeScript
const response = await fetch('https://www.notificado.co/api/create-affiliate-agent-token', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "name": "<name>",
    "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>",
    "prefix": "<prefix>",
    "revokedAt": "2026-09-25T15:00:00Z",
    "revokedAtBogota": "<revokedAtBogota>",
    "scopes": [
      "affiliate:read"
    ],
    "status": "active"
  },
  "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

dismissAffiliateInvoiceRequest

POST/api/dismiss-affiliate-invoice-request

AfiliadoPermiso: affiliate:self

Reject an invoice filing an affiliate agent requested (requestId from myPendingAffiliateInvoices): nothing is filed and the statement keeps waiting. Panel session only: a token never decides its own request.

Parámetros de dismissAffiliateInvoiceRequest
NombreDóndeTipoObligatorio
requestIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/dismiss-affiliate-invoice-request' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"requestId":"<requestId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/dismiss-affiliate-invoice-request', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "requestId": "<requestId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "requestId": "<requestId>",
  "status": "dismissed"
}

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

downloadAffiliateSupportDocument

POST/v1/afiliados/download-affiliate-support-document

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosHerramienta MCP: downloadAffiliateSupportDocument

The documento soporte (DSNO) of one of your dsno statements, PDF or XML, as base64 with its SHA-256. Each download is recorded.

Parámetros de downloadAffiliateSupportDocument
NombreDóndeTipoObligatorio
formatCuerpo"pdf" | "xml"No
payoutIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/v1/afiliados/download-affiliate-support-document' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"payoutId":"<payoutId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/download-affiliate-support-document', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "payoutId": "<payoutId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "contentBase64": "<contentBase64>",
  "contentType": "<contentType>",
  "filename": "<filename>",
  "sha256": "<sha256>"
}

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

requestAffiliateInvoiceUpload

POST/v1/afiliados/request-affiliate-invoice-upload

AfiliadoPermiso: affiliate:selfAPI /v1/afiliadosIdempotency-KeyHerramienta MCP: requestAffiliateInvoiceUpload

Step 1: a signed PUT grant for the AttachedDocument XML (einvoice_xml, application/xml) or its PDF (einvoice_pdf). PUT the bytes, then confirmAffiliateInvoiceUpload(key).

Parámetros de requestAffiliateInvoiceUpload
NombreDóndeTipoObligatorio
Idempotency-KeyEncabezadostring ≤ 255Replays the first response for a repeated key.No
contentTypeCuerpostring 1–127Sí
filenameCuerpostring 1–255Sí
kindCuerpo"einvoice_xml" | "einvoice_pdf"Sí
sizeCuerpointeger 1–9007199254740991Sí
curl
curl -X POST 'https://www.notificado.co/v1/afiliados/request-affiliate-invoice-upload' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "contentType": "<contentType>",
  "filename": "<filename>",
  "kind": "einvoice_xml",
  "size": 1
}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/request-affiliate-invoice-upload', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
  body: JSON.stringify({
    "contentType": "<contentType>",
    "filename": "<filename>",
    "kind": "einvoice_xml",
    "size": 1
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "contentType": "<contentType>",
  "expiresAt": -9007199254740991,
  "key": "<key>",
  "maxBytes": -9007199254740991,
  "method": "PUT",
  "url": "<url>"
}

Errores

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

revokeAffiliateAgentToken

POST/api/revoke-affiliate-agent-token

AfiliadoPermiso: affiliate:self

Revoke one of the signed-in person's own affiliate agent tokens; its next call is a 401 on /mcp/afiliados and /v1/afiliados. Idempotent. Panel session only.

Parámetros de revokeAffiliateAgentToken
NombreDóndeTipoObligatorio
idCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/revoke-affiliate-agent-token' \
  -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-affiliate-agent-token', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "id": "<id>"
  }),
});
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>",
  "prefix": "<prefix>",
  "revokedAt": "2026-09-25T15:00:00Z",
  "revokedAtBogota": "<revokedAtBogota>",
  "scopes": [
    "affiliate:read"
  ],
  "status": "active"
}

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

setPayoutAccount

POST/api/set-payout-account

AfiliadoPermiso: affiliate:selfIdempotency-Key

Set where the signed-in affiliate's payouts go: a bank account, Nequi, Daviplata or a Bre-B key, and the holder's name. The number is sealed; only its last four characters come back. Panel session only: never an agent.

Parámetros de setPayoutAccount
NombreDóndeTipoObligatorio
Idempotency-KeyEncabezadostring ≤ 255Replays the first response for a repeated key.No
accountNumberCuerpostring 4–60Sí
accountTypeCuerpo"savings" | "checking"No
bankCodeCuerpostring 1–40No
codeCuerpostring 1–64No
holderNameCuerpostring 3–200Sí
methodCuerpo"bank" | "nequi" | "daviplata" | "breb"Sí
passwordCuerpostring 1–1024No
curl
curl -X POST 'https://www.notificado.co/api/set-payout-account' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "accountNumber": "<accountNumber>",
  "holderName": "<holderName>",
  "method": "bank"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/set-payout-account', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "accountNumber": "<accountNumber>",
    "holderName": "<holderName>",
    "method": "bank"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "accountType": "savings",
  "bankName": "<bankName>",
  "holderName": "<holderName>",
  "id": "<id>",
  "last4": "<last4>",
  "payoutMethod": "bank",
  "setAt": "2026-09-25T15:00:00Z"
}

Errores

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

submitAffiliateInvoice

POST/v1/afiliados/submit-affiliate-invoice

AfiliadoPermiso: or(affiliate:self, affiliate:self)API /v1/afiliadosHerramienta MCP: submitAffiliateInvoice

REQUEST the filing of your e-invoice for an einvoice statement; REQUIRES THE AFFILIATE: answers awaiting_confirmation and a confirmUrl; nothing is filed until the affiliate confirms on /afiliados.

Parámetros de submitAffiliateInvoice
NombreDóndeTipoObligatorio
payoutIdCuerpostring (uuid)Sí
pdfDocumentIdCuerpostring (uuid)Sí
xmlDocumentIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/v1/afiliados/submit-affiliate-invoice' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{
  "payoutId": "<payoutId>",
  "pdfDocumentId": "<pdfDocumentId>",
  "xmlDocumentId": "<xmlDocumentId>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/afiliados/submit-affiliate-invoice', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "payoutId": "<payoutId>",
    "pdfDocumentId": "<pdfDocumentId>",
    "xmlDocumentId": "<xmlDocumentId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "invoiceId": "<invoiceId>",
  "payoutId": "<payoutId>",
  "payoutStatus": "<payoutStatus>",
  "reasons": [
    "<reasons>"
  ],
  "rejectionId": "<rejectionId>",
  "replayed": true,
  "status": "accepted"
}

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

submitAffiliateKyc

POST/api/submit-affiliate-kyc

AfiliadoPermiso: affiliate:self

File the signed-in affiliate's identity and tax data (document, RUT, regime, e-invoicing duty) with the confirmed uploads of the two documents, for staff review. Panel session only: identity documents are filed by the person.

Parámetros de submitAffiliateKyc
NombreDóndeTipoObligatorio
bankCertDocumentIdCuerpostring (uuid)Sí
declarantCuerpoboolean | "on" | "true" | "false" | "off"No
declares383Cuerpoboolean | "on" | "true" | "false" | "off"No
docNumberCuerpostring 3–24Sí
docTypeCuerpo"CC" | "NIT" | "CE"Sí
dvCuerpostring 1–1No
einvoiceObligatedCuerpoboolean | "on" | "true" | "false" | "off"No
ivaResponsibleCuerpoboolean | "on" | "true" | "false" | "off"No
legalEntityCuerpoboolean | "on" | "true" | "false" | "off"No
legalNameCuerpostring 1–200No
rutDocumentIdCuerpostring (uuid)Sí
curl
curl -X POST 'https://www.notificado.co/api/submit-affiliate-kyc' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{
  "bankCertDocumentId": "<bankCertDocumentId>",
  "docNumber": "<docNumber>",
  "docType": "CC",
  "rutDocumentId": "<rutDocumentId>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/submit-affiliate-kyc', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "bankCertDocumentId": "<bankCertDocumentId>",
    "docNumber": "<docNumber>",
    "docType": "CC",
    "rutDocumentId": "<rutDocumentId>"
  }),
});
const result = await response.json();
Ejemplo de respuesta
200
{
  "kycId": "<kycId>",
  "status": "pending",
  "submittedAt": "2026-09-25T15:00:00Z"
}

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