Órdenes

Lee y filtra órdenes — el registro comercial que agrupa los intentos de pago detrás de cada compra, checkout, renovación y flujo de configuración.

Una orden es el registro comercial de una única intención de compra. Es el anclaje duradero y legible por humanos que agrupa uno o más intentos de pago — las transacciones que Tokeflow orquesta a través de tus proveedores conectados — bajo un identificador estable que puedes mostrar en un recibo, conciliar contra tu libro contable o consultar en soporte.

Nunca creas una orden directamente. Tokeflow abre una automáticamente en el momento en que se inicia un cobro, y luego mantiene su estado en sincronía con la transacción subyacente a medida que avanza por tus reglas de enrutamiento.

Tokeflow es orquestación de pagos, no un procesador de pagos. Una orden registra y estandariza el evento comercial; el proveedor conectado autoriza, captura y liquida los fondos. Tokeflow nunca mueve ni liquida dinero.

Cómo se crean las órdenes

Cada ruta de cobro produce exactamente una orden, distinguida por su order_type:

order_typeSe crea cuandorecurrence típica
apiLlamas directamente a POST /transactions.none
checkoutSe paga una sesión de Checkout alojada o incrustada.none o initial
renewalUna suscripción factura un nuevo ciclo.subsequent
trial_setupSe aprovisiona una suscripción de prueba y se ejecuta su primer cobro / cobro de configuración.initial
card_setupSe verifica y tokeniza una tarjeta sin una venta inmediata (una verificación de cero / solo autorización).none

El status de la orden se deriva de la transacción que agrupa. A medida que la transacción se autoriza, reembolsa o recibe un contracargo, Tokeflow avanza el estado de la orden y añade una entrada a su historial de estados.

Hoy una orden agrupa una única transacción de pago principal. El modelo de datos está construido para agrupar múltiples intentos (por ejemplo, un fallback en cascada entre proveedores) bajo una sola orden, así que trata siempre la orden — no una única transacción — como la unidad de conciliación.

El objeto order

{
  "id": "ord_9f8e7d6c5b4a3210",
  "merchant_id": "mrc_8a1b2c3d4e5f",
  "organization_id": "org_1a2b3c4d5e6f",
  "customer_id": "cust_kj3x8rabc123",
  "external_order_id": "shop_order_456",
  "checkout_session_id": "cks_a1b2c3d4e5",
  "order_type": "checkout",
  "recurrence": "initial",
  "total_amount": 9900,
  "currency": "BRL",
  "status": "authorized",
  "metadata": {
    "cart_id": "cart_7788",
    "campaign": "winter_sale"
  },
  "created_at": "2026-01-15T12:30:00.000Z",
  "updated_at": "2026-01-15T12:30:04.000Z",
  "items": [
    {
      "id": "f3a1c2d4-1111-4a2b-9c3d-5e6f7a8b9c0d",
      "product_id": "prd_a1b2c3d4e5",
      "offer_id": "ofr_a1b2c3d4e5",
      "product_name": "Premium Plan",
      "offer_name": "Annual Discount",
      "billing_cycle": "yearly",
      "cycle_limit": 12,
      "is_first_charge": true,
      "quantity": 1,
      "unit_amount": 9900,
      "total_amount": 9900,
      "currency": "BRL",
      "installments": 1,
      "created_at": "2026-01-15T12:30:00.000Z"
    }
  ],
  "status_history": [
    {
      "from_status": null,
      "to_status": "pending",
      "triggered_by": "api",
      "created_at": "2026-01-15T12:30:00.000Z"
    },
    {
      "from_status": "pending",
      "to_status": "authorized",
      "triggered_by": "psp_webhook",
      "created_at": "2026-01-15T12:30:04.000Z"
    }
  ]
}

Campos

FieldTypeDescription
idstringIdentificador único de la orden, con prefijo ord_.
merchant_idstringMerchant propietario de la orden (mrc_).
organization_idstringOrganization a la que pertenece el Merchant (org_).
customer_idstringCliente al que pertenece la orden (cust_).
external_order_idstring | nullTu propia referencia de orden, devuelta de vuelta para conciliación. null cuando no se proporciona.
checkout_session_idstring | nullSesión de checkout de origen (cks_) para órdenes checkout / trial_setup; null en caso contrario.
order_typestringCómo se originó la orden. Uno de api, checkout, renewal, trial_setup, card_setup.
recurrencestringPosición en una serie recurrente: none, initial, subsequent o unscheduled.
total_amountintegerTotal en unidades menores (centavos). 9900 = R$99.00.
currencystringCódigo de moneda ISO 4217 (p. ej. BRL).
statusstringEstado actual de la orden. Consulta Estado de la orden.
metadataobject | nullDatos arbitrarios de clave/valor que adjuntas en la creación.
created_atstringMarca de tiempo de creación en UTC ISO 8601.
updated_atstringMarca de tiempo de última actualización en UTC ISO 8601.
itemsarrayLíneas de detalle capturadas como snapshot en la creación de la orden. Devueltas por el endpoint de orden individual; vacías/omitidas en los resultados de lista.
status_historyarrayTransiciones de estado ordenadas. Devueltas por el endpoint de orden individual.

Los resultados de lista (GET /orders) devuelven las cabeceras de la orden — los campos de nivel superior de arriba. Los arrays items y status_history solo se rellenan cuando recuperas una única orden por ID.

Campos de la línea de detalle

Cada línea de detalle es un snapshot inmutable del producto y la oferta en el momento en que se creó la orden, de modo que las órdenes históricas se mantienen precisas incluso después de que cambies tu catálogo.

FieldTypeDescription
idstringIdentificador de la línea de detalle (UUID).
product_idstring | nullReferencia del producto (prd_).
offer_idstring | nullReferencia de la oferta (ofr_).
product_namestringSnapshot del nombre del producto.
offer_namestring | nullSnapshot del nombre de la oferta.
billing_cyclestring | nullSnapshot del ciclo de facturación de la oferta (p. ej. monthly, yearly). null para artículos de pago único.
cycle_limitinteger | nullSnapshot del límite de ciclos de la oferta, si lo hay.
is_first_chargebooleantrue cuando se aplicó el precio del primer cobro / configuración.
quantityintegerCantidad comprada.
unit_amountintegerPrecio unitario en unidades menores (refleja el precio del primer cobro cuando is_first_charge es true).
total_amountintegerTotal de la línea en unidades menores (unit_amount × quantity).
currencystringCódigo de moneda ISO 4217.
installmentsinteger | nullCuotas elegidas en el checkout. null o 1 significa un único cobro.
created_atstringMarca de tiempo en UTC ISO 8601.

Campos del historial de estados

FieldTypeDescription
from_statusstring | nullEstado antes de la transición. null para la primera entrada.
to_statusstringEstado después de la transición.
triggered_bystringQué impulsó el cambio (p. ej. api, system, psp_webhook).
created_atstringMarca de tiempo en UTC ISO 8601 de la transición.

Estado de la orden

StatusSignificado
pendingOrden creada; el cobro aún no se ha completado.
pre_authorizedHay una retención de autorización en curso, a la espera de captura.
authorizedEl cobro tuvo éxito (autorizado/capturado).
failedEl cobro no tuvo éxito. Terminal.
canceledLa orden se canceló antes de completarse. Terminal.
refund_pendingSe ha solicitado un reembolso y se está procesando.
partially_refundedSe ha reembolsado parte del monto.
refundedSe ha reembolsado el monto completo.
charged_backSe registró un contracargo contra la orden.

El estado de la orden refleja el ciclo de vida de la transacción subyacente. Para inspeccionar el detalle a nivel de pago detrás de un estado — resultados del proveedor, capturas, anulaciones — lee la transacción vinculada y sus reembolsos.

Endpoints

URL base: https://api.tokeflow.com — todas las rutas están bajo /api/v1.

Las órdenes son de solo lectura a través de la API. Autentícate con una clave secreta del lado del servidor (Authorization: Bearer sk_live_…). Consulta Autenticación para conocer la anatomía y los scopes de las claves. Ambos endpoints requieren el scope orders:read.

Las claves secretas (sk_*) son exclusivas del lado del servidor — nunca las expongas en código de navegador o móvil.

GET/api/v1/orders

Auth: Organization key (con merchant_id) o Merchant key.

Devuelve una lista paginada de cabeceras de órdenes para el Merchant resuelto, con los datos más recientes primero. Una clave de Merchant infiere su Merchant automáticamente. Una clave de Organization abarca todos los Merchants de la Organization, por lo que debe pasar merchant_id para acotar la consulta.

Parámetros de query

FieldTypeRequiredDescription
merchant_idstringCondicionalRequerido para claves de Organization; omítelo para claves de Merchant (inferido).
statusstringNoFiltra por estado de la orden. Repite el parámetro o pasa una lista separada por comas para múltiples valores (p. ej. status=authorized,refunded).
customer_idstringNoDevuelve solo las órdenes de este cliente (cust_).
external_order_idstringNoCoincide con tu propia referencia de orden.
order_typestringNoUno de api, checkout, renewal, trial_setup, card_setup.
currencystringNoCódigo de moneda ISO 4217 (p. ej. BRL).
date_fromstringNoIncluye órdenes creadas en o después de esta marca de tiempo ISO 8601.
date_tostringNoIncluye órdenes creadas en o antes de esta marca de tiempo ISO 8601.
pageintegerNoNúmero de página, indexado desde 1. Predeterminado 1.
limitintegerNoElementos por página. Predeterminado 20, máx. 100.

Request

curl -G "https://api.tokeflow.com/api/v1/orders" \
  -H "Authorization: Bearer sk_live_mer_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20" \
  --data-urlencode "status=authorized,refunded" \
  --data-urlencode "order_type=checkout" \
  --data-urlencode "currency=BRL" \
  --data-urlencode "date_from=2026-01-01T00:00:00Z" \
  --data-urlencode "date_to=2026-01-31T23:59:59Z"

Con una clave de Organization, añade merchant_id a la cadena de consulta para acotar la lista a un solo Merchant: GET /api/v1/orders?merchant_id=mrc_8a1b2c3d4e5f&status=authorized

Response 200 OK

{
  "success": true,
  "data": [
    {
      "id": "ord_9f8e7d6c5b4a3210",
      "merchant_id": "mrc_8a1b2c3d4e5f",
      "organization_id": "org_1a2b3c4d5e6f",
      "customer_id": "cust_kj3x8rabc123",
      "external_order_id": "shop_order_456",
      "checkout_session_id": "cks_a1b2c3d4e5",
      "order_type": "checkout",
      "recurrence": "initial",
      "total_amount": 9900,
      "currency": "BRL",
      "status": "authorized",
      "metadata": { "cart_id": "cart_7788" },
      "created_at": "2026-01-15T12:30:00.000Z",
      "updated_at": "2026-01-15T12:30:04.000Z"
    },
    {
      "id": "ord_1122334455667788",
      "merchant_id": "mrc_8a1b2c3d4e5f",
      "organization_id": "org_1a2b3c4d5e6f",
      "customer_id": "cust_kj3x8rabc123",
      "external_order_id": null,
      "checkout_session_id": null,
      "order_type": "api",
      "recurrence": "none",
      "total_amount": 15000,
      "currency": "BRL",
      "status": "refunded",
      "metadata": null,
      "created_at": "2026-01-12T09:05:00.000Z",
      "updated_at": "2026-01-13T17:42:00.000Z"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 42,
      "total_pages": 3,
      "has_next": true,
      "has_prev": false
    }
  },
  "request_id": "req_8f3c2a1b9d7e",
  "timestamp": "2026-01-15T12:30:00.000Z"
}

GET/api/v1/orders/:id

Auth: Organization key (con merchant_id) o Merchant key.

Recupera una única orden con sus items y status_history. La orden se devuelve solo si pertenece al Merchant resuelto (y, para claves de Organization, al merchant_id especificado dentro de tu Organization).

Parámetros de path

FieldTypeRequiredDescription
idstringSíEl ID de la orden (ord_).

Parámetros de query

FieldTypeRequiredDescription
merchant_idstringCondicionalRequerido para claves de Organization; omítelo para claves de Merchant.

Request

curl "https://api.tokeflow.com/api/v1/orders/ord_9f8e7d6c5b4a3210" \
  -H "Authorization: Bearer sk_live_mer_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

Response 200 OK

{
  "success": true,
  "data": {
    "id": "ord_9f8e7d6c5b4a3210",
    "merchant_id": "mrc_8a1b2c3d4e5f",
    "organization_id": "org_1a2b3c4d5e6f",
    "customer_id": "cust_kj3x8rabc123",
    "external_order_id": "shop_order_456",
    "checkout_session_id": "cks_a1b2c3d4e5",
    "order_type": "checkout",
    "recurrence": "initial",
    "total_amount": 9900,
    "currency": "BRL",
    "status": "authorized",
    "metadata": { "cart_id": "cart_7788", "campaign": "winter_sale" },
    "created_at": "2026-01-15T12:30:00.000Z",
    "updated_at": "2026-01-15T12:30:04.000Z",
    "items": [
      {
        "id": "f3a1c2d4-1111-4a2b-9c3d-5e6f7a8b9c0d",
        "product_id": "prd_a1b2c3d4e5",
        "offer_id": "ofr_a1b2c3d4e5",
        "product_name": "Premium Plan",
        "offer_name": "Annual Discount",
        "billing_cycle": "yearly",
        "cycle_limit": 12,
        "is_first_charge": true,
        "quantity": 1,
        "unit_amount": 9900,
        "total_amount": 9900,
        "currency": "BRL",
        "installments": 1,
        "created_at": "2026-01-15T12:30:00.000Z"
      }
    ],
    "status_history": [
      {
        "from_status": null,
        "to_status": "pending",
        "triggered_by": "api",
        "created_at": "2026-01-15T12:30:00.000Z"
      },
      {
        "from_status": "pending",
        "to_status": "authorized",
        "triggered_by": "psp_webhook",
        "created_at": "2026-01-15T12:30:04.000Z"
      }
    ]
  },
  "request_id": "req_7b2d1e0c8f6a",
  "timestamp": "2026-01-15T12:30:05.000Z"
}

Response 404 Not Found

Se devuelve cuando la orden no existe o no pertenece al Merchant resuelto.

{
  "error": {
    "type": "not_found_error",
    "code": "ORDER_NOT_FOUND",
    "message": "Order ord_9f8e7d6c5b4a3210 not found or does not belong to your merchant",
    "details": {},
    "request_id": "req_3c9a7f2b1d8e",
    "timestamp": "2026-01-15T12:31:00.000Z"
  }
}

Errores

Las órdenes usan el sobre de error estándar. Casos comunes:

HTTPtypeCuándo
401authentication_errorClave de API faltante o inválida.
403authorization_errorLa clave carece del scope orders:read, o una clave de Organization omitió merchant_id.
404not_found_errorOrden no encontrada, o no perteneciente al Merchant resuelto.
429rate_limit_errorLímite de tasa excedido (predeterminado 600 solicitudes / minuto por clave en cada ruta de órdenes). Respeta Retry-After, aplica retroceso y reintenta.

Relacionado

  • Transacciones — los intentos de pago que agrupa una orden, y donde viven los reembolsos.
  • Checkout — sesiones que crean órdenes checkout.
  • Suscripciones — el origen de las órdenes renewal y trial_setup.
  • Autenticación — tipos de claves, scopes y la regla de merchant_id para claves de Organization.

En esta página