Saltar al contenido
KubiBAI Web Services
Esc
navegarabrir⌘Jvista previa
En esta página

Factura TicketBAI a una administración pública con FacturaE

Cuerpo JSON de una factura TicketBAI que también genera el XML FacturaE para una administración pública.

El ejemplo corresponde a una persona jurídica de Bizkaia que presta un servicio de consultoría a una administración pública. La misma petición genera la factura TicketBAI y el XML FacturaE. Envía este cuerpo mediante POST /invoicing/invoices.

Cuerpo de la petición

{
  "sender_data": {
    "sender_ticketbai_territory_id": "b4039144-5069-4584-88e1-7086c9f01adc",
    "sender_is_individual": false,
    "sender_full_name": "Empresa Consultora Ejemplo S.L.",
    "sender_id_card_number": "B12345674",
    "sender_address": "Gran Vía de Don Diego López de Haro 1",
    "sender_postal_code": "48001",
    "sender_town": "Bilbao",
    "sender_province": "Bizkaia"
  },
  "recipients": [
    {
      "tax_id_number": "P1234567D",
      "full_name": "Ayuntamiento de Ejemplo",
      "postal_code": "48002",
      "address": "Plaza del Ayuntamiento 1",
      "is_legal_entity": true,
      "town": "Municipio de Ejemplo",
      "province": "Bizkaia",
      "facturae_country_code": "ESP",
      "administrative_centers": [
        {
          "role": "01",
          "code": "L01234567",
          "name": "Oficina Contable de Ejemplo",
          "address": "Plaza del Ayuntamiento 1",
          "postal_code": "48002",
          "town": "Municipio de Ejemplo",
          "province": "Bizkaia",
          "facturae_country_code": "ESP"
        },
        {
          "role": "02",
          "code": "L01234568",
          "name": "Órgano Gestor de Ejemplo",
          "address": "Plaza del Ayuntamiento 1",
          "postal_code": "48002",
          "town": "Municipio de Ejemplo",
          "province": "Bizkaia",
          "facturae_country_code": "ESP"
        },
        {
          "role": "03",
          "code": "L01234569",
          "name": "Unidad Tramitadora de Ejemplo",
          "address": "Plaza del Ayuntamiento 1",
          "postal_code": "48002",
          "town": "Municipio de Ejemplo",
          "province": "Bizkaia",
          "facturae_country_code": "ESP"
        }
      ]
    }
  ],
  "invoice_data": {
    "fiscal_year": 2026,
    "series_code": "FAC",
    "invoice_number": "2026-001",
    "invoice_datetime": "2026-07-22 15:00:00",
    "description": "Servicios de consultoría técnica",
    "total_amount": 12100,
    "vat_keys": [
      {
        "transaction_of_tax_significance_code": "01"
      }
    ],
    "concepts": [
      {
        "description": "Servicios de consultoría técnica",
        "quantity": 100,
        "unit_price": 10000000000,
        "total_price": 12100,
        "vat_rate": 2100
      }
    ],
    "local_subject_not_exempt_items": [
      {
        "vat_not_exempt_type": "S1",
        "vat_breakdown_items": [
          {
            "taxable_amount": 10000,
            "tax_rate": 2100,
            "tax_quota": 2100
          }
        ]
      }
    ]
  },
  "generate_facturae": true,
  "async_mode": "none"
}

Recuperar el XML FacturaE

Con async_mode: "none", la respuesta síncrona contiene el XML en data.facturae_xml_contents. El valor Base64 se abrevia en este fragmento:

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "series_code": "FAC",
    "invoice_number": "2026-001",
    "facturae_xml_contents": "{FACTURAE_XML_BASE64}",
    "tbai_post_status": "success"
  }
}

Si guardas la respuesta completa en respuesta.json, puedes decodificar el contenido en Linux con:

jq -r '.data.facturae_xml_contents' respuesta.json \
  | base64 --decode > facturae.xml

En macOS, sustituye base64 --decode por base64 -D.