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
GET /_x/query/my-affiliate
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio userIdConsulta string (uuid)Sí _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/my-affiliate?userId=<userId>' \
-b cookies.txtTypeScript Copiar 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 Copiar [
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 GET /_x/query/my-affiliate-agent-tokens
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/my-affiliate-agent-tokens' \
-b cookies.txtTypeScript Copiar 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 Copiar [
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 GET /v1/afiliados/my-affiliate-ledger
Afiliado Permiso: affiliate:self API /v1/afiliados Herramienta 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 Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/v1/afiliados/my-affiliate-ledger' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copiar 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 Copiar [
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 GET /v1/afiliados/my-affiliate-statements
Afiliado Permiso: affiliate:self API /v1/afiliados Herramienta 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 Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/v1/afiliados/my-affiliate-statements' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copiar 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 Copiar [
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 GET /v1/afiliados/my-affiliate-summary
Afiliado Permiso: affiliate:self API /v1/afiliados Herramienta MCP: myAffiliateSummary
Your affiliate account: code, referral link, status, KYC status, funnel, balances (COP minor units) and pending invoice filings. Read-only.
curl Copiar curl 'https://www.notificado.co/v1/afiliados/my-affiliate-summary' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copiar 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 Copiar {}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 GET /v1/afiliados/my-pending-affiliate-invoices
Afiliado Permiso: affiliate:self API /v1/afiliados Herramienta 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 Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/v1/afiliados/my-pending-affiliate-invoices' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copiar 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 Copiar [
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 GET /_x/query/payout-banks
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/payout-banks' \
-b cookies.txtTypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/payout-banks' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Ejemplo de respuesta 200 Copiar [
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 POST /api/apply-affiliate
Afiliado Permiso: affiliate:self Idempotency-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 Nombre Dónde Tipo Obligatorio Idempotency-KeyEncabezado string ≤ 255Replays the first response for a repeated key. No disclosureAckCuerpo boolean | "on" | "true" | "false" | "off"No termsVersionCuerpo string 1–40Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/confirm-affiliate-invoice
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio fingerprintCuerpo string 64–64No requestIdCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /v1/afiliados/confirm-affiliate-invoice-upload
Afiliado Permiso: affiliate:self API /v1/afiliados Idempotency-Key Herramienta 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 Nombre Dónde Tipo Obligatorio Idempotency-KeyEncabezado string ≤ 255Replays the first response for a repeated key. No contentTypeCuerpo string 1–127Sí filenameCuerpo string 1–255Sí keyCuerpo string 1–512Sí kindCuerpo "einvoice_xml" | "einvoice_pdf"Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/create-affiliate-agent-token
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio codeCuerpo string 1–64No expiresOnCuerpo stringNo nameCuerpo string 1–100Sí passwordCuerpo string 1–1024No scopesCuerpo array of string 1–40Sí ttlDaysCuerpo 30 | 60 | 90 | 180 | 365 | nullNo
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/dismiss-affiliate-invoice-request
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio requestIdCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /v1/afiliados/download-affiliate-support-document
Afiliado Permiso: affiliate:self API /v1/afiliados Herramienta 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 Nombre Dónde Tipo Obligatorio formatCuerpo "pdf" | "xml"No payoutIdCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /v1/afiliados/request-affiliate-invoice-upload
Afiliado Permiso: affiliate:self API /v1/afiliados Idempotency-Key Herramienta 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 Nombre Dónde Tipo Obligatorio Idempotency-KeyEncabezado string ≤ 255Replays the first response for a repeated key. No contentTypeCuerpo string 1–127Sí filenameCuerpo string 1–255Sí kindCuerpo "einvoice_xml" | "einvoice_pdf"Sí sizeCuerpo integer 1–9007199254740991Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/revoke-affiliate-agent-token
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio idCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/set-payout-account
Afiliado Permiso: affiliate:self Idempotency-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 Nombre Dónde Tipo Obligatorio Idempotency-KeyEncabezado string ≤ 255Replays the first response for a repeated key. No accountNumberCuerpo string 4–60Sí accountTypeCuerpo "savings" | "checking"No bankCodeCuerpo string 1–40No codeCuerpo string 1–64No holderNameCuerpo string 3–200Sí methodCuerpo "bank" | "nequi" | "daviplata" | "breb"Sí passwordCuerpo string 1–1024No
curl Copiar 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 Copiar 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 Copiar {
"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 POST /v1/afiliados/submit-affiliate-invoice
Afiliado Permiso: or(affiliate:self, affiliate:self) API /v1/afiliados Herramienta 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 Nombre Dónde Tipo Obligatorio payoutIdCuerpo string (uuid)Sí pdfDocumentIdCuerpo string (uuid)Sí xmlDocumentIdCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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 POST /api/submit-affiliate-kyc
Afiliado Permiso: 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 Nombre Dónde Tipo Obligatorio bankCertDocumentIdCuerpo string (uuid)Sí declarantCuerpo boolean | "on" | "true" | "false" | "off"No declares383Cuerpo boolean | "on" | "true" | "false" | "off"No docNumberCuerpo string 3–24Sí docTypeCuerpo "CC" | "NIT" | "CE"Sí dvCuerpo string 1–1No einvoiceObligatedCuerpo boolean | "on" | "true" | "false" | "off"No ivaResponsibleCuerpo boolean | "on" | "true" | "false" | "off"No legalEntityCuerpo boolean | "on" | "true" | "false" | "off"No legalNameCuerpo string 1–200No rutDocumentIdCuerpo string (uuid)Sí
curl Copiar 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 Copiar 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 Copiar {
"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