Partner API V1

Endpoint claro para conectar POS externos sin acceso a la base de datos.

WAGMI recibe catalogo y facturas por endpoints versionados. Cada request entra firmado, con idempotencia, staging y auditoria antes de afectar contabilidad o reportes del cliente.

Endpoints

Contrato publico para partners POS.

GET
/api/integrations/v1/toi/health
Validar conexion, capacidades y moneda soportada.
POST
/api/integrations/v1/toi/categories/batch
Sincronizar categorias externas.
POST
/api/integrations/v1/toi/products/batch
Sincronizar productos externos.
POST
/api/integrations/v1/toi/invoices/batch
Recibir facturas cerradas desde un POS externo.
POST
/api/integrations/v1/toi/invoices/void
Anular una factura externa staged.

Headers requeridos

Authorization
Bearer <partner_api_key>
X-WAGMI-Timestamp
ISO-8601 con zona, ejemplo 2026-05-12T14:35:00-04:00
X-WAGMI-Idempotency-Key
Llave unica por intento logico
X-WAGMI-Signature
sha256 HMAC de timestamp.idempotencyKey.rawBody

Ejemplo factura

{
  "source": "TOI",
  "sentAt": "2026-05-12T10:10:00-04:00",
  "invoices": [
    {
      "externalId": "inv-1001",
      "number": "1001",
      "issuedAt": "2026-05-12T10:09:00-04:00",
      "branchExternalId": "NACO",
      "channel": "DINE_IN",
      "customer": {
        "externalId": "cust-1",
        "name": "Cliente final",
        "rnc": null,
        "phone": null,
        "email": null
      },
      "fiscal": {
        "fiscalSource": "NONE",
        "ncf": null,
        "ecf": null,
        "ncfType": null
      },
      "currency": "DOP",
      "subtotal": 480,
      "discount": 0,
      "tax": 86.4,
      "tip": 48,
      "total": 614.4,
      "lines": [
        {
          "externalLineId": "line-1",
          "productExternalId": "prod-classic-smash",
          "name": "Classic Smash",
          "quantity": 1,
          "unitPrice": 480,
          "discount": 0,
          "tax": 86.4,
          "total": 566.4
        }
      ],
      "payments": [
        {
          "method": "CASH",
          "amount": 614.4,
          "receivedAt": "2026-05-12T10:09:30-04:00"
        }
      ]
    }
  ]
}

Idempotencia y reintentos

Si un partner reintenta el mismo evento, debe mantener la misma `X-WAGMI-Idempotency-Key` y el mismo body. Si el body cambia con la misma llave, WAGMI responde error controlado para evitar duplicados o corrupcion de imports.