Every example assumes a signed-in session; how to get one is in Authentication
GET /_x/query/checkout-terms
Firm member Permission: billing:purchase
checkoutTerms
Parameters of checkoutTerms Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/checkout-terms?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/checkout-terms?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/credits-balance
Firm member Permission: billing:read MCP tool: creditsBalance
Credits balance of the caller's org: `balance` is how many recipients can still be notified (one credit per recipient, consumed on send), and `nextExpiryAt`/`nextExpiryCredits` say when the soonest batch of credits expires (UTC). Read before sending to more recipients than the balance covers.
Parameters of creditsBalance Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/credits-balance?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/credits-balance?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/ledger-list
Firm member Permission: billing:read
ledgerList
Parameters of ledgerList Name In Type Required limitQuery integer 1–500No orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/ledger-list?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/ledger-list?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/list-my-invoices
Firm member Permission: invoicing:read MCP tool: listMyInvoices
Lists your organization's DIAN electronic invoices, newest first: status (queued, issued, rejected), DIAN number, CUFE, net, discount, IVA and gross amounts in COP minor units (centavos), due date for credit invoices, and whether the PDF / XML is ready for downloadInvoice.
Parameters of listMyInvoices Name In Type Required limitQuery integer 1–200No orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/list-my-invoices?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/list-my-invoices?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/list-my-payments
Firm member Permission: payment:read
listMyPayments
Parameters of listMyPayments Name In Type Required limitQuery integer 1–200No orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/list-my-payments?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/list-my-payments?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/my-affiliate
Firm member Permission: affiliate:self
myAffiliate
Parameters of myAffiliate Name In Type Required userIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor 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 403 policy denied GET /_x/query/my-billing-profile
Firm member Permission: payment:read
myBillingProfile
Parameters of myBillingProfile Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-billing-profile?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/my-billing-profile?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/my-subscription
Firm member Permission: payment:read
mySubscription
Parameters of mySubscription Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-subscription?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/my-subscription?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/nequi-source-status
Firm member Permission: payment:read
nequiSourceStatus
Parameters of nequiSourceStatus Name In Type Required orgIdQuery string (uuid)Yes sourceIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/nequi-source-status?orgId=<orgId>&sourceId=<sourceId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/nequi-source-status?orgId=<orgId>&sourceId=<sourceId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/pack-offers
Firm member Permission: payment:read
packOffers
Parameters of packOffers Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/pack-offers?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/pack-offers?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/payment-status
Firm member Permission: payment:read
paymentStatus
Parameters of paymentStatus Name In Type Required orgIdQuery string (uuid)Yes paymentIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/payment-status?orgId=<orgId>&paymentId=<paymentId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/payment-status?orgId=<orgId>&paymentId=<paymentId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/plan-offers
Firm member Permission: payment:read
planOffers
Parameters of planOffers Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/plan-offers?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/plan-offers?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied POST /api/affiliate-kycs/submit
Firm member Permission: affiliate:self
submitAffiliateKyc
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 ivaResponsibleBody boolean | "on" | "true" | "false" | "off"No legalEntityBody boolean | "on" | "true" | "false" | "off"No payoutDestinationBody string 4–120Yes payoutMethodBody "bank" | "nequi" | "daviplata" | "breb"Yes rutDocumentIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/affiliate-kycs/submit' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"bankCertDocumentId": "<bankCertDocumentId>",
"docNumber": "<docNumber>",
"docType": "CC",
"payoutDestination": "<payoutDestination>",
"payoutMethod": "bank",
"rutDocumentId": "<rutDocumentId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/affiliate-kycs/submit' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"bankCertDocumentId" : "<bankCertDocumentId>" ,
"docNumber" : "<docNumber>" ,
"docType" : "CC" ,
"payoutDestination" : "<payoutDestination>" ,
"payoutMethod" : "bank" ,
"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 403 policy denied 422 X_BODY_INVALID POST /api/affiliate-support-documents/download
Firm member Permission: affiliate:self
downloadAffiliateSupportDocument
Parameters of downloadAffiliateSupportDocument Name In Type Required formatBody "pdf" | "xml"No payoutIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/affiliate-support-documents/download' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"payoutId":"<payoutId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/affiliate-support-documents/download' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
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 403 policy denied 422 X_BODY_INVALID POST /api/affiliates/apply
Firm member Permission: affiliate:self
applyAffiliate
Parameters of applyAffiliate Name In Type Required Idempotency-KeyQuery 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/affiliates/apply' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"termsVersion":"<termsVersion>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/affiliates/apply' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , 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 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/approvals/request
Firm member Permission: billing:grant MCP tool: requestApproval
Staff only (billing:grant). Files a four-eyes request to grant (credits.grant, needs invoiceRef) or adjust (credits.adjust) more than 100 credits for a customer org. A different staff member must approve it in the console; it then executes by itself. Returns the request.
Parameters of requestApproval Name In Type Required creditsBody integer -100000–100000Yes invoiceRefBody string 1–120No kindBody "credits.grant" | "credits.adjust"Yes orgIdBody string (uuid)Yes packageCodeBody string 1–40No reasonBody string 1–1000Yes validDaysBody integer 1–3650No
curl Copy curl -X POST 'https://www.notificado.co/api/approvals/request' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"credits": -100000,
"kind": "credits.grant",
"orgId": "<orgId>",
"reason": "<reason>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/approvals/request' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"credits" : -100000 ,
"kind" : "credits.grant" ,
"orgId" : "<orgId>" ,
"reason" : "<reason>"
}),
});
const result = await response.json();Example response 200 Copy {
"amount": {
"currency": "<currency>",
"minor": -9007199254740991
},
"credits": -9007199254740991,
"decidedAt": "2026-09-25T15:00:00Z",
"decidedBy": "<decidedBy>",
"decisionReason": "<decisionReason>",
"executedRef": "<executedRef>",
"expiresAt": "2026-09-25T15:00:00Z",
"failureReason": "<failureReason>",
"id": "<id>",
"kind": "<kind>",
"payload": {},
"payloadSha256": "<payloadSha256>",
"reason": "<reason>",
"requestedAt": "2026-09-25T15:00:00Z",
"requestedBy": "<requestedBy>",
"status": "<status>",
"subjectOrgId": "<subjectOrgId>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/billing-profiles/save
Firm member Permission: billing:purchase
saveBillingProfile
Parameters of saveBillingProfile Name In Type Required addressBody string 1–200Yes cityCodeBody string 5–5Yes docNumberBody string 3–20Yes docTypeBody "CC" | "NIT" | "CE" | "PP"Yes dvBody "" | string 1–1 | nullYes emailBody string (email) ≤ 254Yes fiscalResponsibilitiesBody array of string 1–12 | "" | string 1–200Yes legalNameBody string 1–200Yes orgIdBody string (uuid)Yes returnToBody string 1–240No taxRegimeBody "responsable_iva" | "no_responsable_iva" | "simple"Yes
curl Copy curl -X POST 'https://www.notificado.co/api/billing-profiles/save' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"address": "<address>",
"cityCode": "<cityCode>",
"docNumber": "<docNumber>",
"docType": "CC",
"dv": "",
"email": "<email>",
"fiscalResponsibilities": [],
"legalName": "<legalName>",
"orgId": "<orgId>",
"taxRegime": "responsable_iva"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/billing-profiles/save' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"address" : "<address>" ,
"cityCode" : "<cityCode>" ,
"docNumber" : "<docNumber>" ,
"docType" : "CC" ,
"dv" : "" ,
"email" : "<email>" ,
"fiscalResponsibilities" : [],
"legalName" : "<legalName>" ,
"orgId" : "<orgId>" ,
"taxRegime" : "responsable_iva"
}),
});
const result = await response.json();Example response 200 Copy {
"address": "<address>",
"cityCode": "<cityCode>",
"docNumber": "<docNumber>",
"docType": "CC",
"dv": "<dv>",
"email": "<email>",
"fiscalResponsibilities": [
"<fiscalResponsibilities>"
],
"legalName": "<legalName>",
"taxRegime": "responsable_iva",
"updatedAt": "2026-09-25T15:00:00Z"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/coupons/preview
Firm member Permission: billing:read
previewCoupon
Parameters of previewCoupon Name In Type Required codeBody string 1–40Yes intervalBody "month" | "year"No kindBody "pack" | "plan"Yes orgIdBody string (uuid)Yes subjectCodeBody string 1–40Yes
curl Copy curl -X POST 'https://www.notificado.co/api/coupons/preview' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"code": "<code>",
"kind": "pack",
"orgId": "<orgId>",
"subjectCode": "<subjectCode>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/coupons/preview' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"code" : "<code>" ,
"kind" : "pack" ,
"orgId" : "<orgId>" ,
"subjectCode" : "<subjectCode>"
}),
});
const result = await response.json();Example response 200 Copy {
"coupon": {
"amountOff": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"appliesTo": "pack",
"code": "<code>",
"cycles": -9007199254740991,
"duration": "once",
"kind": "percent",
"percentBps": -9007199254740991,
"validTo": "2026-09-25T15:00:00Z"
},
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"gross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"iva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"net": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
}
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/credits/adjust
Firm member Permission: billing:grant
adjustCredits
Parameters of adjustCredits Name In Type Required deltaBody integer -100000–100000Yes orgIdBody string (uuid)Yes reasonBody string 1–120Yes
curl Copy curl -X POST 'https://www.notificado.co/api/credits/adjust' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"delta":-100000,"orgId":"<orgId>","reason":"<reason>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/credits/adjust' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"delta" : -100000 ,
"orgId" : "<orgId>" ,
"reason" : "<reason>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"delta": -9007199254740991,
"expiresAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"kind": "<kind>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/credits/grant
Firm member Permission: billing:grant
grantCredits
Parameters of grantCredits Name In Type Required creditsBody integer -9007199254740991–9007199254740991 | string 0–12Yes invoiceRefBody string 1–120Yes orgIdBody string 1–64Yes packageCodeBody string 0–40No validDaysBody integer -9007199254740991–9007199254740991 | string 0–12No
curl Copy curl -X POST 'https://www.notificado.co/api/credits/grant' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"credits": -9007199254740991,
"invoiceRef": "<invoiceRef>",
"orgId": "<orgId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/credits/grant' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"credits" : -9007199254740991 ,
"invoiceRef" : "<invoiceRef>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"delta": -9007199254740991,
"expiresAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"kind": "<kind>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/cycles/pay
Firm member Permission: billing:purchase
payCycle
Parameters of payCycle Name In Type Required Idempotency-KeyQuery string ≤ 255Replays the first response for a repeated key. No cycleIdBody string (uuid)Yes orgIdBody string (uuid)Yes overageBody booleanNo
curl Copy curl -X POST 'https://www.notificado.co/api/cycles/pay' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"cycleId":"<cycleId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/cycles/pay' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"cycleId" : "<cycleId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"checkout": {
"action": "<action>",
"fields": {},
"method": "GET"
},
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
}
}Errors
400 X_INPUT_INVALID 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/invoices/download
Firm member Permission: invoicing:read MCP tool: downloadInvoice
Returns the bytes (base64, with filename, content type and SHA-256) of the PDF or XML of one DIAN electronic invoice of your organization (format "pdf" or "xml"), or of one of its credit notes when creditNoteId is given. Every call is recorded in the audit log. Fails X_INVOICE_FILE_NOT_READY while the document is not issued yet (listMyInvoices shows its status).
Parameters of downloadInvoice Name In Type Required creditNoteIdBody string (uuid)No formatBody "pdf" | "xml"Yes invoiceIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/invoices/download' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"format":"pdf","invoiceId":"<invoiceId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/invoices/download' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"format" : "pdf" ,
"invoiceId" : "<invoiceId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": 0,
"contentBase64": "<contentBase64>",
"contentType": "<contentType>",
"filename": "<filename>",
"format": "pdf",
"number": "<number>",
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/pack-checkouts/start
Firm member Permission: billing:purchase
startPackCheckout
Parameters of startPackCheckout Name In Type Required Idempotency-KeyQuery string ≤ 255Replays the first response for a repeated key. No billingProfileBody objectNo captchaTokenBody string 0–4096No cf-turnstile-responseBody string 0–4096No couponCodeBody string 1–40No h-captcha-responseBody string 0–4096No methodBody object | object | object | objectNo orgIdBody string (uuid)Yes packCodeBody string 1–40Yes payerNameBody string 1–200No payerPhoneBody string 10–15No termsBody objectNo
curl Copy curl -X POST 'https://www.notificado.co/api/pack-checkouts/start' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>","packCode":"<packCode>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/pack-checkouts/start' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>" ,
"packCode" : "<packCode>"
}),
});
const result = await response.json();Example response 200 Copy {
"asyncPaymentUrl": "<asyncPaymentUrl>",
"checkout": {
"action": "<action>",
"fields": {},
"method": "GET"
},
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
},
"transactionId": "<transactionId>"
}Errors
400 X_INPUT_INVALID 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/payment-returns/confirm
Firm member Permission: billing:purchase
confirmPaymentReturn
Parameters of confirmPaymentReturn Name In Type Required orgIdBody string (uuid)Yes transactionIdBody string 1–64Yes
curl Copy curl -X POST 'https://www.notificado.co/api/payment-returns/confirm' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>","transactionId":"<transactionId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/payment-returns/confirm' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>" ,
"transactionId" : "<transactionId>"
}),
});
const result = await response.json();Example response 200 Copy {
"asyncPaymentUrl": "<asyncPaymentUrl>",
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
}
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/payment-sources/register
Firm member Permission: billing:purchase
registerPaymentSource
Parameters of registerPaymentSource Name In Type Required Idempotency-KeyQuery string ≤ 255Replays the first response for a repeated key. No orgIdBody string (uuid)Yes sourceBody object | objectYes termsBody objectYes useForSubscriptionBody booleanNo
curl Copy curl -X POST 'https://www.notificado.co/api/payment-sources/register' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"orgId": "<orgId>",
"source": {
"token": "<token>",
"type": "CARD"
},
"terms": {
"acceptanceToken": "<acceptanceToken>",
"personalDataToken": "<personalDataToken>"
}
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/payment-sources/register' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>" ,
"source" : {
"token" : "<token>" ,
"type" : "CARD"
},
"terms" : {
"acceptanceToken" : "<acceptanceToken>" ,
"personalDataToken" : "<personalDataToken>"
}
}),
});
const result = await response.json();Example response 200 Copy {
"id": "<id>",
"label": "<label>",
"status": "<status>",
"type": "<type>"
}Errors
400 X_INPUT_INVALID 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/payments/refresh
Firm member Permission: billing:purchase
refreshPayment
Parameters of refreshPayment Name In Type Required orgIdBody string (uuid)Yes paymentIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/payments/refresh' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>","paymentId":"<paymentId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/payments/refresh' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>" ,
"paymentId" : "<paymentId>"
}),
});
const result = await response.json();Example response 200 Copy {
"asyncPaymentUrl": "<asyncPaymentUrl>",
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
}
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/plans/change
Firm member Permission: billing:purchase
changePlan
Parameters of changePlan Name In Type Required Idempotency-KeyQuery string ≤ 255Replays the first response for a repeated key. No intervalBody "month" | "year"No orgIdBody string (uuid)Yes planCodeBody string 1–40Yes
curl Copy curl -X POST 'https://www.notificado.co/api/plans/change' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>","planCode":"<planCode>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/plans/change' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>" ,
"planCode" : "<planCode>"
}),
});
const result = await response.json();Example response 200 Copy {
"change": "upgraded",
"checkout": {
"action": "<action>",
"fields": {},
"method": "GET"
},
"effectiveAt": "2026-09-25T15:00:00Z",
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
}
}Errors
400 X_INPUT_INVALID 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/referral-clicks/track
Firm member Permission: affiliate:track-click
trackReferralClick
Parameters of trackReferralClick Name In Type Required codeBody string 1–40Yes landingPathBody string 1–300Yes
curl Copy curl -X POST 'https://www.notificado.co/api/referral-clicks/track' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>","landingPath":"<landingPath>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/referral-clicks/track' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"code" : "<code>" ,
"landingPath" : "<landingPath>"
}),
});
const result = await response.json();Example response 200 Copy {
"outcome": "recorded"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/referral-links/get
Firm member Permission: billing:read MCP tool: getReferralLink
Returns the caller's firm's customer-referral link (https://www.notificado.co/registro?ref=O-XXXXXXXX) and its code, creating the code on first call. A firm that signs up through the link and makes its first payment earns the caller's firm one free month (a free subscription cycle, or 40 credits without a subscription) after a 30-day hold without refund. Needs billing:read in the given orgId.
Parameters of getReferralLink Name In Type Required orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/referral-links/get' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/referral-links/get' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"code": "<code>",
"url": "<url>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/subscribes/invoke
Firm member Permission: billing:purchase
subscribe
Parameters of subscribe Name In Type Required Idempotency-KeyQuery string ≤ 255Replays the first response for a repeated key. No billingProfileBody objectNo collectionBody "auto" | "link"Yes couponCodeBody string 1–40No intervalBody "month" | "year"Yes orgIdBody string (uuid)Yes paymentSourceIdBody string (uuid)No planCodeBody string 1–40Yes
curl Copy curl -X POST 'https://www.notificado.co/api/subscribes/invoke' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"collection": "auto",
"interval": "month",
"orgId": "<orgId>",
"planCode": "<planCode>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/subscribes/invoke' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"collection" : "auto" ,
"interval" : "month" ,
"orgId" : "<orgId>" ,
"planCode" : "<planCode>"
}),
});
const result = await response.json();Example response 200 Copy {
"checkout": {
"action": "<action>",
"fields": {},
"method": "GET"
},
"cycle": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"attempts": -9007199254740991,
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"nextAttemptAt": "2026-09-25T15:00:00Z",
"periodEnd": "2026-09-25T15:00:00Z",
"periodStart": "2026-09-25T15:00:00Z",
"status": "due",
"subscriptionId": "<subscriptionId>"
},
"payment": {
"amountGross": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountIva": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"amountNet": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"approvedAt": "2026-09-25T15:00:00Z",
"createdAt": "2026-09-25T15:00:00Z",
"discount": {
"currency": "<currency>",
"minor": -9007199254740991,
"scale": 0
},
"id": "<id>",
"method": "CARD",
"purpose": "pack",
"reference": "<reference>",
"status": "created",
"statusAt": "2026-09-25T15:00:00Z",
"subjectId": "<subjectId>"
},
"subscription": {
"cancelAtPeriodEnd": true,
"collection": "auto",
"currentPeriodEnd": "2026-09-25T15:00:00Z",
"currentPeriodStart": "2026-09-25T15:00:00Z",
"endedAt": "2026-09-25T15:00:00Z",
"freeCyclesPending": -9007199254740991,
"id": "<id>",
"interval": "month",
"planId": "<planId>",
"status": "trialing"
}
}Errors
400 X_INPUT_INVALID 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID POST /api/subscriptions/cancel
Firm member Permission: billing:purchase
cancelSubscription
Parameters of cancelSubscription Name In Type Required orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/subscriptions/cancel' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/subscriptions/cancel' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"cancelAtPeriodEnd": true,
"collection": "auto",
"currentPeriodEnd": "2026-09-25T15:00:00Z",
"currentPeriodStart": "2026-09-25T15:00:00Z",
"endedAt": "2026-09-25T15:00:00Z",
"freeCyclesPending": -9007199254740991,
"id": "<id>",
"interval": "month",
"planId": "<planId>",
"status": "trialing"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/subscriptions/resume
Firm member Permission: billing:purchase
resumeSubscription
Parameters of resumeSubscription Name In Type Required orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/subscriptions/resume' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/subscriptions/resume' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"cancelAtPeriodEnd": true,
"collection": "auto",
"currentPeriodEnd": "2026-09-25T15:00:00Z",
"currentPeriodStart": "2026-09-25T15:00:00Z",
"endedAt": "2026-09-25T15:00:00Z",
"freeCyclesPending": -9007199254740991,
"id": "<id>",
"interval": "month",
"planId": "<planId>",
"status": "trialing"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID