rangee
Desarrolladores

Documentación de la API

Lea, busque, cree y modifique sus filas, dispare sus automatizaciones, reciba los cambios por webhook y gestione el esquema de sus bases. Con las palabras de la aplicación: workspace, base, tabla, campo, vista, fila, automatización.

URL basehttps://api.rangee.io/v1REST · JSONTokens personalesBeta
Durante la betaLa API /v1 está abierta a los miembros de la beta. Los tokens se crean en Ajustes › Seguridad › Tokens de API, y cada base tiene su probador de API en el menú de la base › API. La elección de las bases y de una caducidad en Ajustes, el disparador «Llamada a la API» en el editor de automatizaciones y la escritura de un adjunto por URL llegan con las próximas oleadas.

Empezar en 5 minutos

1. Cree un token en Ajustes › Seguridad › Tokens de API. Dele un nombre y elija sus permisos (por ejemplo rows:read y rows:write). El token solo se muestra una vez: cópielo.

2. Compruebe que funciona.

Terminal
export RANGEE_TOKEN="pat…"

curl https://api.rangee.io/v1/me \
  -H "Authorization: Bearer $RANGEE_TOKEN"

La respuesta da su identidad, el nombre del token, sus permisos, su alcance y la cuota del mes.

3. Encuentre sus tablas. La respuesta de GET /v1/bases/app… lista las tablas de la base, con sus identificadores.

Terminal
curl https://api.rangee.io/v1/bases \
  -H "Authorization: Bearer $RANGEE_TOKEN"

curl https://api.rangee.io/v1/bases/app… \
  -H "Authorization: Bearer $RANGEE_TOKEN"

4. Lea sus filas, con claves por nombre de campo para empezar.

Terminal
curl "https://api.rangee.io/v1/tables/tbl…/rows?limit=10&fieldKey=name" \
  -H "Authorization: Bearer $RANGEE_TOKEN"

5. Cree una fila.

Terminal
curl https://api.rangee.io/v1/tables/tbl…/rows \
  -H "Authorization: Bearer $RANGEE_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2e7a-creation-atelier-martin" \
  -d '{
    "rows": [
      { "values": { "Nom": "Atelier Martin", "Statut": "Signé", "Montant": 1250 } }
    ]
  }'

En JavaScript:

JavaScript
const res = await fetch("https://api.rangee.io/v1/tables/tbl…/rows", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.RANGEE_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    rows: [{ values: { Nom: "Atelier Martin", Statut: "Signé", Montant: 1250 } }],
  }),
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code} : ${body.error.message}`);

En Python:

Python
import os, uuid, requests

res = requests.post(
    "https://api.rangee.io/v1/tables/tbl…/rows",
    headers={
        "Authorization": f"Bearer {os.environ['RANGEE_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={"rows": [{"values": {"Nom": "Atelier Martin", "Statut": "Signé", "Montant": 1250}}]},
)
res.raise_for_status()
En producción, prefiera los identificadores de campo (fld…) a los nombres en values: renombrar un campo en la aplicación no romperá nada.

Acceso y tokens

Cada llamada lleva un token personal en la cabecera:

Texto
Authorization: Bearer pat….…

Un token tiene un nombre, unos permisos, un alcance y, si lo desea, una fecha de caducidad.

Hereda el rol de su creador en cada base. El token de una persona con acceso de solo lectura nunca escribe, ni siquiera con el permiso rows:write.

Se corta de inmediato si usted lo revoca, o si su creador es retirado del workspace o desactivado.

Permisos

PermisoDa acceso a
rows:readLeer y buscar las filas, su historial y sus comentarios; descargar los adjuntos
rows:writeCrear, modificar, eliminar y hacer upsert de filas; escribir comentarios; subir adjuntos
schema:readLeer las bases, tablas, campos y vistas
schema:writeCrear y modificar tablas, campos y vistas; enviarlos a la papelera
automations:readListar las automatizaciones, sus variables y sus ejecuciones
automations:runDisparar una automatización y seguir la ejecución
webhooks:manageCrear, listar, modificar y eliminar webhooks

Alcance

Un token cubre o bien todas las bases del workspace a las que su creador tiene acceso, o bien una lista de bases elegida. Un token nunca abarca dos workspaces.

Un recurso fuera del alcance del token responde 404, exactamente como un recurso que no existe.

Identidad

Texto
GET /v1/me

Devuelve la persona, el nombre del token, sus permisos, su alcance y la cuota de llamadas del mes.

Vocabulario e identificadores

TérminoSignificadoIdentificador
WorkspaceEl espacio de la organización, que contiene las baseswsp…
BaseUn conjunto de tablas relacionadasapp…
TablaUna lista de filas con el mismo esquematbl…
CampoUna columna con tipo de una tablafld…
VistaUna presentación guardada de una tabla (filtros, ordenaciones, campos visibles)viw…
FilaUn elemento de una tabla; sus valores están en valuesrow…
ValorEl contenido de una fila para un campo—
AutomatizaciónUn disparador y una serie de pasosaut…
EjecuciónUn paso de una automatizaciónrun…
VariableUn dato que una automatización disparada por la API pide al llamarlanombre a elegir
WebhookUna dirección avisada de los cambios de una basewhk…
EventoUn cambio enviado a un webhookevt…
AdjuntoUn archivo subido, colocado en un valoratt…
ComentarioUn mensaje en una filacom…
OpciónUna opción de un campo de selecciónsel…
MiembroUna persona del workspaceusr…
TokenLa clave de acceso de una persona a la APIpat…

Los identificadores son opacos. No los construya ni los analice: solo el identificador completo tiene sentido.

Convenciones

  • Formato. JSON en UTF-8. Fechas y horas en ISO 8601 UTC (2026-11-03T09:30:00.000Z), fechas sin hora en YYYY-MM-DD.
  • Recurso o lista. Un recurso único se devuelve tal cual. Una lista tiene la forma { "data": [...], "nextCursor": "…" | null }.
  • Paginación. Por cursor opaco: limit (de 1 a 1.000, 100 por defecto) y cursor. Un cursor sigue siendo válido 24 horas. Cuando nextCursor vale null, ya lo ha leído todo.
  • Lotes. Una escritura lleva de 1 a 100 filas. Un lote es atómico: pasa todo, o nada.
  • Designación. Una tabla, un campo o una vista se designa por su identificador. Los nombres de campo solo se aceptan como claves de values, en escritura.
  • Claves de lectura. Los valores tienen como clave el identificador del campo. Añada fieldKey=name a cualquier lectura de filas para recibirlos con el nombre como clave.
  • Repetir sin riesgo. Toda petición POST, PATCH, PUT o DELETE acepta una cabecera Idempotency-Key (de 1 a 255 caracteres). La misma llamada repetida en las 24 horas devuelve la misma respuesta sin volver a escribir nada. La misma clave con un cuerpo distinto responde 409 IDEMPOTENCY_CONFLICT.
  • Soporte. Cada respuesta lleva una cabecera Request-Id. Cítela al soporte: basta para encontrar la llamada.

Paginar

JavaScript
async function* allRows(tableId) {
  let cursor = null;
  do {
    const url = new URL(`https://api.rangee.io/v1/tables/${tableId}/rows`);
    url.searchParams.set("limit", "1000");
    if (cursor) url.searchParams.set("cursor", cursor);
    const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.RANGEE_TOKEN}` } });
    const page = await res.json();
    yield* page.data;
    cursor = page.nextCursor;
  } while (cursor);
}

Filas

JSON
{
  "id": "row01JC9…",
  "createdAt": "2026-10-12T08:14:03.000Z",
  "updatedAt": "2026-11-02T17:40:11.000Z",
  "values": {
    "fld01Nom…": "Atelier Martin",
    "fld01Statut…": { "id": "sel…", "name": "Signé" },
    "fld01Montant…": 1250
  }
}

Valores vacíos. Un valor vacío no aparece en values. Para vaciar un valor, escriba null.

OperaciónPetición
Leer una filaGET /v1/tables/{tableId}/rows/{rowId}
ListarGET /v1/tables/{tableId}/rows?viewId&fields&limit&cursor&fieldKey
BuscarPOST /v1/tables/{tableId}/rows/query (detalles)
CrearPOST /v1/tables/{tableId}/rows con { "rows": [{ "values": {…} }] }
ModificarPATCH /v1/tables/{tableId}/rows con { "rows": [{ "id": "row…", "values": {…} }] }, o PATCH /v1/tables/{tableId}/rows/{rowId} con { "values": {…} }
ReemplazarPUT /v1/tables/{tableId}/rows/{rowId} con { "values": {…} }
UpsertPOST /v1/tables/{tableId}/rows/upsert con { "matchOn": ["fld…"], "rows": [...] }
EliminarDELETE /v1/tables/{tableId}/rows?ids=row…,row…, o DELETE /v1/tables/{tableId}/rows/{rowId}
HistorialGET /v1/tables/{tableId}/rows/{rowId}/history

Reglas de escritura

PATCH o PUT. PATCH solo toca los campos enviados. PUT reemplaza la fila: los campos ausentes del cuerpo se vacían.

Campos calculados. Rechazan la escritura (422 READ_ONLY_FIELD): fórmula, lookup, rollup, contador, número automático, fechas y autores de creación y de modificación, botón.

Conversión con "coerce": true. Añadida al cuerpo, la opción convierte los textos en números, fechas y casillas, y crea las opciones de selección desconocidas. Sin ella, un valor del tipo equivocado responde 422 INVALID_VALUE.

JSON
{ "coerce": true, "rows": [{ "values": { "fld01Montant…": "1 250,50", "fld01Signé…": "oui" } }] }

Upsert.

  • matchOn lista de 1 a 3 campos, de tipo texto, correo electrónico, número, número automático, URL o teléfono.
  • Cada fila enviada que coincide con exactamente una fila existente la modifica. Si no encuentra ninguna, se crea. Si encuentra varias, la llamada responde 409 UPSERT_AMBIGUOUS.
  • La respuesta distingue las filas creadas (created) de las filas modificadas (updated).
Terminal
curl https://api.rangee.io/v1/tables/tbl…/rows/upsert \
  -H "Authorization: Bearer $RANGEE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "matchOn": ["fld01Email…"],
    "rows": [
      { "values": { "fld01Email…": "camille@atelier-martin.fr", "fld01Nom…": "Camille Durand" } }
    ]
  }'

Eliminación. Una fila eliminada va a la papelera de la base durante 30 días. Se restaura desde la aplicación.

Límite del plan. Una creación más allá del número de filas que permite su plan responde 422 ROW_LIMIT, con el número de filas restantes.

Buscar filas

Texto
POST /v1/tables/{tableId}/rows/query

El cuerpo retoma la forma de los filtros de las vistas de la aplicación:

ClaveFunción
filterUn grupo and u or de condiciones { field, operator, value }, anidable hasta 5 niveles
sort[{ "field": "fld…", "direction": "asc" | "desc" }]
searchTexto buscado en los campos de texto
viewIdParte de los filtros y ordenaciones de una vista
formulaUna fórmula de Rangee que debe ser verdadera
fields, limit, cursor, fieldKeyComo en la lista

filter, search, viewId y formula se combinan con «y».

JSON
{
  "viewId": "viw…",
  "filter": {
    "and": [
      { "field": "fld01Statut…", "operator": "isAnyOf", "value": ["En cours", "À valider"] },
      { "or": [
        { "field": "fld01Montant…", "operator": ">=", "value": 10000 },
        { "field": "fld01Prioritaire…", "operator": "is", "value": true }
      ] }
    ]
  },
  "sort": [{ "field": "fld01Echeance…", "direction": "asc" }],
  "limit": 50
}

Operadores: isEmpty, isNotEmpty, is, isNot, contains, doesNotContain, isAnyOf, isNoneOf, hasAnyOf, hasAllOf, linksTo, =, !=, <, <=, >, >=.

Cada tipo de campo solo acepta una parte de estos operadores. Un operador no aceptado responde 422 INVALID_FILTER indicando el campo en cuestión. Una fórmula demasiado costosa se rechaza antes de ejecutarse (422 QUERY_TOO_EXPENSIVE).

Valores por tipo de campo

TipoEn lecturaEn escritura
Texto, texto largo, texto enriquecido, correo electrónico, URL, teléfonostringstring; el correo electrónico se verifica
Número, monedanumbernumber; con coerce, "12,5" o "12.5"
Porcentajenumber, 0.25 para 25 %igual
Valoracióninteger de 1 al máximo del campoigual
Duracióninteger en segundosigual; con coerce, "1:30:00"
Casillatrue, ausente cuando no está marcadaboolean; con coerce, "oui", "yes", "1"
Fecha"YYYY-MM-DD"igual; con coerce, cualquier fecha ISO
Fecha y horaISO 8601 UTCISO 8601 con zona horaria
Selección única{ "id": "sel…", "name": "Signé" }identificador o nombre de la opción
Selección múltiplelista de { id, name }lista de identificadores o de nombres
Colaborador, colaboradores{ id, email, name }, o una listaidentificador o correo de un miembro del workspace
Adjuntoslista de { id, url, filename, size, type, thumbnails }; url firmada, válida 2 horaslista de { "id" } de un archivo subido
Enlace a filaslista de identificadores de filasigual; cada fila debe existir en la tabla relacionada
Código de barras{ "text", "type"? }igual, o un string
Texto IA{ "state", "value" }solo lectura
Fórmula, lookup, rollup, contador, agregacióntipo del resultadosolo lectura
Número automático, identificador de filainteger / stringsolo lectura
Creación, modificación (fecha y autor)ISO 8601 / { id, email, name }solo lectura
Botón{ "label", "url"? }solo lectura

Automatizaciones

Una automatización se dispara por la API de dos maneras.

Disparador «Llamada a la API».

  • La automatización declara sus variables en el editor. Cada variable tiene un nombre (letras, cifras y _), una etiqueta, un tipo, si es obligatoria o no, un valor por defecto y una descripción.
  • Tipos posibles: text, number, boolean, date, dateTime, email, rowId, rowIds, json.
  • Los pasos leen las variables en trigger.inputs.<nombre>.
  • Una variable de tipo rowId indica su tabla. El servidor comprueba que la fila existe y la carga en trigger.inputs.<nombre>.fields.

Disparador «Botón». Se dispara con un rowId, como un clic en la aplicación.

OperaciónPetición
Listar las automatizaciones de una baseGET /v1/bases/{baseId}/automations
Leer una automatización y sus variablesGET /v1/automations/{automationId}
DispararPOST /v1/automations/{automationId}/runs
Seguir una ejecuciónGET /v1/runs/{runId}
Listar las ejecucionesGET /v1/automations/{automationId}/runs?status&limit&cursor
Terminal
curl https://api.rangee.io/v1/automations/aut…/runs \
  -H "Authorization: Bearer $RANGEE_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: relance-devis-2026-11-03" \
  -d '{
    "inputs": { "client": "row…", "montant": 1250, "relance": true },
    "wait": 10
  }'

Para un disparador «Botón», envíe { "rowId": "row…" } en lugar de inputs.

Reglas

Comprobación antes de ejecutar. Una variable obligatoria ausente, una variable desconocida o un valor del tipo equivocado responde 422 INVALID_INPUTS con la lista de errores. Esta llamada no cuenta como ejecución ni en la cuota del plan.

Espera con wait.

  • Sin wait: respuesta 202, la ejecución se pone en cola (queued).
  • Con wait (de 0 a 30 segundos): el servidor espera el final de la ejecución hasta ese plazo. Responde 200 con el resultado si ha terminado, y si no 202.

Resultado. El paso «Devolver valores» calcula pares de nombre y valor con los datos de la ejecución. Se devuelven en output. Sin este paso, output vale {}.

Estados de una ejecución:

EstadoSignificado
queuedEn cola
runningEn curso
waitingDetenida en un paso «Esperar»
succeededTerminada
failedCon error; la ejecución indica el paso en cuestión y su mensaje
refusedRechazada: cuota del plan alcanzada o automatización desactivada

Solo automatizaciones activas. Solo se ejecutan las automatizaciones publicadas y activas; las demás responden 422 AUTOMATION_DISABLED.

Trazabilidad. La ejecución lleva el nombre del token como origen. Aparece en el historial de ejecuciones y en el de las filas escritas.

Servicios sin cabeceras. El disparador «Webhook recibido» sigue disponible para los servicios que no saben enviar la cabecera Authorization. Su URL secreta acepta las mismas variables declaradas.

Webhooks

Rangee le envía los cambios de una base, sin que tenga que volver a leer los datos: cada entrega contiene las filas afectadas.

OperaciónPetición
CrearPOST /v1/bases/{baseId}/webhooks con { url, events, tableIds?, fieldIds?, includeValues? }
ListarGET /v1/bases/{baseId}/webhooks
Leer, modificar, eliminarGET, PATCH, DELETE /v1/webhooks/{webhookId}
Entregas recientesGET /v1/webhooks/{webhookId}/deliveries
Enviar una pruebaPOST /v1/webhooks/{webhookId}/test

Eventos: row.created, row.updated, row.deleted, field.created, field.updated, field.deleted, table.created, table.updated, table.deleted.

Filtros. tableIds limita el webhook a ciertas tablas. fieldIds limita row.updated a los cambios de esos campos.

Cuerpo de una entrega:

JSON
{
  "id": "evt…",
  "type": "row.updated",
  "createdAt": "2026-11-03T09:30:00.000Z",
  "baseId": "app…",
  "tableId": "tbl…",
  "data": {
    "row": { "id": "row…", "createdAt": "…", "updatedAt": "…", "values": { "fld01Statut…": { "id": "sel…", "name": "Signé" } } },
    "previous": { "values": { "fld01Statut…": { "id": "sel…", "name": "Devis" } } }
  }
}

previous solo contiene los campos cambiados. Con includeValues: false, solo se envían los identificadores.

Verificar la firma

Cada entrega lleva la cabecera:

Texto
Rangee-Signature: t=<horodatage>,v1=<signature>

v1 es el HMAC-SHA256, en hexadecimal, de la cadena "<marca de tiempo>.<cuerpo bruto>", calculado con el secreto del webhook. El secreto solo se muestra una vez, al crear el webhook.

Rechace toda entrega cuya marca de tiempo tenga más de 5 minutos, para evitar que se reproduzca.

Node.js:

JavaScript
import crypto from "node:crypto";

export function verifyRangeeSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(parts.v1 || "");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Python:

Python
import hmac, hashlib, time

def verify_rangee_signature(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = parts.get("t", "")
    if not t.isdigit() or abs(time.time() - int(t)) > 300:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

Calcule la firma sobre el cuerpo bruto recibido, antes de analizar el JSON.

Entrega

  • Al menos una vez, en el orden del registro para una misma fila. Elimine duplicados por el id del evento.
  • Una respuesta 2xx en menos de 10 segundos cuenta como recibida. Responda rápido y procese después.
  • Si no, Rangee reintenta durante 24 horas, con una espera creciente. Tras 24 horas de fallos, el webhook se desactiva y se avisa a los Admins del workspace.
  • Un webhook no caduca: existe hasta que se elimina.
  • Solo direcciones HTTPS, sin direcciones privadas ni locales.
  • 20 webhooks por base como máximo.

Esquema

OperaciónPetición
Listar las basesGET /v1/bases
Leer una base, sus tablas, campos y vistasGET /v1/bases/{baseId}
Crear una tablaPOST /v1/bases/{baseId}/tables
Modificar una tablaPATCH /v1/tables/{tableId}
Crear un campoPOST /v1/tables/{tableId}/fields
Modificar un campoPATCH /v1/fields/{fieldId}
Leer una vista con sus filtros y ordenacionesGET /v1/views/{viewId}
Enviar a la papeleraDELETE /v1/tables/{tableId}, DELETE /v1/fields/{fieldId}

Descripción de un campo. Un campo se describe con { id, name, type, description, readOnly, options }. El contenido de options depende del tipo, y conserva la misma forma en lectura y en escritura.

Nombres de tipos. Retoman los de la aplicación, con «row» en lugar de «record»: multipleRowLinks, rowId. Los disparadores siguen la misma regla: rowCreated, rowUpdated, rowMatches, rowEntersView.

Cambiar de tipo. Un PATCH con un nuevo type cambia el tipo del campo y convierte los valores como lo hace la aplicación.

Eliminar un campo.

  • Hace falta el rol Admin o User. El campo va a la papelera.
  • Un campo usado por una fórmula, una automatización o una interfaz responde 409 FIELD_IN_USE con la lista de sus usos.
  • Añada ?force=true para eliminarlo de todos modos.

Adjuntos y comentarios

OperaciónPetición
Subir un archivoPOST /v1/bases/{baseId}/attachments en multipart/form-data, 50 MB como máximo
Listar los comentarios de una filaGET /v1/tables/{tableId}/rows/{rowId}/comments
Añadir un comentarioPOST /v1/tables/{tableId}/rows/{rowId}/comments
Modificar, eliminar un comentarioPATCH, DELETE /v1/tables/{tableId}/comments/{commentId}

Añadir un adjunto se hace en dos pasos:

  1. Suba el archivo. Recibe { id, filename, size, type }.
  2. Coloque { "id": "att…" } en un valor de adjuntos en la hora siguiente. Un archivo no usado en ese plazo se elimina.
Terminal
curl https://api.rangee.io/v1/bases/app…/attachments \
  -H "Authorization: Bearer $RANGEE_TOKEN" \
  -F "file=@devis-atelier-martin.pdf"

Comentarios. Un comentario menciona a un miembro con @[usr…]. Solo su autor puede modificarlo o eliminarlo.

Errores

Todos los errores tienen la misma forma:

JSON
{
  "error": {
    "code": "INVALID_VALUE",
    "message": "« Montant » attend un nombre",
    "details": { "path": "rows[2].values.fld01Montant…" }
  }
}

Nada se ignora en silencio. Un valor no válido, un campo desconocido, un campo calculado escrito o una variable ausente responden 422, con la ruta exacta del error en details.path.

HTTPCódigos
400BAD_REQUEST: JSON ilegible
401UNAUTHENTICATED: token ausente, no válido, revocado o caducado
403MISSING_SCOPE: al token le falta un permiso; FORBIDDEN: el rol no permite la operación
404NOT_FOUND: no existe, o está fuera del alcance del token
409IDEMPOTENCY_CONFLICT, UPSERT_AMBIGUOUS, FIELD_IN_USE
413PAYLOAD_TOO_LARGE
422INVALID_REQUEST, INVALID_VALUE, UNKNOWN_FIELD, READ_ONLY_FIELD, INVALID_FILTER, INVALID_FORMULA, QUERY_TOO_EXPENSIVE, INVALID_INPUTS, AUTOMATION_DISABLED, ROW_LIMIT
429RATE_LIMITED: ritmo superado, con una cabecera Retry-After; MONTHLY_LIMIT: cuota del plan alcanzada, con la fecha de reinicio
5xxINTERNAL: repetir con la misma Idempotency-Key no tiene riesgo

Qué hacer según el código:

Código¿Repetir?Qué hacer
429 RATE_LIMITEDSíEspere Retry-After y luego repita
5xxSíRepita con la misma Idempotency-Key, espaciando los intentos
401NoHay que rehacer o comprobar el token
403NoAñada el permiso que falta, o compruebe el rol del creador del token
422NoCorrija el elemento indicado por details.path

Límites

ElementoLímite
Ritmo50 peticiones por segundo por base, 200 por token
Llamadas por mes1.500 en Free; sin límite en los planes de pago. Se cuenta por organización; las llamadas rechazadas con 4xx no cuentan
Filas por página1 000
Filas por escritura100
Cuerpo de la petición1 MB; 50 MB para una subida
Espera de una ejecución (wait)30 segundos
Tokens50 activos por persona
Webhooks20 por base

Cada respuesta indica el ritmo que le queda en las cabeceras RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset.

Seguir su uso

Ajustes › Seguridad › Tokens de API lista sus tokens y su último uso. GET /v1/me da la cuota de llamadas del mes de la organización.

Ayuda

Escriba al soporte citando el Request-Id de la llamada en cuestión. Basta para encontrar la petición, su respuesta y su contexto.