Skip to content

API reference

Credits, payments and invoicing

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

Every example assumes a signed-in session; how to get one is in Authentication

checkoutTerms

GET/_x/query/checkout-terms

Firm memberPermission: billing:purchase

checkoutTerms

Parameters of checkoutTerms
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/checkout-terms?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

creditsBalance

GET/_x/query/credits-balance

Firm memberPermission: billing:readMCP 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
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/credits-balance?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

ledgerList

GET/_x/query/ledger-list

Firm memberPermission: billing:read

ledgerList

Parameters of ledgerList
NameInTypeRequired
limitQueryinteger 1–500No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/ledger-list?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

listMyInvoices

GET/_x/query/list-my-invoices

Firm memberPermission: invoicing:readMCP 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
NameInTypeRequired
limitQueryinteger 1–200No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/list-my-invoices?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

listMyPayments

GET/_x/query/list-my-payments

Firm memberPermission: payment:read

listMyPayments

Parameters of listMyPayments
NameInTypeRequired
limitQueryinteger 1–200No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/list-my-payments?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

myAffiliate

GET/_x/query/my-affiliate

Firm memberPermission: affiliate:self

myAffiliate

Parameters of myAffiliate
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor 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
  • 403 policy denied

myBillingProfile

GET/_x/query/my-billing-profile

Firm memberPermission: payment:read

myBillingProfile

Parameters of myBillingProfile
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-billing-profile?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

mySubscription

GET/_x/query/my-subscription

Firm memberPermission: payment:read

mySubscription

Parameters of mySubscription
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-subscription?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

nequiSourceStatus

GET/_x/query/nequi-source-status

Firm memberPermission: payment:read

nequiSourceStatus

Parameters of nequiSourceStatus
NameInTypeRequired
orgIdQuerystring (uuid)Yes
sourceIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/nequi-source-status?orgId=<orgId>&sourceId=<sourceId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

packOffers

GET/_x/query/pack-offers

Firm memberPermission: payment:read

packOffers

Parameters of packOffers
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/pack-offers?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

paymentStatus

GET/_x/query/payment-status

Firm memberPermission: payment:read

paymentStatus

Parameters of paymentStatus
NameInTypeRequired
orgIdQuerystring (uuid)Yes
paymentIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/payment-status?orgId=<orgId>&paymentId=<paymentId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

planOffers

GET/_x/query/plan-offers

Firm memberPermission: payment:read

planOffers

Parameters of planOffers
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/plan-offers?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

submitAffiliateKyc

POST/api/affiliate-kycs/submit

Firm memberPermission: affiliate:self

submitAffiliateKyc

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
ivaResponsibleBodyboolean | "on" | "true" | "false" | "off"No
legalEntityBodyboolean | "on" | "true" | "false" | "off"No
payoutDestinationBodystring 4–120Yes
payoutMethodBody"bank" | "nequi" | "daviplata" | "breb"Yes
rutDocumentIdBodystring (uuid)Yes
curl
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
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
{
  "kycId": "<kycId>",
  "status": "pending",
  "submittedAt": "2026-09-25T15:00:00Z"
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID

downloadAffiliateSupportDocument

POST/api/affiliate-support-documents/download

Firm memberPermission: affiliate:self

downloadAffiliateSupportDocument

Parameters of downloadAffiliateSupportDocument
NameInTypeRequired
formatBody"pdf" | "xml"No
payoutIdBodystring (uuid)Yes
curl
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
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
{
  "contentBase64": "<contentBase64>",
  "contentType": "<contentType>",
  "filename": "<filename>",
  "sha256": "<sha256>"
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID

applyAffiliate

POST/api/affiliates/apply

Firm memberPermission: affiliate:self

applyAffiliate

Parameters of applyAffiliate
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 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/affiliates/apply' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"termsVersion":"<termsVersion>"}'
TypeScript
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
{
  "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

requestApproval

POST/api/approvals/request

Firm memberPermission: billing:grantMCP 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
NameInTypeRequired
creditsBodyinteger -100000–100000Yes
invoiceRefBodystring 1–120No
kindBody"credits.grant" | "credits.adjust"Yes
orgIdBodystring (uuid)Yes
packageCodeBodystring 1–40No
reasonBodystring 1–1000Yes
validDaysBodyinteger 1–3650No
curl
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
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
{
  "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

saveBillingProfile

POST/api/billing-profiles/save

Firm memberPermission: billing:purchase

saveBillingProfile

Parameters of saveBillingProfile
NameInTypeRequired
addressBodystring 1–200Yes
cityCodeBodystring 5–5Yes
docNumberBodystring 3–20Yes
docTypeBody"CC" | "NIT" | "CE" | "PP"Yes
dvBody"" | string 1–1 | nullYes
emailBodystring (email) ≤ 254Yes
fiscalResponsibilitiesBodyarray of string 1–12 | "" | string 1–200Yes
legalNameBodystring 1–200Yes
orgIdBodystring (uuid)Yes
returnToBodystring 1–240No
taxRegimeBody"responsable_iva" | "no_responsable_iva" | "simple"Yes
curl
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
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
{
  "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

previewCoupon

POST/api/coupons/preview

Firm memberPermission: billing:read

previewCoupon

Parameters of previewCoupon
NameInTypeRequired
codeBodystring 1–40Yes
intervalBody"month" | "year"No
kindBody"pack" | "plan"Yes
orgIdBodystring (uuid)Yes
subjectCodeBodystring 1–40Yes
curl
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
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
{
  "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

adjustCredits

POST/api/credits/adjust

Firm memberPermission: billing:grant

adjustCredits

Parameters of adjustCredits
NameInTypeRequired
deltaBodyinteger -100000–100000Yes
orgIdBodystring (uuid)Yes
reasonBodystring 1–120Yes
curl
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
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
{
  "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

grantCredits

POST/api/credits/grant

Firm memberPermission: billing:grant

grantCredits

Parameters of grantCredits
NameInTypeRequired
creditsBodyinteger -9007199254740991–9007199254740991 | string 0–12Yes
invoiceRefBodystring 1–120Yes
orgIdBodystring 1–64Yes
packageCodeBodystring 0–40No
validDaysBodyinteger -9007199254740991–9007199254740991 | string 0–12No
curl
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
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
{
  "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

payCycle

POST/api/cycles/pay

Firm memberPermission: billing:purchase

payCycle

Parameters of payCycle
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 255Replays the first response for a repeated key.No
cycleIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
overageBodybooleanNo
curl
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
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
{
  "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

downloadInvoice

POST/api/invoices/download

Firm memberPermission: invoicing:readMCP 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
NameInTypeRequired
creditNoteIdBodystring (uuid)No
formatBody"pdf" | "xml"Yes
invoiceIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

startPackCheckout

POST/api/pack-checkouts/start

Firm memberPermission: billing:purchase

startPackCheckout

Parameters of startPackCheckout
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 255Replays the first response for a repeated key.No
billingProfileBodyobjectNo
captchaTokenBodystring 0–4096No
cf-turnstile-responseBodystring 0–4096No
couponCodeBodystring 1–40No
h-captcha-responseBodystring 0–4096No
methodBodyobject | object | object | objectNo
orgIdBodystring (uuid)Yes
packCodeBodystring 1–40Yes
payerNameBodystring 1–200No
payerPhoneBodystring 10–15No
termsBodyobjectNo
curl
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
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
{
  "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

confirmPaymentReturn

POST/api/payment-returns/confirm

Firm memberPermission: billing:purchase

confirmPaymentReturn

Parameters of confirmPaymentReturn
NameInTypeRequired
orgIdBodystring (uuid)Yes
transactionIdBodystring 1–64Yes
curl
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
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
{
  "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

registerPaymentSource

POST/api/payment-sources/register

Firm memberPermission: billing:purchase

registerPaymentSource

Parameters of registerPaymentSource
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 255Replays the first response for a repeated key.No
orgIdBodystring (uuid)Yes
sourceBodyobject | objectYes
termsBodyobjectYes
useForSubscriptionBodybooleanNo
curl
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
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
{
  "id": "<id>",
  "label": "<label>",
  "status": "<status>",
  "type": "<type>"
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID

refreshPayment

POST/api/payments/refresh

Firm memberPermission: billing:purchase

refreshPayment

Parameters of refreshPayment
NameInTypeRequired
orgIdBodystring (uuid)Yes
paymentIdBodystring (uuid)Yes
curl
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
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
{
  "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

changePlan

POST/api/plans/change

Firm memberPermission: billing:purchase

changePlan

Parameters of changePlan
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 255Replays the first response for a repeated key.No
intervalBody"month" | "year"No
orgIdBodystring (uuid)Yes
planCodeBodystring 1–40Yes
curl
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
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
{
  "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

trackReferralClick

POST/api/referral-clicks/track

Firm memberPermission: affiliate:track-click

trackReferralClick

Parameters of trackReferralClick
NameInTypeRequired
codeBodystring 1–40Yes
landingPathBodystring 1–300Yes
curl
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
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
{
  "outcome": "recorded"
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID

subscribe

POST/api/subscribes/invoke

Firm memberPermission: billing:purchase

subscribe

Parameters of subscribe
NameInTypeRequired
Idempotency-KeyQuerystring ≤ 255Replays the first response for a repeated key.No
billingProfileBodyobjectNo
collectionBody"auto" | "link"Yes
couponCodeBodystring 1–40No
intervalBody"month" | "year"Yes
orgIdBodystring (uuid)Yes
paymentSourceIdBodystring (uuid)No
planCodeBodystring 1–40Yes
curl
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
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
{
  "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

cancelSubscription

POST/api/subscriptions/cancel

Firm memberPermission: billing:purchase

cancelSubscription

Parameters of cancelSubscription
NameInTypeRequired
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

resumeSubscription

POST/api/subscriptions/resume

Firm memberPermission: billing:purchase

resumeSubscription

Parameters of resumeSubscription
NameInTypeRequired
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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