> ## Documentation Index
> Fetch the complete documentation index at: https://developers.tesoria.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Paginación, errores y versiones

> Las reglas que valen para todos los endpoints.

## Paginación

Todas las listas responden igual:

```json theme={null}
{ "data": [ ... ], "has_more": true, "next_cursor": "eyJ2Ij..." }
```

* `limit`: cuántos por página. Default 50, máximo 200.
* `cursor`: el `next_cursor` de la respuesta anterior. Sigue pidiendo hasta que `has_more` sea `false`.

Los filtros son opcionales. Sin filtros recibes todo, paginado. Cada endpoint lista los suyos en su página.

## Formatos

* Días: `YYYY-MM-DD`. Fecha-hora: ISO-8601 con zona, por ejemplo `2026-09-30T13:33:12-06:00`.
* Montos: número con dos decimales, más `currency`.
* Los campos siempre vienen. Si no aplican, vienen en `null` (o `[]` si son listas).
* Los objetos relacionados vienen como referencia corta y siempre con la misma forma: contacto `{ id, name, rfc, external_id }`, cuenta `{ id, name, bank, clabe }`, categoría `{ id, name }`.

## Errores

```json theme={null}
{ "error": { "code": "invalid_parameter", "message": "date_from debe ser YYYY-MM-DD", "details": { "param": "date_from" } } }
```

Usa `code` para decidir qué hacer; `message` es para personas y puede cambiar.

| HTTP | `code` | Qué pasó | Qué hacer |
| - | - | - | - |
| 400 | `invalid_parameter` | Un parámetro tiene mal formato o no existe. `details.param` dice cuál. | Corrige el parámetro. |
| 401 | `unauthorized` | Falta la llave, está mal o fue revocada. | Revisa el header `Authorization`. |
| 403 | `forbidden_scope` | La llave no tiene permiso para ese recurso. | Pide el permiso a [soporte@tesoria.ai](mailto:soporte@tesoria.ai). |
| 404 | `not_found` | El id no existe en tu empresa, o la ruta no existe. | Revisa el id o la ruta. |
| 429 | `rate_limited` | Más de 600 peticiones por minuto. | Espera lo que diga `Retry-After`. |
| 500 | `internal_error` | Falla de nuestro lado. | Reintenta con espera creciente. Si sigue, escribe a [soporte@tesoria.ai](mailto:soporte@tesoria.ai). |

## Versiones

Las URLs no llevan versión y no cambian: `https://api.tesoria.ai/transactions` es y seguirá siendo la misma.

* **Solo agregamos:** campos, filtros y endpoints nuevos. Tu integración debe ignorar los campos que no conoce.
* **Nunca cambiamos sin avisar:** quitar o renombrar campos, cambiar su tipo o el significado de un estado. Si algún día hace falta, lo pedirás con el header opcional `Tesoria-Version`; si no lo mandas, conservas el comportamiento de siempre.

| Entorno | URL |
| - | - |
| Producción | `https://api.tesoria.ai` |
| Pruebas (próximamente) | `https://api.sandbox.tesoria.ai` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.