> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.supay.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.supay.dev/_mcp/server.

# 30 · Boleto Aéreo

Pasajes aéreos sin crédito fiscal. Particularidades: **sin detalle** (el XSD solo
define cabecera), **solo emisión masiva** (nunca individual) y admite borrador
sin `items` (con `total` + pasajero).

> **Warning**
>
> `sector: "30"` en emisión individual → `400 "requiere emisión masiva"`. Es la
> única vía: `POST /v1/siat/masiva/{companyId}/{pointOfSaleId}`.

## Cabecera (`data`)

| Campo                       | Tipo   | Obligatorio | Qué significa          |
| --------------------------- | ------ | ----------- | ---------------------- |
| `nombre_pasajero`           | string | Sí          | Pasajero del boleto    |
| `numero_documento_pasajero` | string | Sí          | Documento del pasajero |
| `codigo_iata_linea_aerea`   | int    | No          | IATA de la aerolínea   |
| `codigo_iata_agente_viajes` | string | No          | IATA de la agencia     |
| `nit_agente_viajes`         | int    | No          | NIT de la agencia      |
| `codigo_origen_servicio`    | string | No          | Origen del servicio    |
| `codigo_tipo_transaccion`   | string | No          | Tipo de transacción    |
| `monto_tarifa`              | number | No          | Tarifa del boleto      |

## Detalle

Sin detalle: el boleto no tiene líneas.

#### SDK TypeScript

```typescript
// Borrador sin items: total + pasajero en cabecera
const borrador = await supay.invoices.create({
  point_of_sale_id: pos.id,
  customer: {
    document_type: "ci",
    document_number: "1234567",
    name: "Pasajero Ejemplo",
  },
  items: [],
  sector: "30",
  total: 850,
  data: {
    nombre_pasajero: "Pasajero Ejemplo",
    numero_documento_pasajero: "1234567",
    codigo_iata_linea_aerea: 1,
  },
});

// Envío: SOLO por masiva
const bulk = await supay.siat.sendBulk({
  companyId: company.id,
  pointOfSaleId: pos.id,
  ...lote,
});
```

#### REST API

```bash
# 1. Borrador sin items
curl -s -X POST "$BASE/v1/invoices" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "point_of_sale_id": "'$POS'",
    "customer": {
      "document_type": "ci",
      "document_number": "1234567",
      "name": "Pasajero Ejemplo"
    },
    "items": [],
    "sector": "30",
    "total": 850,
    "data": {
      "nombre_pasajero": "Pasajero Ejemplo",
      "numero_documento_pasajero": "1234567"
    }
  }'

# 2. Envío SOLO por masiva
curl -s -X POST "$BASE/v1/siat/masiva/$CID/$POS" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d "$LOTE_BOLETO"
```