Skip to content

Credits, payments and invoicing

28 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

checkoutPayer

GET/_x/query/checkout-payer

Firm memberPermission: billing:purchase

checkoutPayer

Parameters of checkoutPayer
NameInTypeRequired
orgIdQuerystring (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/checkout-payer?orgId=<orgId>' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/checkout-payer?orgId=<orgId>', {
  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

checkoutTerms

GET/_x/query/checkout-terms

Firm memberPermission: billing:purchase

checkoutTerms

Parameters of checkoutTerms
NameInTypeRequired
orgIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

creditsBalance

GET/v1/credits-balance

Firm memberPermission: billing:read/v1 · bearer tokenMCP tool: creditsBalance

Credits left: one per recipient, used on send. mode free = trial only: never tell the lawyer to buy.

Parameters of creditsBalance
NameInTypeRequired
orgIdQuerystring (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/v1/credits-balance?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/credits-balance?orgId=<orgId>', {
  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

ledgerList

GET/v1/ledger-list

Firm memberPermission: billing:read/v1 · bearer tokenMCP tool: ledgerList

The credit statement: grants, consumes, expiries and corrections, newest first.

Parameters of ledgerList
NameInTypeRequired
cursorQuerystring 1–64No
limitQueryinteger 1–501No
orgIdQuerystring (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/v1/ledger-list?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/ledger-list?orgId=<orgId>', {
  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

listMyInvoices

GET/v1/list-my-invoices

Firm memberPermission: invoicing:read/v1 · bearer tokenMCP tool: listMyInvoices

The firm's DIAN invoices, newest first, with status and amounts (COP minor units).

Parameters of listMyInvoices
NameInTypeRequired
limitQueryinteger 1–200No
orgIdQuerystring (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/v1/list-my-invoices?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
const response = await fetch('https://www.notificado.co/v1/list-my-invoices?orgId=<orgId>', {
  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

listMyPayments

GET/_x/query/list-my-payments

Firm memberPermission: payment:read

listMyPayments

Parameters of listMyPayments
NameInTypeRequired
limitQueryinteger 1–200No
orgIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

myBillingProfile

GET/_x/query/my-billing-profile

Firm memberPermission: payment:read

myBillingProfile

Parameters of myBillingProfile
NameInTypeRequired
orgIdQuerystring (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-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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

mySubscription

GET/_x/query/my-subscription

Firm memberPermission: payment:read

mySubscription

Parameters of mySubscription
NameInTypeRequired
orgIdQuerystring (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-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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

nequiSourceStatus

GET/_x/query/nequi-source-status

Firm memberPermission: payment:read

nequiSourceStatus

Parameters of nequiSourceStatus
NameInTypeRequired
orgIdQuerystring (uuid)Yes
sourceIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

packOffers

GET/_x/query/pack-offers

Firm memberPermission: payment:read

packOffers

Parameters of packOffers
NameInTypeRequired
orgIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

paymentStatus

GET/_x/query/payment-status

Firm memberPermission: payment:read

paymentStatus

Parameters of paymentStatus
NameInTypeRequired
orgIdQuerystring (uuid)Yes
paymentIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

planOffers

GET/_x/query/plan-offers

Firm memberPermission: payment:read

planOffers

Parameters of planOffers
NameInTypeRequired
orgIdQuerystring (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/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
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

cancelSubscription

POST/api/cancel-subscription

Firm memberPermission: billing:purchase

cancelSubscription

Parameters of cancelSubscription
NameInTypeRequired
orgIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/api/cancel-subscription' \
  -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/cancel-subscription', {
  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
  • 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

changePlan

POST/api/change-plan

Firm memberPermission: billing:purchaseIdempotency-Key

changePlan

Parameters of changePlan
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 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/change-plan' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>","planCode":"<planCode>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/change-plan', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), 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
  • 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

confirmPaymentReturn

POST/api/confirm-payment-return

Firm memberPermission: billing:purchase

confirmPaymentReturn

Parameters of confirmPaymentReturn
NameInTypeRequired
orgIdBodystring (uuid)Yes
transactionIdBodystring 1–64Yes
curl
curl -X POST 'https://www.notificado.co/api/confirm-payment-return' \
  -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/confirm-payment-return', {
  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
  • 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

downloadInvoice

POST/v1/download-invoice

Firm memberPermission: invoicing:read/v1 · bearer tokenMCP tool: downloadInvoice

An invoice or credit note as pdf or xml bytes (base64). Recorded.

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/v1/download-invoice' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"format":"pdf","invoiceId":"<invoiceId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/download-invoice', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
  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
  • 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

lookupTaxId

POST/api/lookup-tax-id

Firm memberPermission: billing:purchase

lookupTaxId

Parameters of lookupTaxId
NameInTypeRequired
dvBodystringNo
numberBodystring 5–10Yes
orgIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/api/lookup-tax-id' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"number":"<number>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/lookup-tax-id', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "number": "<number>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Example response
200
{
  "chamber": "<chamber>",
  "dvMatches": true,
  "found": true,
  "name": "<name>",
  "source": "rues-open-data",
  "status": "active",
  "statusText": "<statusText>",
  "updatedAt": "<updatedAt>"
}

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

payCycle

POST/api/pay-cycle

Firm memberPermission: billing:purchaseIdempotency-Key

payCycle

Parameters of payCycle
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 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/pay-cycle' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"cycleId":"<cycleId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/pay-cycle', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), 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
  • 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

previewCoupon

POST/api/preview-coupon

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/preview-coupon' \
  -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/preview-coupon', {
  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
  • 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

refreshPayment

POST/api/refresh-payment

Firm memberPermission: billing:purchase

refreshPayment

Parameters of refreshPayment
NameInTypeRequired
orgIdBodystring (uuid)Yes
paymentIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/api/refresh-payment' \
  -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/refresh-payment', {
  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
  • 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

registerPaymentSource

POST/api/register-payment-source

Firm memberPermission: billing:purchaseIdempotency-Key

registerPaymentSource

Parameters of registerPaymentSource
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 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/register-payment-source' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -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/register-payment-source', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), 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
  • 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

resumeSubscription

POST/api/resume-subscription

Firm memberPermission: billing:purchase

resumeSubscription

Parameters of resumeSubscription
NameInTypeRequired
orgIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/api/resume-subscription' \
  -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/resume-subscription', {
  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
  • 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

saveBillingProfile

POST/api/save-billing-profile

Firm memberPermission: billing:purchase

saveBillingProfile

Parameters of saveBillingProfile
NameInTypeRequired
aceptoEstadoInactivoBodyboolean | "" | string 1–8No
acknowledgeInactiveRegistryBodybooleanNo
addressBody"" | string 1–200No
cityCodeBody"" | string 1–120No
docNumberBody"" | string 3–20No
docTypeBody"" | "CC" | "NIT" | "CE" | "PP"No
dvBody"" | string 1–1 | nullNo
emailBody"" | string (email) ≤ 254No
familyNamesBody"" | string 1–100 | nullNo
fiscalResponsibilitiesBodyarray of string 1–12 | "" | string 1–200No
givenNamesBody"" | string 1–100 | nullNo
invoiceToBody"" | "self" | "final_consumer"No
legalNameBody"" | string 1–200No
orgIdBodystring (uuid)Yes
phoneBody"" | string 1–40 | nullNo
returnToBodystring 1–240No
taxRegimeBody"" | "responsable_iva" | "no_responsable_iva"No
curl
curl -X POST 'https://www.notificado.co/api/save-billing-profile' \
  -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/save-billing-profile', {
  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
{
  "address": "<address>",
  "cityCode": "<cityCode>",
  "docNumber": "<docNumber>",
  "docType": "CC",
  "dv": "<dv>",
  "email": "<email>",
  "fiscalResponsibilities": [
    "<fiscalResponsibilities>"
  ],
  "invoiceTo": "self",
  "legalName": "<legalName>",
  "taxRegime": "responsable_iva",
  "updatedAt": "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

startPackCheckout

POST/api/start-pack-checkout

Firm memberPermission: billing:purchaseIdempotency-Key

startPackCheckout

Parameters of startPackCheckout
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
acknowledgeInactiveRegistryBodybooleanNo
billingProfileBodyobjectNo
captchaTokenBodystring 0–4096No
cf-turnstile-responseBodystring 0–4096No
couponCodeBodystring 1–40No
h-captcha-responseBodystring 0–4096No
invoiceToBody"self" | "final_consumer"No
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/start-pack-checkout' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>","packCode":"<packCode>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/start-pack-checkout', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), 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
  • 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

submitPackPurchase

POST/api/submit-pack-purchase

Firm memberPermission: billing:purchaseIdempotency-Key

submitPackPurchase

Parameters of submitPackPurchase
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
aceptaDatosBodyboolean | "" | string 1–8No
aceptaTerminosBodyboolean | "" | string 1–8No
aceptoEstadoInactivoBodyboolean | "" | string 1–8No
addressBody"" | string 1–200No
captchaTokenBodystring 0–4096No
celularBody"" | string 1–24No
cf-turnstile-responseBodystring 0–4096No
cityCodeBody"" | string 1–120No
cuponBody"" | string 1–80No
docNumberBody"" | string 3–20No
docTypeBody"" | "CC" | "NIT" | "CE" | "PP"No
dvBody"" | string 1–1 | nullNo
emailBody"" | string (email) ≤ 254No
familyNamesBody"" | string 1–100 | nullNo
fiscalResponsibilitiesBodyarray of string 1–12 | "" | string 1–200No
givenNamesBody"" | string 1–100 | nullNo
h-captcha-responseBodystring 0–4096No
intentBody"" | string 1–40No
invoiceToBody"" | "self" | "final_consumer"No
legalNameBody"" | string 1–200No
metodoBody"" | string 1–40No
nonceBodystring (uuid)No
orgIdBodystring (uuid)Yes
packBody"" | string 1–40No
phoneBody"" | string 1–40 | nullNo
taxRegimeBody"" | "responsable_iva" | "no_responsable_iva"No
curl
curl -X POST 'https://www.notificado.co/api/submit-pack-purchase' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/submit-pack-purchase', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Example response
200
{
  "location": "<location>",
  "paymentId": "<paymentId>"
}

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

submitSubscription

POST/api/submit-subscription

Firm memberPermission: billing:purchaseIdempotency-Key

submitSubscription

Parameters of submitSubscription
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
aceptoEstadoInactivoBodyboolean | "" | string 1–8No
addressBody"" | string 1–200No
cityCodeBody"" | string 1–120No
cobroBody"" | string 1–10No
cuponBody"" | string 1–80No
docNumberBody"" | string 3–20No
docTypeBody"" | "CC" | "NIT" | "CE" | "PP"No
dvBody"" | string 1–1 | nullNo
emailBody"" | string (email) ≤ 254No
familyNamesBody"" | string 1–100 | nullNo
fiscalResponsibilitiesBodyarray of string 1–12 | "" | string 1–200No
fuenteBody"" | string 1–40No
givenNamesBody"" | string 1–100 | nullNo
intentBody"" | string 1–40No
intervalBody"" | string 1–10No
invoiceToBody"" | "self" | "final_consumer"No
legalNameBody"" | string 1–200No
orgIdBodystring (uuid)Yes
phoneBody"" | string 1–40 | nullNo
planBody"" | string 1–40No
taxRegimeBody"" | "responsable_iva" | "no_responsable_iva"No
curl
curl -X POST 'https://www.notificado.co/api/submit-subscription' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/submit-subscription', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Example response
200
{
  "location": "<location>",
  "subscriptionId": "<subscriptionId>"
}

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

subscribe

POST/api/subscribe

Firm memberPermission: billing:purchaseIdempotency-Key

subscribe

Parameters of subscribe
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 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/subscribe' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "collection": "auto",
  "interval": "month",
  "orgId": "<orgId>",
  "planCode": "<planCode>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/subscribe', {
  method: 'POST',
  headers: { 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID(), 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
  • 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