Skip to content

Affiliates

18 operations, each with its parameters, curl and TypeScript examples ready to copy, and its errors.

Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication

myAffiliate

GET/_x/query/my-affiliate

AffiliatePermission: 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
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe 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();
Example response
200
[
  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

myAffiliateAgentTokens

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

AffiliatePermission: 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
NameInTypeRequired
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe 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();
Example response
200
[
  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

myAffiliateLedger

GET/v1/afiliados/my-affiliate-ledger

AffiliatePermission: affiliate:selfAPI /v1/afiliadosMCP 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
NameInTypeRequired
_firstQueryinteger 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200)No
_afterQuerystringthe 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();
Example response
200
[
  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

myAffiliateStatements

GET/v1/afiliados/my-affiliate-statements

AffiliatePermission: affiliate:selfAPI /v1/afiliadosMCP 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
NameInTypeRequired
_firstQueryinteger 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100)No
_afterQuerystringthe 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();
Example response
200
[
  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

myAffiliateSummary

GET/v1/afiliados/my-affiliate-summary

AffiliatePermission: affiliate:selfAPI /v1/afiliadosMCP tool: 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();
Example response
200
{}

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

myPendingAffiliateInvoices

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

AffiliatePermission: affiliate:selfAPI /v1/afiliadosMCP 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
NameInTypeRequired
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe 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();
Example response
200
[
  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

payoutBanks

GET/_x/query/payout-banks

AffiliatePermission: 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
NameInTypeRequired
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe 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();
Example response
200
[
  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

applyAffiliate

POST/api/apply-affiliate

AffiliatePermission: 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.

Parameters of applyAffiliate
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
disclosureAckBodyboolean | "on" | "true" | "false" | "off"No
termsVersionBodystring 1–40Yes
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();
Example response
200
{
  "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

confirmAffiliateInvoice

POST/api/confirm-affiliate-invoice

AffiliatePermission: 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
NameInTypeRequired
fingerprintBodystring 64–64No
requestIdBodystring (uuid)Yes
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();
Example response
200
{
  "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

confirmAffiliateInvoiceUpload

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

AffiliatePermission: affiliate:selfAPI /v1/afiliadosIdempotency-KeyMCP tool: confirmAffiliateInvoiceUpload

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

Parameters of confirmAffiliateInvoiceUpload
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
contentTypeBodystring 1–127Yes
filenameBodystring 1–255Yes
keyBodystring 1–512Yes
kindBody"einvoice_xml" | "einvoice_pdf"Yes
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();
Example response
200
{
  "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

createAffiliateAgentToken

POST/api/create-affiliate-agent-token

AffiliatePermission: 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
NameInTypeRequired
codeBodystring 1–64No
expiresOnBodystringNo
nameBodystring 1–100Yes
passwordBodystring 1–1024No
scopesBodyarray of string 1–40Yes
ttlDaysBody30 | 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();
Example response
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>"
}

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

dismissAffiliateInvoiceRequest

POST/api/dismiss-affiliate-invoice-request

AffiliatePermission: 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
NameInTypeRequired
requestIdBodystring (uuid)Yes
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();
Example response
200
{
  "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

downloadAffiliateSupportDocument

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

AffiliatePermission: affiliate:selfAPI /v1/afiliadosMCP 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
NameInTypeRequired
formatBody"pdf" | "xml"No
payoutIdBodystring (uuid)Yes
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();
Example response
200
{
  "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

requestAffiliateInvoiceUpload

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

AffiliatePermission: affiliate:selfAPI /v1/afiliadosIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
contentTypeBodystring 1–127Yes
filenameBodystring 1–255Yes
kindBody"einvoice_xml" | "einvoice_pdf"Yes
sizeBodyinteger 1–9007199254740991Yes
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();
Example response
200
{
  "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

revokeAffiliateAgentToken

POST/api/revoke-affiliate-agent-token

AffiliatePermission: 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
NameInTypeRequired
idBodystring (uuid)Yes
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();
Example response
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"
}

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

setPayoutAccount

POST/api/set-payout-account

AffiliatePermission: 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.

Parameters of setPayoutAccount
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
accountNumberBodystring 4–60Yes
accountTypeBody"savings" | "checking"No
bankCodeBodystring 1–40No
codeBodystring 1–64No
holderNameBodystring 3–200Yes
methodBody"bank" | "nequi" | "daviplata" | "breb"Yes
passwordBodystring 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();
Example response
200
{
  "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

submitAffiliateInvoice

POST/v1/afiliados/submit-affiliate-invoice

AffiliatePermission: or(affiliate:self, affiliate:self)API /v1/afiliadosMCP 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
NameInTypeRequired
payoutIdBodystring (uuid)Yes
pdfDocumentIdBodystring (uuid)Yes
xmlDocumentIdBodystring (uuid)Yes
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();
Example response
200
{
  "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

submitAffiliateKyc

POST/api/submit-affiliate-kyc

AffiliatePermission: 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
NameInTypeRequired
bankCertDocumentIdBodystring (uuid)Yes
declarantBodyboolean | "on" | "true" | "false" | "off"No
declares383Bodyboolean | "on" | "true" | "false" | "off"No
docNumberBodystring 3–24Yes
docTypeBody"CC" | "NIT" | "CE"Yes
dvBodystring 1–1No
einvoiceObligatedBodyboolean | "on" | "true" | "false" | "off"No
ivaResponsibleBodyboolean | "on" | "true" | "false" | "off"No
legalEntityBodyboolean | "on" | "true" | "false" | "off"No
legalNameBodystring 1–200No
rutDocumentIdBodystring (uuid)Yes
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();
Example response
200
{
  "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