Ir al contenido

Integración paso a paso

Esta guía te lleva a través del proceso completo de configuración de tu sistema con fiskaly SIGN DE, usando una combinación del fiskaly HUB, la Management API y la API SIGN DE. Al finalizar, tendráss una organización gestionada completamente aprovisionada con un TSS y un cliente listos para firmar transacciones.

Antes de comenzar la configuración, esto es lo que configurará:

🏢

Cuenta y grupo

Su Cuenta es la entidad de nivel superior creada al registrarte en el HUB — representa tu empresa como proveedor de TPV o comerciante. Un Grupo es una capa intermedia dentro de la Cuenta que se utiliza para agrupar organizaciones gestionadas de forma lógica (p. ej., un Grupo por país).

🔑

Clave API y token

Credenciales generadas en el HUB y tokens obtenidos de la Management API y SIGN DE, usados para autenticar todas las solicitudes posteriores.

🏬

Organización gestionada

Representa una única ubicación física (p. ej., una tienda o restaurante), llamada Unit en el HUB. Creada a través de la Management API y vinculada a un Grupo dentro de su Cuenta.

🛡️

TSS (Sistema de seguridad técnica)

El componente de firma principal. Debe crearse, configurarse con un PIN de administrador e inicializarse antes de poder firmar transacciones.

💻

Cliente

Representa un terminal de punto de venta o una aplicación que crea transacciones contra un TSS.

🧾

Transacción

Un registro fiscal firmado. Una vez que su TSS y Cliente estén listos, puede iniciar y finalizar transacciones para generar firmas criptográficas.

El diagrama a continuación muestra los diez pasos de la integración de SIGN DE. Haz clic en cualquier mosaico para ir al paso de configuración correspondiente.

SIGN DE integration workflowTen-step SIGN DE integration workflow with tiles linking to the matching setup steps below.Register on HUBHUBCreate Account &OrganizationGroupHUBCreate API KeyHUBCreate Token(Management API)Management APICreate managedorganization(s)Management APICreate API Key(managed org)Management APICreate Token(SIGN DE)SIGN DE APICreate TSSSIGN DE APICreate ClientSIGN DE APICreateTransactionSIGN DE API
  1. Registrarse en el HUB

    Ve a hub.fiskaly.com y crea tu cuenta fiskaly. Recibirá un correo electrónico de confirmación — haz clic en el enlaza para verificar su dirección y activar tu cuenta.

  2. Crear Cuenta y Grupo

    Cuando inicia sesión en el HUB por primera vez, se te pide que configura su Cuenta — la entidad de nivel superior que representa tu empresa (proveedor de TPV o comerciante). El HUB también te guiará para crear un Grupo, una capa intermedia dentro de su Cuenta para agrupar organizaciones gestionadas de forma lógica (por ejemplo, un Grupo por país).

    Creación de organización en HUB

    Después de completar la configuración, el HUB mostrará su resumen actual — inicialmente con 0 TSS y 0 clientes.

    Resumen del HUB
  3. Crear clave API

    Navega a la sección Claves API en el fiskaly HUB y crea una nueva clave API para su Cuenta.

    Sección de claves API en fiskaly HUB

    Recibirá una Clave API y un Secreto API. Guárdelos de forma segura — los necesitará para todas las solicitudes API posteriores.

  4. Crear token (Management API)

    Use la Clave API y el Secreto del paso anterior para obtener un token de acceso a la Management API.

    curl -X POST https://dashboard.fiskaly.com/api/v0/auth \
      -H "Content-Type: application/json" \
      -d '{
        "api_key": "your_api_key",
        "api_secret": "your_api_secret"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "access_token_claims": {
    "env": "TEST",
    "organization_id": "00000000-0000-0000-0000-000000000000"
    },
    "access_token_expires_in": 300,
    "access_token_expires_at": 1577833200,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token_expires_in": 300,
    "refresh_token_expires_at": 1577833200
    }

    Use el access_token como token Bearer en el encabezado Authorization para todas las solicitudes de la Management API.

  5. Crear organización(es) gestionada(s)

    Crea una o más organizaciones gestionadas (también llamadas Units en el HUB) bajo su Grupo. Cada Unit generalmente representa una única ubicación física como una tienda o restaurante.

    curl -X POST "https://dashboard.fiskaly.com/api/v0/organizations" \
      -H "Authorization: Bearer ${MANAGEMENT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "My Store Berlin",
        "managed_by_organization_id": "your-group-id",
        "address_line1": "Unter den Linden 1",
        "zip": "10117",
        "town": "Berlin",
        "country_code": "DEU"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-managed-org-id",
    "_type": "ORGANIZATION",
    "name": "My Store Berlin",
    "managed_by_organization_id": "your-group-id",
    "address_line1": "Unter den Linden 1",
    "zip": "10117",
    "town": "Berlin",
    "country_code": "DEU",
    "state": "active",
    "time_creation": "2026-03-01T10:00:00Z"
    }

    Anota el _id de la respuesta — este es su ID de organización gestionada, necesario para el siguiente paso.

  6. Crear clave API (organización gestionada)

    Genera una clave API dedicada para la organización gestionada. Esta clave se usará para autenticar las solicitudes de la API SIGN DE con alcance limitado a esa organización.

    curl -X POST "https://dashboard.fiskaly.com/api/v0/organizations/${ORG_ID}/api-keys" \
      -H "Authorization: Bearer ${MANAGEMENT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "sign-de-key",
        "status": "enabled",
        "managed_by_organization_id": "your-group-id"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-api-key-id",
    "_type": "MANAGED_API_KEY",
    "_envs": ["TEST"],
    "name": "sign-de-key",
    "key": "your-api-key",
    "secret": "your-api-secret",
    "status": "enabled",
    "managed_by_organization_id": "your-group-id",
    "created_at": 1577833200
    }
  7. Crear token (SIGN DE)

    Use la clave y el secreto API de la organización gestionada para obtener un token de acceso a SIGN DE.

    curl -X POST https://kassensichv-middleware.fiskaly.com/api/v2/auth \
      -H "Content-Type: application/json" \
      -d '{
        "api_key": "managed_org_api_key",
        "api_secret": "managed_org_api_secret"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "access_token_claims": {
    "env": "TESTING",
    "organization_id": "your-managed-org-id"
    },
    "access_token_expires_in": 86400,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token_expires_in": 172800
    }

    Use este access_token como token Bearer para todas las solicitudes posteriores a la API SIGN DE.

  8. Crear TSS

    Crea un nuevo Sistema de Seguridad Técnica (TSS) enviando una solicitud PUT con un ID de TSS único (UUID). El TSS debe inicializarse antes de poder firmar transacciones.

    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 '{"metadata": {}}'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-tss-id",
    "_type": "TSS",
    "_env": "TEST",
    "_version": "2.2.2",
    "admin_puk": "initial-puk-from-creation",
    "state": "CREATED",
    "serial_number": "a1b2c3d4e5f6...",
    "public_key": "MFkwEwYH...",
    "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "signature_algorithm": "ECDSA",
    "signature_timestamp_format": "unixTime",
    "transaction_data_encoding": "UTF-8",
    "max_number_registered_clients": 100,
    "max_number_active_transactions": 1000,
    "time_creation": 1577833200,
    "metadata": {}
    }

    Después de la creación, inicialice el TSS en cuatro subpasos:

    a) Personalizar el TSS

    Mueva el TSS del estado CREATED al estado UNINITIALIZED antes de cambiar el PIN de administrador:

    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": "UNINITIALIZED"}'

    b) Cambiar el PIN de administrador

    El TSS se crea en un estado UNINITIALIZED. Debe establecer un nuevo PIN de administrador usando el admin_puk de la respuesta de creación.

    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": "puk-from-creation-response",
        "new_admin_pin": "your-secure-admin-pin"
      }'

    c) 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"
      }'

    d) Inicializar el TSS

    Actualiza el estado del TSS a INITIALIZED:

    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"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-tss-id",
    "_type": "TSS",
    "state": "INITIALIZED",
    "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "serial_number": "a1b2c3d4e5f6...",
    "signature_algorithm": "ECDSA",
    "max_number_registered_clients": 100,
    "max_number_active_transactions": 1000,
    "time_creation": "2026-03-01T10:00:00Z"
    }
    curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/logout" \
      -H "Authorization: Bearer ${ACCESS_TOKEN}"
  9. Crear cliente

    Con el TSS inicializado, crea un cliente que represente su terminal de punto de venta o aplicación.

    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"
      }'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-client-id",
    "_type": "CLIENT",
    "serial_number": "POS-001",
    "state": "REGISTERED",
    "tss_id": "your-tss-id",
    "time_creation": "2026-03-01T10:00:00Z"
    }
  10. Operaciones diarias: Crear transacción

    Ahora que su TSS y Cliente están aprovisionados, está listo para las operaciones diarias. Las transacciones siguen un ciclo de vida de dos pasos que se corresponde con el flujo de pago real:

    • Iniciar la transacción (abrir la caja) — envía solo state: "ACTIVE" y client_id. No se requiere ningún esquema de recibo en este momento.
    • Finalizar la transacción (después de completar el pago) — envía el esquema de recibo completo con importes y tipo de pago para generar 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

    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" }
              ]
            }
          }
        }
      }'
    Ejemplo de respuesta (200 OK)
    {
    "_id": "your-tx-id",
    "_type": "TRANSACTION",
    "state": "FINISHED",
    "client_id": "your-client-id",
    "tss_id": "your-tss-id",
    "time_start": "2026-03-01T10:00:00Z",
    "time_end": "2026-03-01T10:05:00Z",
    "qr_code_data": "V0;955002-00;Kassenbeleg-V1;...",
    "signature": {
    "value": "MEUCIQDx...",
    "timestamp": "2026-03-01T10:05:00Z",
    "serial_number": "a1b2c3d4e5f6..."
    }
    }

    La respuesta incluye la transacción firmada con un string qr_code_data para el código QR del recibo y una signature criptográfica del TSS.

Was this page helpful?