Two pagination styles
Cursor pagination is used by the large lists:GET /v1/processes,
GET /v1/actions and
GET /v1/defendants.
Cursors are opaque: pass them back unchanged and don’t build them yourself.
They are meant to be used within one pass over the list; to start over, drop
the cursor and request the first page again.
GET /v1/processes/{process_id}/actions:
page (from 1) and page_size (default 25, max 100), with the total
count in the response.
Paging through a whole portfolio to build a file is the slow way. For the
complete dataset, use Exports: one request, one CSV or
JSONL download, up to 100,000 rows.
Addressing a case
Wherever a process appears in a path, both forms work and resolve to the same case:- the internal
id(a UUID) returned by the list endpoints, or - the registration number (radicado), e.g.
11001400300120240012300.
id from
GET /v1/defendants (also exposed as
defendant_uuid on a process’s detail). The defendant_id field on processes
and actuaciones is the identification number (cédula or NIT), not that UUID.
How filters match
- Text filters (
q,defendant,defendant_id,office,name,content) are partial and case-insensitive:office=civil municipalmatchesJUZGADO 001 CIVIL MUNICIPAL DE BOGOTÁ. - Enums (
status,priority,since_mode,granularity) must match exactly; an unknown value returns400 invalid_param. - Booleans (
has_actions) taketrueorfalse. - Dates are ISO 8601 (
2026-08-01or2026-08-01T00:00:00Z). An unparseable date is ignored rather than rejected, so double-check the format if a date filter seems to have no effect. - Filters combine with AND. A list with no matches is a
200with an emptydata, never a404.
q always matches the registration number (radicado): use it on processes
and on the actuaciones feed. On defendants, q matches the identification
number and name matches the name.
Which date is which
The portfolio carries several dates; picking the right one matters for reporting and for syncing.
On the actuaciones feed,
since_mode picks which of the two actuación dates
since / until and the ordering use:
discovered(default):action_created_at.judicial:registration_date.
Default ordering
Recipe: incremental sync of actuaciones
To mirror the portfolio’s activity into your own system, pull the feed by discovery time and keep a watermark:1
Remember when you start
Capture
now before the first request. This will be the next run’s
since, so anything recorded while you page is picked up next time.2
Page through everything recorded since the last watermark
next_cursor until has_more is false. Each row carries
process_id and registration_number, so you can attach it to the case
you already hold, or fetch the case with
GET /v1/processes/{process_id} if it
is new to you.3
Advance the watermark
Store the
now you captured as the next since. Because since is
inclusive, re-running with the same watermark is safe: you may see the
boundary rows again, and their id lets you de-duplicate.since_mode=judicial instead when the question is “which actuaciones
happened in court during a period”, for example a weekly report of filings
dated within that week.
Next: Rate limits
How quotas are bucketed and reported on every response.