Kroni Go
    CotizarSolucionesCómo funcionaPaqueteríasCobra al entregarFAQRastrear
    Kroni Go

    Kroni Go es la plataforma de envíos de Kroni. La forma más fácil y segura de enviar en México.

    Producto

    • Cotizador
    • Wallet
    • Link de pago seguro
    • Cobra al entregar
    • Rastreo

    Paqueterías

    • PuntoPost
    • Rappi
    • iMile
    • DHL
    • FedEx
    • Estafeta
    • AMPM
    • 99minutos
    • Paquetexpress

    Recursos

    • Cobro contra entrega
    • Ventas por WhatsApp

    Empresa

    • Nosotros
    • Blog
    • Contacto
    • Trabaja con nosotros

    Legal

    • Términos de servicio
    • Privacidad
    • Cookies

    © 2026 Kroni Go. Todos los derechos reservados.

    ¿Necesitas ayuda?
    kroni.io33 1810 2102
    WhatsApp
    Volver a la guía

    Referencia de la API

    Generada desde la especificación OpenAPI que sirve la propia API, así que siempre refleja lo que está desplegado.

    Descargar openapi.json

    URL base — producción y pruebas

    https://go-api.kroni.io/v1

    El entorno lo determina el prefijo de tu llave (kg_test_ / kg_live_).

    get/ping

    Validar la credencial

    Devuelve el entorno, la organización y los límites vigentes. Úsalo como prueba de humo al configurar la integración.

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key. invalid_api_key — La API Key no es válida.
    403app_suspended — Tu aplicación está suspendida. Escríbenos para reactivarla.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    post/rates

    Cotizar un envío

    Devuelve una tarifa por servicio disponible, con el costo total real que se cobrará. El folio (`quote_id`) vive 60 minutos. `declared_value_mxn` por sí solo **no cobra nada**: viaja a la guía y sirve de base para la protección opcional, que se activa con `protect_declared_value`.

    Cuerpo de la petición

    CampoTipoObligatorioNotas
    originobjectSí—
    origin.postal_codestringSíformato ^\d{5}$
    origin.citystringNomáx. 120 caracteres
    origin.state
    get/rates/{quote_id}

    Recuperar una cotización por folio

    Un folio vencido responde 200 con `expired: true`, para que puedas auditar históricos. El rechazo por vigencia ocurre al generar la guía.

    Parámetros

    NombreEnObligatorioFormato
    quote_idrutaSí^qt_[0-9a-f]{32}$

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404quote_not_found — No encontramos esa cotización.
    get/reference/carriers

    Paqueterías, límites y conceptos de cargo

    Describe los conceptos y cómo se calculan. Los importes concretos solo aparecen dentro de una cotización, ya sumados al precio de esa ruta.

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    get/reference/coverage

    Cobertura de un código postal

    Estado, municipio y qué paqueterías cubren el código postal. Úsalo para descartar rutas sin gastar una cotización.

    Parámetros

    NombreEnObligatorioFormato
    postal_codequerySí^\d{5}$

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404no_coverage — No encontramos paqueterías con cobertura para esa ruta.
    post/shipments

    Generar una guía a partir de una cotización

    Toma el folio (`quote_id`) y la tarifa (`rate_id`) de `POST /rates`, más las direcciones completas. Los códigos postales deben coincidir con los de la cotización. Requiere el encabezado `Idempotency-Key`. Misma llave + mismo cuerpo → la misma guía (200). Misma llave + cuerpo distinto → `409 idempotency_conflict`. En producción descuenta del saldo prepago. En pruebas no cobra ni contacta a ninguna paquetería.

    Parámetros

    NombreEnObligatorioFormato
    Idempotency-KeyquerySístring

    Cuerpo de la petición

    CampoTipoObligatorioNotas
    get/shipments

    Listar guías

    Paginación por cursor: manda `next_cursor` de la respuesta anterior en `cursor`. No hay `offset`.

    Parámetros

    NombreEnObligatorioFormato
    limitqueryNointeger
    cursorqueryNostring
    statusqueryNo"created" | "picked_up" | "in_transit" | "out_for_delivery" | "delivered" | "incident" | "returned" | "cancelled" | "failed"
    get/shipments/{shipment_id}

    Consultar una guía

    Parámetros

    NombreEnObligatorioFormato
    shipment_idrutaSí^shp_[0-9a-f]{32}$

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404shipment_not_found — No encontramos esa guía.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    get/shipments/{shipment_id}/label

    Descargar la etiqueta

    Devuelve el PDF. `format=pdf` es térmica de 4×6 pulgadas (por defecto); `format=pdf_letter` es tamaño carta. Con `redirect=true` responde `302` a una URL firmada temporal, para no proxear el binario. ZPL no está disponible por ahora; pedirlo responde `415 label_format_unavailable`.

    Parámetros

    NombreEnObligatorioFormato
    shipment_idrutaSí^shp_[0-9a-f]{32}$
    formatqueryNo"pdf" | "pdf_letter"
    redirectqueryNo"true" | "false"
    post/shipments/{shipment_id}/cancel

    Solicitar la cancelación de una guía

    NO cancela de inmediato: registra una solicitud que Kroni revisa. Solo procede mientras la paquetería no haya recolectado. Refleja `pending_review` en tu sistema hasta recibir la resolución.

    Parámetros

    NombreEnObligatorioFormato
    shipment_idrutaSí^shp_[0-9a-f]{32}$

    Cuerpo de la petición

    CampoTipoObligatorioNotas
    reason
    get/tracking/{tracking_number}

    Estado de un envío

    Consulta a la paquetería en tiempo real y devuelve el estado normalizado y el historial. Solo guías de tu organización.

    Parámetros

    NombreEnObligatorioFormato
    tracking_numberrutaSístring

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404shipment_not_found — No encontramos esa guía.

    Catálogo de códigos de error

    Ramifica por code: es estable. El texto de message puede cambiar de redacción.

    Códigos
    unauthorized
    invalid_api_key
    key_revoked
    key_expired
    app_suspended
    ip_not_allowed
    account_blocked
    wrong_environment
    api_disabled
    api_writes_disabled
    rate_limited
    validation_error
    not_found
    invalid_json
    quote_not_found
    quote_expired
    rate_not_found
    no_coverage
    weight_limit_exceeded
    dimension_limit_exceeded
    multi_package_unsupported
    insufficient_balance
    carrier_unavailable
    idempotency_conflict
    idempotency_key_required
    shipment_not_found
    shipment_processing
    shipment_cancelled
    cancellation_pending
    cancellation_quota_exceeded
    shipment_not_cancellable
    label_not_ready
    label_format_unavailable
    internal_error
    string
    No
    máx. 120 caracteres
    origin.neighborhoodstringNomáx. 120 caracteres
    destinationobjectSí—
    destination.postal_codestringSíformato ^\d{5}$
    destination.citystringNomáx. 120 caracteres
    destination.statestringNomáx. 120 caracteres
    destination.neighborhoodstringNomáx. 120 caracteres
    packageobjectSí—
    package.weight_kgnumberSímáx. 70
    package.length_cmnumberSímáx. 300
    package.width_cmnumberSímáx. 300
    package.height_cmnumberSímáx. 300
    package_countintegerSímáx. 20
    declared_value_mxnnumberNomáx. 500000
    protect_declared_valuebooleanSí—
    carriersstring[]No—

    Errores posibles

    HTTPCódigos
    400invalid_json — El cuerpo de la petición no es JSON válido.
    401unauthorized — Falta el encabezado Authorization con tu API Key. invalid_api_key — La API Key no es válida.
    404no_coverage — No encontramos paqueterías con cobertura para esa ruta.
    422validation_error — La petición tiene campos inválidos.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    502carrier_unavailable — La paquetería no respondió. Inténtalo de nuevo o elige otra tarifa.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    429
    rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    422
    validation_error — La petición tiene campos inválidos.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    quote_idstringSíformato ^qt_[0-9a-f]{32}$
    rate_idstringSíformato ^rt_[0-9a-f]{12}$
    originobjectSí—
    origin.contact_namestringSímáx. 100 caracteres
    origin.company_namestring | nullNo—
    origin.emailstring | nullNo—
    origin.phonestringSíformato ^\d{10}$
    origin.streetstringSímáx. 200 caracteres
    origin.street_numberstringSímáx. 20 caracteres
    origin.interior_numberstring | nullNo—
    origin.neighborhoodstringSímáx. 100 caracteres
    origin.municipalitystringSímáx. 100 caracteres
    origin.statestringSímáx. 100 caracteres
    origin.state_codestringSímáx. 5 caracteres
    origin.postal_codestringSíformato ^\d{5}$
    origin.countrystringSímáx. 2 caracteres
    origin.referencesstring | nullNo—
    destinationobjectSí—
    destination.contact_namestringSímáx. 100 caracteres
    destination.company_namestring | nullNo—
    destination.emailstring | nullNo—
    destination.phonestringSíformato ^\d{10}$
    destination.streetstringSímáx. 200 caracteres
    destination.street_numberstringSímáx. 20 caracteres
    destination.interior_numberstring | nullNo—
    destination.neighborhoodstringSímáx. 100 caracteres
    destination.municipalitystringSímáx. 100 caracteres
    destination.statestringSímáx. 100 caracteres
    destination.state_codestringSímáx. 5 caracteres
    destination.postal_codestringSíformato ^\d{5}$
    destination.countrystringSímáx. 2 caracteres
    destination.referencesstring | nullNo—
    packageobjectSí—
    package.declared_value_mxnnumberNomáx. 500000
    package.descriptionstring | nullNo—
    referencestringNomáx. 120 caracteres
    label_format"pdf" | "pdf_letter"Sí—

    Errores posibles

    HTTPCódigos
    400invalid_json — El cuerpo de la petición no es JSON válido.
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    402insufficient_balance — Saldo insuficiente para generar la guía.
    404quote_not_found — No encontramos esa cotización. rate_not_found — Esa tarifa no pertenece a la cotización indicada.
    409quote_expired — La cotización venció. Vuelve a cotizar antes de generar la guía. idempotency_conflict — Ya usaste esa Idempotency-Key con un cuerpo distinto. shipment_processing — La guía con esa Idempotency-Key todavía se está generando. Reintenta en unos segundos con la misma llave.
    422idempotency_key_required — Falta el encabezado Idempotency-Key. validation_error — La petición tiene campos inválidos. multi_package_unsupported — La paquetería elegida no ampara varios bultos en una sola guía.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    502carrier_unavailable — La paquetería no respondió. Inténtalo de nuevo o elige otra tarifa.
    503api_writes_disabled — La generación de guías por API está temporalmente deshabilitada. La cotización sigue disponible.
    referencequeryNostring
    created_afterqueryNostring
    created_beforequeryNostring

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    422validation_error — La petición tiene campos inválidos.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404shipment_not_found — No encontramos esa guía.
    409shipment_cancelled — Esta guía fue cancelada. label_not_ready — La etiqueta todavía se está generando. Inténtalo en unos segundos.
    415label_format_unavailable — Ese formato de etiqueta no está disponible para esta paquetería.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.
    string
    Sí
    máx. 500 caracteres

    Errores posibles

    HTTPCódigos
    401unauthorized — Falta el encabezado Authorization con tu API Key.
    404shipment_not_found — No encontramos esa guía.
    409shipment_not_cancellable — Esta guía ya no se puede cancelar. shipment_cancelled — Esta guía fue cancelada. cancellation_pending — Ya hay una solicitud de cancelación en revisión para esta guía.
    422validation_error — La petición tiene campos inválidos.
    429cancellation_quota_exceeded — Alcanzaste el máximo de solicitudes de cancelación de este mes. Escríbenos si necesitas más. rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    503api_writes_disabled — La generación de guías por API está temporalmente deshabilitada. La cotización sigue disponible.
    429rate_limited — Rebasaste el límite de peticiones. Espera unos segundos e inténtalo de nuevo.
    502carrier_unavailable — La paquetería no respondió. Inténtalo de nuevo o elige otra tarifa.
    503api_disabled — La API de Kroni está temporalmente deshabilitada.