API REST

Guías de uso

Recetas concretas para los casos más comunes. Si tu caso no está aquí, escríbenos a soporte y lo agregamos.

1 · Exportar pedidos a Google Sheets

Para Google Sheets recomendamos la plantilla Apps Script en lugar de llamar a curl manualmente. Pero si quieres un dump puntual:

curl "https://api.sellerp.com/v1/orders?from=2026-04-01T00:00:00Z&to=2026-04-30T23:59:59Z&limit=100" \
  -H "Authorization: Bearer sellk_..." \
  | jq '.data[] | [.id, .marketplace, .status, .total, .date_closed] | @csv'

2 · Dashboard externo (Retool, Metabase, Looker)

Conecta tu herramienta de BI usando el endpoint REST como source. Ejemplo con curl autenticado para Retool:

retool resource configjson
{
  "baseUrl": "https://api.sellerp.com/v1",
  "headers": {
    "Authorization": "Bearer {{ environment.SELLERP_API_KEY }}"
  },
  "queryParams": {
    "limit": "100"
  }
}

3 · ETL incremental con delta-sync

Patrón recomendado para cargar pedidos a tu data warehouse cada 15 minutos. En cada corrida:

  1. Lee de tu DB el last_updated máximo procesado (default: hace 15 min).
  2. Llama GET /v1/orders?updated_since=<last> con cursor pagination.
  3. UPSERT cada pedido por id en tu warehouse (idempotente).
  4. Guarda el nuevo last_updated max para la siguiente corrida.
etl.ts (esquema)ts
async function syncOrdersIncremental() {
  const lastUpdated = await db.read("orders.last_updated_at") ?? Date.now() - 15 * 60_000;
  let cursor: string | undefined;
  let maxUpdated = lastUpdated;

  do {
    const res = await fetch(`https://api.sellerp.com/v1/orders?updated_since=${new Date(lastUpdated).toISOString()}&limit=100${cursor ? `&cursor=${cursor}` : ""}`, {
      headers: { Authorization: `Bearer ${process.env.SELLERP_API_KEY}` }
    });
    if (!res.ok) throw new Error(`SELLERP error ${res.status}`);
    const { data, pagination } = await res.json();

    for (const order of data) {
      await db.upsert("orders", order);
      const t = new Date(order.last_updated).getTime();
      if (t > maxUpdated) maxUpdated = t;
    }
    cursor = pagination.next_cursor;
  } while (cursor);

  // Margen de 1 minuto para evitar perder updates concurrentes en la siguiente corrida.
  await db.write("orders.last_updated_at", maxUpdated - 60_000);
}

4 · Notificarte por Slack cuando entra una venta grande

Hasta que liberemos webhooks (v1.1, ver roadmap), el patrón es:

  1. Cron cada 5 min con updated_since.
  2. Para cada pedido nuevo con total > threshold, postear a Slack vía incoming webhook.
  3. Guarda los IDs ya notificados (Set en Redis) para evitar duplicados si re-procesas la ventana.