Ir al contenido

Quick Start

fiskaly proporciona APIs de cumplimiento fiscal en toda Europa. Elige su país a continuación para saltar directamente a la guía de integración, o desplázate hacia abajo para ver un ejemplo práctico de SIGN DE.


El siguiente ejemplo usa Alemania (SIGN DE) como ejemplo concreto. El flujo es: autenticar → crear un TSS → firmar una transacción.

Tiempo de realización: ~5 minutos con cURL, ~15 minutos si lo está incorporando en código de aplicación.

Necesita tres cosas antes de empezar:

  1. Una cuenta de fiskaly — regístrese gratis en hub.fiskaly.com
  2. Credenciales de API — genera un API Key y un secret en el HUB bajo tu organización
  3. Un cliente HTTP — cURL, Postman o la biblioteca HTTP de su lenguaje

Esta guía usa el entorno sandbox (TEST). Todas las nuevas organizaciones comienzan aquí. No se crean datos fiscales reales y no se te facturará.

Sandbox (TEST)Producción (LIVE)
URL basehttps://kassensichv-middleware.fiskaly.com/api/v2https://kassensichv.fiskaly.com/api/v2
DatosEfímeros — seguro para experimentarPermanentes — relevantes para auditoría
FacturaciónGratuitoPor contrato
CambioPredeterminado para nuevas orgsHabilitar a través del HUB

Intercambia tu API Key y secret por un token Bearer.

curl -X POST https://kassensichv-middleware.fiskaly.com/api/v2/auth \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_API_KEY",
    "api_secret": "YOUR_API_SECRET"
  }'

Respuesta esperada (200 OK):

{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"access_token_expires_in": 86400,
"refresh_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token_expires_in": 172800
}

El access_token es válido durante 24 horas. El refresh_token es válido durante 48 horas. Incluye el token de acceso como Authorization: Bearer <token> en todas las solicitudes posteriores.

Un TSS (Technical Security System) es el recurso de firma certificado. Necesita uno por ubicación física. Crear un TSS implica tres subpasos: crear, establecer el PIN de administrador e inicializar.

a) Crear el TSS

TSS_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Mi primer TSS"
  }'

Respuesta esperada (200 OK) — note el campo admin_puk:

{
"_id": "a1b2c3d4-...",
"description": "My first TSS",
"state": "UNINITIALIZED",
"admin_puk": "123456"
}

b) Establecer el PIN de administrador (usando el admin_puk de la respuesta anterior):

curl -X PATCH "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "admin_puk": "123456",
    "new_admin_pin": "your-secure-admin-pin"
  }'

c) Autenticarse como administrador e inicializar:

# Autenticarse como administrador
curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/auth" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "admin_pin": "your-secure-admin-pin" }'

# Inicializar el TSS
curl -X PATCH "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "state": "INITIALIZED" }'

Tras la inicialización, el state del TSS cambia a INITIALIZED. Ya puede crear clientes y firmar transacciones.

Un cliente representa un único terminal POS o instancia de aplicación conectada al TSS.

CLIENT_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/client/${CLIENT_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "serial_number": "POS-001" }'

Las transacciones tienen un ciclo de vida: iniciar (estado ACTIVE) y luego finalizar (estado FINISHED). La respuesta de finalización contiene la firma criptográfica.

a) Iniciar la transacción:

TX_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/tx/${TX_ID}?tx_revision=1" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "ACTIVE",
    "client_id": "YOUR_CLIENT_ID"
  }'

b) Finalizar la transacción (aquí es donde se genera la firma):

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/tx/${TX_ID}?tx_revision=2" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "FINISHED",
    "client_id": "YOUR_CLIENT_ID",
    "schema": {
      "standard_v1": {
        "receipt": {
          "receipt_type": "RECEIPT",
          "amounts_per_vat_rate": [
            { "vat_rate": "NORMAL", "amount": "10.00" }
          ],
          "amounts_per_payment_type": [
            { "payment_type": "CASH", "amount": "10.00" }
          ]
        }
      }
    }
  }'

Respuesta esperada (200 OK) — los campos clave son signature y qr_code_data:

{
"_id": "tx-uuid-...",
"state": "FINISHED",
"number": 1,
"time_start": 1700000000,
"time_end": 1700000001,
"signature": {
"value": "dGVzdC1zaWduYXR1cmU=",
"algorithm": "ecdsa-plain-SHA384",
"counter": 1,
"public_key": "BHHz..."
},
"qr_code_data": "V0;TSS-ID;TX-NUMBER;..."
}

La cadena qr_code_data es lo que codifica en el código QR impreso en el recibo.

Tras completar la configuración, cierra la sesión del administrador del TSS:

Ventana de terminal
curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/logout" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
ErrorCausaSolución
401 UnauthorizedToken caducado o incorrectoVuelve a autenticarte con /auth. Verifica que usa la API Key correcta para este entorno.
400 E_TSS_NOT_INITIALIZEDIntentó crear un cliente o transacción en un TSS no inicializadoCompleta los tres pasos de configuración del TSS: crear, establecer PIN de administrador, inicializar.
400 con error “admin_puk”PUK incorrecto al establecer el PIN de administradorUse el valor admin_puk de la respuesta de creación del TSS, no un valor que elegiste.
409 ConflictReutilizó un UUID que ya existeGenera un nuevo UUID para cada recurso (TSS, cliente, transacción).
422 E_TX_INVALID_STATEIntentó finalizar una transacción que no está ACTIVEInicie primero la transacción (revisión 1 con state: ACTIVE), luego finalice (revisión 2).

Para la referencia completa de errores, consulta Códigos de error.

Was this page helpful?