> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qrticket.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Ventas

> Las compras de tu productora: comprador, ítems, importe, canal, vendedor y estado

# Ventas

Una **orden** es una compra: quién compró, qué se llevó, cuánto pagó, por qué canal y en qué estado quedó.

Requiere el permiso `ORDERS_READ`.

<Warning>
  Este endpoint devuelve datos personales de tus compradores (nombre, email, teléfono, documento). Tratalos con el mismo cuidado con el que los tratás en el dashboard.
</Warning>

## Listar ventas

```http theme={null}
GET /api/v1/orders
```

```bash theme={null}
curl "https://qrticket.app/api/v1/orders?event_id=m94K1zLU8S&status=completed&limit=200" \
  -H "Authorization: Bearer qrt_live_..."
```

### Parámetros

| Parámetro | Tipo | Descripción |
| - | - | - |
| `limit` | número | 1 a 200. Default 50. |
| `cursor` | texto | Cursor de la página anterior. |
| `event_id` | texto | Solo las ventas de ese evento. |
| `status` | texto | `pending`, `completed`, `failed`, `refunded`, `cancelled`. Repetible o separado por comas. |
| `created_after` | fecha | Creadas a partir de esta fecha. |
| `created_before` | fecha | Creadas hasta esta fecha. |
| `updated_after` | fecha | Modificadas después de esta fecha. **Es el parámetro para sincronizar.** |

<Note>
  Las compras de **créditos** (lo que la productora nos paga a nosotros) no aparecen acá. Este feed son tus ventas de entradas, nada más.
</Note>

## Consultar una venta

```http theme={null}
GET /api/v1/orders/{order_id}
```

Devuelve lo mismo que la lista **más `attendees[]`**, con las credenciales de cada asistente.

## El objeto Orden

```json theme={null}
{
  "id": "OwcEMGo0jm",
  "event_id": "m94K1zLU8S",
  "event": { "id": "m94K1zLU8S", "name": "EUFORIA", "slug": "euforia" },
  "status": "completed",
  "channel": "mercadopago",
  "provider": "mercadopago",
  "amount": 28000,
  "currency": "ARS",
  "discount_amount": 2000,
  "coupon_code": "AMIGOS",
  "buyer": {
    "name": "Camila Ríos",
    "email": "camila@example.com",
    "phone": "+5493411234567",
    "identity_document": "38123456"
  },
  "seller": {
    "id": "cm11286mg...",
    "name": "Josué",
    "email": "josue@example.com",
    "referral_id": "aB3dE5fG7h"
  },
  "items": [
    {
      "id": "cmptftf3v0002",
      "kind": "ticket_type",
      "ticket_type_id": "TvEPjMm1rx",
      "name": "PREVENTA",
      "unit_price": 14000,
      "quantity": 2,
      "total_price": 28000
    }
  ],
  "attendee_count": 2,
  "payment": {
    "external_id": "1234567890",
    "transfer_proof_url": null,
    "rejection_reason": null
  },
  "utm": { "source": "instagram", "medium": "cpc", "campaign": "euforia", "content": null, "term": null },
  "created_at": "2026-08-01T18:04:11.000Z",
  "updated_at": "2026-08-01T18:05:02.000Z",
  "refunded_at": null
}
```

### Campos

<ResponseField name="status" type="string">
  * `pending` — esperando el pago (en una transferencia automática, que el comprador transfiera al alias de la compra), o esperando que el organizador apruebe una transferencia / un pedido por WhatsApp. **Todavía no hay entradas emitidas.**
  * `completed` — pagada y con las entradas emitidas.
  * `failed` — el pago fue rechazado.
  * `refunded` — se devolvió la plata; las credenciales quedaron anuladas.
  * `cancelled` — se rechazó o se anuló antes de emitir (también una transferencia automática cuyo alias venció sin recibir el pago).
</ResponseField>

<ResponseField name="channel" type="string">
  Cómo se vendió: `mercadopago`, `stripe`, `recurrente`, `automatic_transfer`, `bank_transfer`, `whatsapp`, `free`, `staff`.

  `automatic_transfer` es la transferencia automática (alias propio por compra, se aprueba sola al acreditarse); `bank_transfer` la transferencia con comprobante que aprueba el organizador. `staff` es una carga manual del equipo (o una importación), `free` es una entrada gratuita reclamada online. Este es el campo para agrupar por canal — es el mismo criterio que usa el dashboard.
</ResponseField>

<ResponseField name="amount" type="number">
  Lo que efectivamente pagó el comprador, ya con el descuento aplicado y, si el evento traslada la comisión del procesador, con ese recargo incluido.
</ResponseField>

<ResponseField name="seller" type="object | null">
  El RRPP o vendedor al que se le atribuye la venta, cuando entró por su link de referido o la generó él mismo. `null` si fue una venta directa.
</ResponseField>

<ResponseField name="items" type="array">
  Las líneas de la compra, con el precio que se cobró en ese momento. `kind` es `ticket_type` o `bundle`, y `ticket_type_id` apunta al ítem correspondiente en [tipos de entrada](/api/ticket-types).
</ResponseField>

<ResponseField name="attendee_count" type="number">
  Cuántas **personas** trae la orden, que no es lo mismo que cuántos QRs: un combo emite varias credenciales para el mismo asistente. Para contar credenciales, mirá [entradas](/api/tickets).
</ResponseField>

<ResponseField name="payment.external_id" type="string | null">
  La referencia del pago en el procesador (id de MercadoPago, PaymentIntent de Stripe, intent de Recurrente, id del pago de la transferencia automática). Sirve para conciliar contra el extracto del procesador. Nunca devolvemos tokens ni credenciales de cobro.
</ResponseField>

<ResponseField name="updated_at" type="string">
  Se mueve cada vez que la orden cambia de estado. Es el campo para `updated_after`.
</ResponseField>

## `attendees[]` (solo en el detalle)

```json theme={null}
{
  "attendees": [
    {
      "id": "qtRD9AfcaF",
      "name": "Camila Ríos",
      "email": "camila@example.com",
      "phone": null,
      "identity_document": "38123456",
      "created_at": "2026-08-01T18:05:02.000Z",
      "tickets": [ { "id": "2vLwQ8GE135z", "status": "valid", "...": "..." } ]
    }
  ]
}
```

Cada elemento de `tickets` tiene la misma forma que en [entradas](/api/tickets).

<Note>
  Si el evento pide **datos por entrada** (configuración "Datos de los asistentes"), la orden trae un elemento de `attendees[]` **por persona**, cada uno con su propio nombre, documento y email. En eventos que solo piden los datos del comprador, la orden trae un único asistente con todas las credenciales — el comportamiento histórico.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.