Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/my-affiliate
Affiliate Permission: 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.
Parameters of myAffiliate Name In Type Required userIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-affiliate?userId=<userId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/my-affiliate?userId=<userId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: 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.
Parameters of myAffiliateAgentTokens Name In Type Required _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-affiliate-agent-tokens' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/my-affiliate-agent-tokens' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados MCP tool: myAffiliateLedger
Your commission ledger, newest first: accrued (and when it matures), matured, reversed, paid, adjust; amounts in COP minor units. Paged. Read-only.
Parameters of myAffiliateLedger Name In Type Required _firstQuery integer 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/afiliados/my-affiliate-ledger' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-ledger' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados MCP tool: 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.
Parameters of myAffiliateStatements Name In Type Required _firstQuery integer 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/afiliados/my-affiliate-statements' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-statements' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados MCP tool: myAffiliateSummary
Your affiliate account: code, referral link, status, KYC status, funnel, balances (COP minor units) and pending invoice filings. Read-only.
curl Copy curl 'https://www.notificado.co/v1/afiliados/my-affiliate-summary' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/afiliados/my-affiliate-summary' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {}Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados MCP tool: myPendingAffiliateInvoices
Invoice filings you requested that wait for the affiliate to confirm on /afiliados, newest first, with confirmUrl and expiry. Read-only.
Parameters of myPendingAffiliateInvoices Name In Type Required _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/afiliados/my-pending-affiliate-invoices' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/afiliados/my-pending-affiliate-invoices' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: 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.
Parameters of payoutBanks Name In Type Required _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/payout-banks' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/payout-banks' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
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
Affiliate Permission: 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.
Parameters of applyAffiliate Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No disclosureAckBody boolean | "on" | "true" | "false" | "off"No termsVersionBody string 1–40Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"code": "<code>",
"disclosureAck": true,
"id": "<id>",
"link": "<link>",
"status": "applied",
"termsAcceptedAt": "2026-09-25T15:00:00Z",
"termsVersion": "<termsVersion>"
}Errors
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
Affiliate Permission: 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.
Parameters of confirmAffiliateInvoice Name In Type Required fingerprintBody string 64–64No requestIdBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"invoiceId": "<invoiceId>",
"payoutId": "<payoutId>",
"payoutStatus": "<payoutStatus>",
"reasons": [
"<reasons>"
],
"rejectionId": "<rejectionId>",
"requestId": "<requestId>",
"status": "accepted"
}Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados Idempotency-Key MCP tool: confirmAffiliateInvoiceUpload
Step 2: checks the stored bytes (type, size, SHA-256) and answers the document id for submitAffiliateInvoice. Files nothing.
Parameters of confirmAffiliateInvoiceUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No contentTypeBody string 1–127Yes filenameBody string 1–255Yes keyBody string 1–512Yes kindBody "einvoice_xml" | "einvoice_pdf"Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"bytes": -9007199254740991,
"createdAt": "2026-09-25T15:00:00Z",
"filename": "<filename>",
"id": "<id>",
"kind": "certificado_vigencia",
"mime": "<mime>",
"pageCount": -9007199254740991,
"sha256": "<sha256>"
}Errors
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
Affiliate Permission: 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.
Parameters of createAffiliateAgentToken Name In Type Required codeBody string 1–64No expiresOnBody stringNo nameBody string 1–100Yes passwordBody string 1–1024No scopesBody array of string 1–40Yes ttlDaysBody 30 | 60 | 90 | 180 | 365 | nullNo
curl Copy 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 Copy 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();Example response 200 Copy {
"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>"
}Errors
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
Affiliate Permission: 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.
Parameters of dismissAffiliateInvoiceRequest Name In Type Required requestIdBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"requestId": "<requestId>",
"status": "dismissed"
}Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados MCP tool: downloadAffiliateSupportDocument
The documento soporte (DSNO) of one of your dsno statements, PDF or XML, as base64 with its SHA-256. Each download is recorded.
Parameters of downloadAffiliateSupportDocument Name In Type Required formatBody "pdf" | "xml"No payoutIdBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"contentBase64": "<contentBase64>",
"contentType": "<contentType>",
"filename": "<filename>",
"sha256": "<sha256>"
}Errors
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
Affiliate Permission: affiliate:self API /v1/afiliados Idempotency-Key MCP tool: 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).
Parameters of requestAffiliateInvoiceUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No contentTypeBody string 1–127Yes filenameBody string 1–255Yes kindBody "einvoice_xml" | "einvoice_pdf"Yes sizeBody integer 1–9007199254740991Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"contentType": "<contentType>",
"expiresAt": -9007199254740991,
"key": "<key>",
"maxBytes": -9007199254740991,
"method": "PUT",
"url": "<url>"
}Errors
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
Affiliate Permission: 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.
Parameters of revokeAffiliateAgentToken Name In Type Required idBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"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"
}Errors
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
Affiliate Permission: 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.
Parameters of setPayoutAccount Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No accountNumberBody string 4–60Yes accountTypeBody "savings" | "checking"No bankCodeBody string 1–40No codeBody string 1–64No holderNameBody string 3–200Yes methodBody "bank" | "nequi" | "daviplata" | "breb"Yes passwordBody string 1–1024No
curl Copy 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 Copy 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();Example response 200 Copy {
"accountType": "savings",
"bankName": "<bankName>",
"holderName": "<holderName>",
"id": "<id>",
"last4": "<last4>",
"payoutMethod": "bank",
"setAt": "2026-09-25T15:00:00Z"
}Errors
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
Affiliate Permission: or(affiliate:self, affiliate:self) API /v1/afiliados MCP tool: 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.
Parameters of submitAffiliateInvoice Name In Type Required payoutIdBody string (uuid)Yes pdfDocumentIdBody string (uuid)Yes xmlDocumentIdBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"invoiceId": "<invoiceId>",
"payoutId": "<payoutId>",
"payoutStatus": "<payoutStatus>",
"reasons": [
"<reasons>"
],
"rejectionId": "<rejectionId>",
"replayed": true,
"status": "accepted"
}Errors
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
Affiliate Permission: 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.
Parameters of submitAffiliateKyc Name In Type Required bankCertDocumentIdBody string (uuid)Yes declarantBody boolean | "on" | "true" | "false" | "off"No declares383Body boolean | "on" | "true" | "false" | "off"No docNumberBody string 3–24Yes docTypeBody "CC" | "NIT" | "CE"Yes dvBody string 1–1No einvoiceObligatedBody boolean | "on" | "true" | "false" | "off"No ivaResponsibleBody boolean | "on" | "true" | "false" | "off"No legalEntityBody boolean | "on" | "true" | "false" | "off"No legalNameBody string 1–200No rutDocumentIdBody string (uuid)Yes
curl Copy 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 Copy 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();Example response 200 Copy {
"kycId": "<kycId>",
"status": "pending",
"submittedAt": "2026-09-25T15:00:00Z"
}Errors
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