Menú: API reference

Cloud API · Tickets

Imprimir un ticket

Renderiza un árbol JSON y lo imprime en la impresora térmica del terminal.

POST/terminals/:terminalId/print-ticket
Ver la guía

Renderiza el árbol del ticket y lo imprime en el terminal indicado. La respuesta llega en cuanto el terminal acepta el trabajo de impresión: no espera a que salga el papel.

Cabeceras

Cabecera Valor Obligatoria
Content-Type application/json Sí
Authorization Bearer <clientSecret> Sí
venue-api-key La clave de tu local Sí

Cuerpo

JSON
{
  "ticket": {
    "root": {
      "type": "column",
      "children": [
        { "type": "text", "content": "HONEI BAR", "style": { "bold": true, "size": "lg", "align": "center" } },
        { "type": "separator" },
        {
          "type": "row",
          "children": [
            { "type": "text", "content": "Cerveza", "style": { "flex": 1 } },
            { "type": "text", "content": "3,50 €", "style": { "align": "right", "bold": true } }
          ]
        }
      ]
    }
  }
}

El cuerpo tiene un único campo de primer nivel, ticket, con un campo anidado, root. root es el bloque raíz del árbol. La gramática completa está en Esquema del ticket.

Respuesta

El terminal ha aceptado el trabajo de impresión.

JSON
{
  "message": "Print job sent"
}

El cuerpo de la petición está mal formado: falta ticket, falta ticket.root, o root no es un objeto.

JSON
{
  "code": 400,
  "message": "ticket.root is required"
}

El terminalId no existe.

JSON
{
  "code": 404,
  "message": "Terminal not found"
}

Tus credenciales no dan acceso al terminal.

JSON
{
  "code": 403,
  "message": "Not authorized"
}

Esquema del ticket

Un ticket es un árbol recursivo de bloques. Cada bloque tiene un type y un objeto style opcional. Los contenedores (column, row) también tienen children.

Contenedores

Tipo Descripción
column Apila los children en vertical. gap por defecto de 4 px entre ellos.
row Coloca los children en horizontal. gap por defecto de 4 px entre ellos.

Por defecto, los contenedores ocupan todo el ancho de su padre. Para cambiarlo, usa style.width (en px o "%") o style.flex.

Bloques finales

Tipo Campos obligatorios Descripción
text content Un bloque de texto. Por defecto salta de línea; usa style.wrap para cambiarlo.
image src Una imagen. src acepta una URL HTTPS o una data URL en base64 (data:image/png;base64,...). Usa style.width y style.height para darle tamaño.
separator — Una línea horizontal. style.char controla su aspecto: - (discontinua, por defecto), =, ., _ (continua).
space lines (opcional) Espacio vertical. lines vale 1 por defecto. Cada línea equivale a un em del tamaño de letra heredado.

Estilo

El objeto style es opcional en todos los bloques, y todas sus propiedades también.

Propiedad Tipo Se aplica a Descripción
bold boolean text, contenedores Negrita.
italic boolean text, contenedores Cursiva.
underline boolean text, contenedores Subraya el texto.
size "sm" | "md" | "lg" | "xl" text, contenedores Tamaño de letra: sm=11 px, md=14 px (por defecto), lg=18 px, xl=22 px.
invert boolean text, contenedores Texto blanco sobre fondo negro, para destacar. Combínalo con padding para dar aire.
align "left" | "center" | "right" Todos En text: alineación horizontal del texto. En row: posición horizontal de los hijos. En column: posición vertical de los hijos.
width number (px) | "<n>%" (string) Todos Ancho explícito. Si se omite, los contenedores ocupan el ancho de su padre.
height number (px) image Alto explícito en px. Sin él, las imágenes mantienen su proporción natural.
flex number Todos Factor de crecimiento dentro de un row o column. Sirve para repartir el espacio sobrante de forma proporcional.
gap number (px) row, column Espacio entre hijos. Por defecto, 4. Usa 0 para eliminarlo.
padding number | { x, y, top, ...} Todos Margen interior. Un número se aplica a todos los lados. El objeto acepta x, y, top, right, bottom, left.
margin number | { x, y, top, ...} Todos Margen exterior. Misma forma que padding.
wrap "wrap" | "truncate" | "ellipsis" text Qué hacer con el texto que no cabe. wrap (por defecto) salta de línea, truncate lo corta y ellipsis añade ….