# Convenciones de la API

> Cómo se ven los listados, cómo se pagina con cursor y qué campos comparten todos los objetos de la API de Lane.

Tres reglas que valen para toda la API. Sabiéndolas, el resto de la referencia se lee solo.

## 1. La URL base

**Base**
```text
https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api
```

Todos los recursos cuelgan de `/v1`. No hay una URL distinta para sandbox: el entorno lo decide [la llave](https://lane.money/docs/autenticacion).

## 2. Los listados

Un listado siempre devuelve un sobre con `object: "list"` y los resultados en `data`. Los que paginan traen además `has_more` y `next_cursor`.

**Sobre de listado**
```json
{
  "object": "list",
  "has_more": true,
  "next_cursor": "2026-09-06T18:22:41.000Z",
  "data": [ … ]
}
```

**Parámetros comunes**

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `limit` | entero | no | Cuántos traer. Por defecto 25, máximo 100. |
| `starting_after` | cursor | no | El `next_cursor` de la página anterior. |

Para pedir la página siguiente, pasa el `next_cursor` tal cual en `starting_after`. Cuando `has_more` es `false`, terminaste.

**Recorrer todas las páginas**

```js
async function* todosLosCobros() {
  let cursor = null;

  while (true) {
    const url = new URL("https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payments");
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("starting_after", cursor);

    const page = await fetch(url, {
      headers: { Authorization: `Bearer ${process.env.LANE_SECRET_KEY}` },
    }).then((r) => r.json());

    yield* page.data;

    if (!page.has_more) return;
    cursor = page.next_cursor;
  }
}
```

> **Nota: No todos los listados paginan.** Cobros, suscripciones y disputas usan cursor. Instrumentos y comercios devuelven todo de una (hasta 100) y no traen `next_cursor`; clientes trae `has_more` pero no cursor.

## 3. Los identificadores

Todos los identificadores de Lane son UUID. Los que empiezan por `provider_` son del procesador y sirven para conciliar con un extracto; no los uses como clave en tu base.

## Orden y fechas

Los listados vienen del más nuevo al más viejo. Todas las fechas son ISO 8601 en UTC. Colombia es UTC−5 todo el año: un cobro de las 8 de la noche aparece como la 1 de la mañana del día siguiente.
