Ingest Transaction

Submit a provider-agnostic POS payload. Hazel normalizes, signs with ES256, and stores the receipt.

Payload

JSON
{
  "source": {
    "provider": "generic-square-demo",
    "providerTransactionId": "sq-demo-981c927b",
    "providerLocationId": "sq-loc-losangeles"
  },
  "merchant": {
    "merchantId": "merchant_salt_ramen",
    "name": "Salt Ramen",
    "category": "Restaurant",
    "location": {
      "address1": "330 E 1st Street",
      "city": "Los Angeles",
      "region": "CA",
      "postalCode": "90012",
      "country": "US"
    }
  },
  "transaction": {
    "occurredAt": "2026-10-07T10:15:18.303Z",
    "status": "completed",
    "subtotalMinor": 4300,
    "taxMinor": 366,
    "tipMinor": 500,
    "discountMinor": 200,
    "totalMinor": 4966,
    "currency": "USD"
  },
  "payment": {
    "method": "card",
    "brand": "Amex",
    "network": "amex",
    "last4": "0005",
    "cardholderName": "Morgan Blake",
    "authorizationCode": "AUTH920",
    "expiryMonth": "01",
    "expiryYear": "2028"
  },
  "lineItems": [
    {
      "description": "Iced Tea",
      "quantity": 2,
      "unitPriceMinor": 450,
      "grossMinor": 900,
      "taxMinor": 77,
      "totalMinor": 977
    },
    {
      "description": "Citrus Spritz",
      "quantity": 3,
      "unitPriceMinor": 850,
      "grossMinor": 2550,
      "taxMinor": 217,
      "totalMinor": 2767
    },
    {
      "description": "Citrus Spritz",
      "quantity": 1,
      "unitPriceMinor": 850,
      "grossMinor": 850,
      "taxMinor": 72,
      "totalMinor": 922
    }
  ],
  "rawPayload": {
    "demoNonce": "981c927b",
    "payloadVersion": "demo-1"
  }
}

Each sample randomizes the merchant, line items, card, and provider. Every payload gets a unique providerTransactionId.

Signed Receipt

The signed receipt will appear here

Submit a transaction to see the result