Skip to main content

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.
Page-number pagination is used by a single case’s timeline, 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.
Defendants are addressed by their internal 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 municipal matches JUZGADO 001 CIVIL MUNICIPAL DE BOGOTÁ.
  • Enums (status, priority, since_mode, granularity) must match exactly; an unknown value returns 400 invalid_param.
  • Booleans (has_actions) take true or false.
  • Dates are ISO 8601 (2026-08-01 or 2026-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 200 with an empty data, never a 404.
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

Follow 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.
Use 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.