Árbol del API · Clientes › customersConnection
Lista de clientes
customersConnection
Tipo
Query
Devuelve
Permiso de la llave
Cliente
Página
20 por omisión · máx. 100
Lista los clientes de la empresa, del modificado hace más tiempo al más reciente. Busca por nombre, RFC, correo o clave, trae sólo los que tienen saldo por cobrar o los modificados desde un momento, y recorre el resultado por páginas con cursores.
Úsala para sincronizar tu catálogo de clientes: la primera vez recorre la
lista completa; después pide sólo lo modificado con updatedAfter y el
updatedAt más reciente que guardaste. Para traer un cliente con sus
órdenes recientes y sus facturas pendientes usa
customer(id:).
updatedAfter sigue los cambios de los datos del cliente. Su saldo, sus
lugares de entrega y sus contactos pueden cambiar sin que cambie updatedAt:
si los guardas, vuelve a pedirlos de vez en cuando.
Llegan todos los clientes de la empresa, también los inactivos. Los importes
de crédito (creditLimit, balance, overdueBalance, availableCredit)
están en la moneda de crédito del cliente, creditCurrency.
customersConnection( first: Int after: String search: String withPendingBalance: Boolean updatedAfter: DateTime ): CustomerConnection
Argumentos
5
| Argumento | Tipo | Descripción |
|---|---|---|
| Paginación | ||
firstInt |
Int | Cuántos clientes devolver desde el inicio o desde |
afterString |
String | Cursor de la página anterior ( |
| Filtros | ||
searchString |
String | Clientes cuyo nombre, RFC, correo o clave empieza con el texto, sin distinguir mayúsculas: |
withPendingBalanceBoolean |
Boolean |
|
updatedAfterDateTime |
DateTime | Sólo los clientes modificados después de este momento (ISO 8601 con desfase horario). Para sincronizar, envía el |
Lo que devuelve
CustomerConnection
hasNextPageBoolean!Hay más elementos después de esta página.endCursorStringCursor del último elemento; pásalo en after para pedir la página siguiente.hasPreviousPageBoolean!true si pediste esta página con after, es decir, si no es la primera.startCursorStringCursor del primer elemento de esta página.Campos principales de Customer
| Campo | Tipo | Descripción |
|---|---|---|
idID! |
ID! | Identificador del cliente; es el que se envía en customerId. |
codeString |
String | Clave del cliente, p. ej. C-0042. |
nameString |
String | Nombre del cliente. |
rfcString |
String | RFC del cliente. |
emailString |
String | Correo electrónico. |
phoneString |
String | Teléfono. |
creditLimitMoney |
Money | Límite de crédito, en la moneda de crédito (creditCurrency). Requiere «Cliente» en la llave; sin él llega null. |
creditCurrencyString |
String | Clave SAT de la moneda de crédito, p. ej. MXN. El límite y los saldos están en esta moneda. Requiere «Cliente» en la llave; sin él llega null. |
balanceMoney |
Money | Saldo por cobrar: las parcialidades pendientes de sus facturas, vencidas y por vencer, menos los cobros que aún no se aplican a una factura. Es negativo si el cliente tiene saldo a favor. Requiere «Cliente» en la llave; sin él llega null. |
overdueBalanceMoney |
Money | Importe de las parcialidades ya vencidas, sin descontar los cobros por aplicar. Requiere «Cliente» en la llave; sin él llega null. |
availableCreditMoney |
Money | Crédito disponible, creditLimit menos balance. Requiere «Cliente» en la llave; sin él llega null. |
priceStructurePriceStructure |
PriceStructure | Estructura de precios principal del cliente. Requiere «Cliente» en la llave; sin él llega null. |
salespersonEmployee |
Employee | Vendedor asignado al cliente. |
addressesCustomerAddressConnection! |
CustomerAddressConnection! | Lugares de entrega del cliente, del modificado hace más tiempo al más reciente.20 por omisión, hasta 100 por página. |
updatedAtDateTime |
DateTime | Fecha y hora de la última modificación del cliente; úsala con customersConnection(updatedAfter:). |
Paginación
first · after
Pide hasta 100 clientes por página junto con pageInfo. Repite la misma consulta pasando endCursor en after mientras hasNextPage sea true. El orden es estable: no se saltan clientes entre páginas. Más sobre paginación.
Página 1
first: 100
endCursor: "WzEs…MTAwXQ"
hasNextPage: truePágina 2
after: "WzEs…MTAwXQ"
endCursor: "WzEs…MjAwXQ"
hasNextPage: truePágina 3
after: "WzEs…MjAwXQ"
endCursor: "WzEs…MjQ3XQ"
hasNextPage: falseSi un cliente cambia mientras recorres la lista, pasa al final y te llega otra vez con sus datos nuevos: guarda por id. Los lugares de entrega de cada cliente (addresses) son otra conexión con su propio límite de 100.
Permisos
Llave API Integraciones
La llave ve los registros de toda la empresa del subdominio.
Sin el permiso Sin error
La consulta responde sin error, pero el resultado llega null.
Así lo conserva el API para las integraciones que ya lo usan: revisa los permisos de la llave si una lista llega vacía sin razón.
Errores
| Código | Cuándo ocurre | Qué hacer |
|---|---|---|
| HTTP 401 | Falta el header Authorization o la llave no existe en la empresa del subdominio. La respuesta no trae cuerpo. | Revisa la llave y el subdominio. No reintentes. |
VALIDATION | El cursor de after no tiene el formato de esta lista, o first es negativo. | Usa el endCursor tal como llegó y con los mismos argumentos; si lo perdiste, reinicia sin after. |
argumentLiteralsIncompatible | Un argumento escrito en la consulta no tiene el tipo esperado, como un updatedAfter que no es ISO 8601. Si el valor llega en una variable, el error trae extensions.problems y puede no traer code. | Corrige la consulta; reintentar no ayuda. |
| HTTP 422 | Falla interna o dato rechazado al guardar. El cuerpo es {"error": …}, sin data. | Si no cambiaste nada, reintenta con espera exponencial. |
Los errores de la consulta llegan con HTTP 200 en errors, con su código en extensions.code. Revisa siempre errors, no sólo el estatus HTTP. Errores y reintentos.