E-FACTSDocs
POS integrations

POS integrations

Native adapters

These providers send webhooks in their own format. E-FACTS verifies their signature scheme and maps the payload for you.

POS / gatewayProvider slugWebhook URLSignature
Squaresquare{EFACTS_BASE_URL}/api/v1/webhooks/ingest/squareX-Square-Signature, base64 HMAC-SHA256
Cloverclover{EFACTS_BASE_URL}/api/v1/webhooks/ingest/cloverX-Clover-Auth, hex HMAC-SHA256
Stripestripe{EFACTS_BASE_URL}/api/v1/webhooks/ingest/stripeStripe-Signature

Setup is the same for each:

  1. Request credentials, listing your merchant or location IDs.
  2. In the POS or Stripe dashboard, add a webhook pointing at the URL above.
  3. Share the webhook signing secret the POS generates during onboarding.
  4. Make a test sale and confirm it appears as a digital receipt.

For Stripe, include your store ID in the PaymentIntent metadata as location_id, store_id or external_store_id.

Any other POS

Toast, Lightspeed, Shopify POS, NCR, Oracle MICROS and custom tills connect through the generic adapter, with a small connector in between.

Don't point another platform's webhook straight at E-FACTS. Their webhooks use their own payload formats (numeric IDs, nested objects) and their own signature headers, so the generic endpoint rejects them with 401 or can't read them.

The connector is usually a few dozen lines, running as a serverless function, in your middleware, or in a POS app extension. For each completed sale it:

  1. Receives the sale from your POS (its webhook, API polling or an export).
  2. Maps it to the receipt payload: IDs as strings, money in integer cents.
  3. Signs the exact body with your secret and sends it with X-Efacts-Signature (how to sign).

For on-premise systems such as NCR or MICROS, run the connector where it can read completed transactions. Anything that can make an outbound HTTPS request works.

Integrating yourself is free up to 5,000 receipts a month.

Requesting a native adapter

If you run a POS platform and want a native adapter, email info@efacts.ca with a redacted sample webhook payload and your signature documentation.