Lista las empresas del tenant con sus series del ambiente de la clave
curl https://api.boletura.com/v1/companies \ --header 'Authorization: Bearer bol_test_TU_CLAVE'$ch = curl_init("https://api.boletura.com/v1/companies");
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer bol_test_TU_CLAVE']);
curl_exec($ch);
curl_close($ch);import http.client
conn = http.client.HTTPSConnection("api.boletura.com")
headers = { "Authorization": "Bearer bol_test_TU_CLAVE"}
conn.request( "GET", "/v1/companies", headers=headers,)
response = conn.getresponse()print(response.read().decode())
conn.close()using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.boletura.com/v1/companies");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "bol_test_TU_CLAVE");
using var response = await client.SendAsync(request);HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder() .uri(java.net.URI.create("https://api.boletura.com/v1/companies")) .header("Authorization", "Bearer bol_test_TU_CLAVE") .method("GET", HttpRequest.BodyPublishers.noBody()) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());fetch('https://api.boletura.com/v1/companies', { headers: { Authorization: 'Bearer bol_test_TU_CLAVE' }})Permite resolver company_id y las series sin entrar al back office. Lista todas las empresas del tenant, aunque la clave tenga una por defecto, ordenadas por creación. No devuelve certificados, credenciales ni otros secretos.
Requiere el scope companies:read.
Autorización
Sección titulada «Autorización»Parámetros
Sección titulada «Parámetros»Parámetros de la consulta
Sección titulada «Parámetros de la consulta»Tamaño de la página, de 1 a 200; por defecto 50. Fuera de ese rango responde 422 limit_invalid, y un valor que no es un número, 400 bad_request.
El next_cursor de la página anterior. Es opaco y vale solo para el orden con el que se generó: otro responde 400 invalid_cursor.
Respuestas
Sección titulada «Respuestas»Solicitud correcta.
Una página de empresas.
object
Empresas de la página.
Empresa emisora del tenant.
object
UUID de la empresa: es el company_id de la emisión.
RUC de la empresa.
Razón social.
Nombre comercial; nulo si no tiene.
Estado de la empresa.
Habilitación por ambiente.
object
Verdadero salvo si la empresa está suspendida.
Verdadero solo cuando la empresa está ready y la cuenta está activada para live.
Series activas en el ambiente de la clave, ordenadas por tipo y código. Vacía si no tiene.
Serie activa de la empresa en el ambiente de la clave.
object
UUID de la serie.
UUID del establecimiento de la serie.
Ambiente de la serie.
Tipo de comprobante que emite.
Código de la serie, como B001: es el series de la emisión.
Si es la serie por defecto de su tipo en ese establecimiento y ambiente.
Cursor de la página siguiente, para pasarlo en cursor; nulo en la última página.
Ejemplos
Una empresa con dos series
{ "data": [ { "id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6b", "ruc": "20100066603", "legal_name": "Empresa de Ejemplo S.A.C.", "trade_name": "Ejemplo", "status": "draft", "environments_ready": { "test": true, "live": false }, "series": [ { "id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6d", "establishment_id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6c", "environment": "test", "document_type": "boleta", "code": "B001", "is_default": true }, { "id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6e", "establishment_id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6c", "environment": "test", "document_type": "factura", "code": "F001", "is_default": true } ] } ], "next_cursor": null}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
Solicitud mal formada. Códigos: invalid_cursor y bad_request, cuando un parámetro no tiene el formato de su tipo, como limit=abc. No se reintenta sin corregirla.
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
invalid_cursor
{ "error": { "type": "bad_request", "code": "invalid_cursor", "message": "El cursor no es válido.", "param": "cursor", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
Sin una API key válida. Códigos: unauthorized, invalid_api_key, revoked_api_key, expired_api_key.
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
invalid_api_key
{ "error": { "type": "unauthorized", "code": "invalid_api_key", "message": "La API key no es válida.", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
La clave no puede operar. Códigos: forbidden (no tiene el scope), tenant_suspended, plan_without_api (el plan de la cuenta no incluye la API), account_not_activated (emisión en live de una cuenta que Boletura todavía no activó).
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
forbidden
{ "error": { "type": "forbidden", "code": "forbidden", "message": "La API key no tiene el scope companies:read que exige este endpoint.", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
limit_invalid: limit está fuera del rango de 1 a 200.
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
limit_invalid
{ "error": { "type": "validation_error", "code": "limit_invalid", "message": "El límite debe estar entre 1 y 200.", "param": "limit", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
rate_limited: se superó el límite de 600 solicitudes por minuto por clave o 1200 por IP. Se reintenta después de Retry-After.
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
rate_limited
{ "error": { "type": "rate_limited", "code": "rate_limited", "message": "Demasiadas solicitudes. Reintente después de los segundos que indica Retry-After.", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.
Segundos que conviene esperar antes de reintentar.
Falla transitoria, como database_unavailable o storage_unavailable. Se reintenta con una espera creciente.
Formato único de los errores de la API.
object
El error principal.
object
Familia del error, como validation_error, conflict o unavailable.
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.
Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.
Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.
Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.
Todos los problemas. Solo aparece cuando hay varios.
Uno de los problemas de la solicitud.
object
Código estable, para programar contra él.
Mensaje en español, apto para mostrar a un operador.
Ruta del campo en el JSON, si el error apunta a uno.
Ejemplos
database_unavailable
{ "error": { "type": "unavailable", "code": "database_unavailable", "message": "La base de datos no está disponible. Reintente en unos segundos.", "request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a" }}Cabeceras
Sección titulada «Cabeceras»El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.
Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.
Solicitudes que quedan en la ventana.
Segundos hasta la ventana siguiente.