Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/checkout-payer
Firm member Permission: billing:purchase
checkoutPayer
Parameters of checkoutPayer Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/checkout-payer?orgId=<orgId>' \
-b cookies.txtTypeScript Copy 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 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/checkout-terms
Firm member Permission: billing:purchase
checkoutTerms
Parameters of checkoutTerms Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/credits-balance
Firm member Permission: billing:read /v1 · bearer token MCP tool: creditsBalance
Credits left: one per recipient, used on send. mode free = trial only: never tell the lawyer to buy.
Parameters of creditsBalance Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/credits-balance?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy 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 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/ledger-list
Firm member Permission: billing:read /v1 · bearer token MCP tool: ledgerList
The credit statement: grants, consumes, expiries and corrections, newest first.
Parameters of ledgerList Name In Type Required cursorQuery string 1–64No limitQuery integer 1–501No orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/ledger-list?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy 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 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/list-my-invoices
Firm member Permission: invoicing:read /v1 · bearer token MCP tool: listMyInvoices
The firm's DIAN invoices, newest first, with status and amounts (COP minor units).
Parameters of listMyInvoices Name In Type Required limitQuery integer 1–200No orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/list-my-invoices?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy 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 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/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–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/my-billing-profile
Firm member Permission: payment:read
myBillingProfile
Parameters of myBillingProfile Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/my-subscription
Firm member Permission: payment:read
mySubscription
Parameters of mySubscription Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/my-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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/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–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/pack-offers
Firm member Permission: payment:read
packOffers
Parameters of packOffers Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/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–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/plan-offers
Firm member Permission: payment:read
planOffers
Parameters of planOffers Name In Type Required orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/cancel-subscription
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/cancel-subscription' \
-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/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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/change-plan
Firm member Permission: billing:purchase Idempotency-Key
changePlan
Parameters of changePlan Name In Type Required Idempotency-KeyHeader 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/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 Copy 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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/confirm-payment-return
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/confirm-payment-return' \
-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/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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/download-invoice
Firm member Permission: invoicing:read /v1 · bearer token MCP tool: downloadInvoice
An invoice or credit note as pdf or xml bytes (base64). Recorded.
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/v1/download-invoice' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"format":"pdf","invoiceId":"<invoiceId>","orgId":"<orgId>"}' TypeScript Copy 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 Copy {
"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 POST /api/get-referral-link
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/get-referral-link' \
-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/get-referral-link' , {
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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/lookup-tax-id
Firm member Permission: billing:purchase
lookupTaxId
Parameters of lookupTaxId Name In Type Required dvBody stringNo numberBody string 5–10Yes orgIdBody string (uuid)Yes
curl Copy 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 Copy 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 Copy {
"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 POST /api/pay-cycle
Firm member Permission: billing:purchase Idempotency-Key
payCycle
Parameters of payCycle Name In Type Required Idempotency-KeyHeader 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/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 Copy 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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/preview-coupon
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/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 Copy 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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/refresh-payment
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/refresh-payment' \
-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/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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/register-payment-source
Firm member Permission: billing:purchase Idempotency-Key
registerPaymentSource
Parameters of registerPaymentSource Name In Type Required Idempotency-KeyHeader 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/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 Copy 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 Copy {
"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 POST /api/resume-subscription
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/resume-subscription' \
-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/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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/save-billing-profile
Firm member Permission: billing:purchase
saveBillingProfile
Parameters of saveBillingProfile Name In Type Required aceptoEstadoInactivoBody boolean | "" | string 1–8No acknowledgeInactiveRegistryBody booleanNo 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 fiscalResponsibilitiesBody array of string 1–12 | "" | string 1–200No givenNamesBody "" | string 1–100 | nullNo invoiceToBody "" | "self" | "final_consumer"No legalNameBody "" | string 1–200No orgIdBody string (uuid)Yes phoneBody "" | string 1–40 | nullNo returnToBody string 1–240No taxRegimeBody "" | "responsable_iva" | "no_responsable_iva"No
curl Copy 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 Copy 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 Copy {
"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 POST /api/start-pack-checkout
Firm member Permission: billing:purchase Idempotency-Key
startPackCheckout
Parameters of startPackCheckout Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No acknowledgeInactiveRegistryBody booleanNo billingProfileBody objectNo captchaTokenBody string 0–4096No cf-turnstile-responseBody string 0–4096No couponCodeBody string 1–40No h-captcha-responseBody string 0–4096No invoiceToBody "self" | "final_consumer"No 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/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 Copy 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 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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/submit-pack-purchase
Firm member Permission: billing:purchase Idempotency-Key
submitPackPurchase
Parameters of submitPackPurchase Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No aceptaDatosBody boolean | "" | string 1–8No aceptaTerminosBody boolean | "" | string 1–8No aceptoEstadoInactivoBody boolean | "" | string 1–8No addressBody "" | string 1–200No captchaTokenBody string 0–4096No celularBody "" | string 1–24No cf-turnstile-responseBody string 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 fiscalResponsibilitiesBody array of string 1–12 | "" | string 1–200No givenNamesBody "" | string 1–100 | nullNo h-captcha-responseBody string 0–4096No intentBody "" | string 1–40No invoiceToBody "" | "self" | "final_consumer"No legalNameBody "" | string 1–200No metodoBody "" | string 1–40No nonceBody string (uuid)No orgIdBody string (uuid)Yes packBody "" | string 1–40No phoneBody "" | string 1–40 | nullNo taxRegimeBody "" | "responsable_iva" | "no_responsable_iva"No
curl Copy 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 Copy 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 Copy {
"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 POST /api/submit-subscription
Firm member Permission: billing:purchase Idempotency-Key
submitSubscription
Parameters of submitSubscription Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No aceptoEstadoInactivoBody boolean | "" | 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 fiscalResponsibilitiesBody array 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 orgIdBody string (uuid)Yes phoneBody "" | string 1–40 | nullNo planBody "" | string 1–40No taxRegimeBody "" | "responsable_iva" | "no_responsable_iva"No
curl Copy 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 Copy 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 Copy {
"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 POST /api/subscribe
Firm member Permission: billing:purchase Idempotency-Key
subscribe
Parameters of subscribe Name In Type Required Idempotency-KeyHeader 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/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 Copy 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 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 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