Integration checklist
This page is the one to hand to a PAM engineering team. It states who does what, in what order, how to test, and how to go live — so the integration lands without back-and-forth.
Roles: who does what
The integration is a two-sided setup. Most configuration is on the operator side (in PlaylogiQ); the PAM side is a straightforward HTTP sender.
Operator (PlaylogiQ side) — you
- Create the brand the PAM will feed (Settings → Brands), if it doesn’t exist.
- Issue a brand-pinned API key with the Ingestion only access level
(Settings → Integrations → New API key). Copy the
plq_…value once and hand it to the PAM over a secure channel. - Configure the mapping for that brand (Settings → Integrations → PAM mapping) once you know the PAM’s event names and payload shape — see Mapping engine. Use the live tester with real sample payloads from the PAM.
- Verify events land correctly (dashboard Players/Analytics + the mapping page’s ingestion log).
PAM (integrator) — them
- Receive the base URL, the
plq_…key, and (optionally) the agreed event names from the operator. - Implement the sender:
POST /api/v1/eventswith thex-api-keyheader, pushing events in real time (or micro-batched), with anevent_idper event for idempotent retries. See Event ingestion API. - Send sample payloads for each event type to the operator early, so the operator can build and test the mapping against real data.
- Handle responses: retry
5xx/429(honourRetry-After), fix4xx, and monitorunknown_event_typesin responses.
The PAM does not need to know PlaylogiQ’s canonical model. It sends its own shapes; the operator maps them. The only hard requirements on the PAM are a stable
player_id, a consistentevent_typestring per event kind, and anevent_idfor idempotency.
What the PAM must provide to the operator
To build the mapping, the operator needs from the PAM:
- The list of event types the PAM will send (its own names).
- A sample raw payload for each event type (real JSON).
- Which payload fields carry: amount and its unit (major units or cents), currency, payment method, and player identity fields (email, name, country, …) on registration.
- The player identifier the PAM will use as
player_id(and confirmation it’s stable and unique per player within the brand). - Expected volume (events/second peak) so limits can be confirmed.
Recommended sequence
Operator: create brand ──► issue ingest key ──► send key to PAM
PAM: build sender ──► send SAMPLE payloads (per event type) to operator
Operator: build mapping in the tester using those samples ──► save
PAM: send test events to the real endpoint (a test/staging brand)
Operator: verify in dashboard + ingestion log ──► sign off
Both: switch traffic to the production brand/key ──► monitorEnvironments & testing
- The API is self-hosted, so the operator provides the exact base URL for
each environment (e.g.
https://crm-api.logiqdesk.com/api/v1). - There is no shared public sandbox. To test safely, the operator creates a dedicated test brand and issues a test key pinned to it, so test traffic never touches production data. Point the PAM’s non-prod environment at that key.
- The operator validates any mapping in the live tester before enabling it — pasting the PAM’s real sample payloads shows the exact canonical output with no live traffic.
- A ready-made smoke test (
infra/smoke-test.sh) sends three events (a deposit, an idempotent re-send, and an unknown type) and checks the responses — a quick end-to-end confidence check against a test brand:BASE=https://crm-api.<host>/api/v1 KEY=plq_your_key bash infra/smoke-test.sh
Definition of done
- Ingest key issued, brand-pinned,
events:writeonly. - Mapping configured and validated in the tester for every event type.
- PAM sends every event with a stable
player_idand anevent_id. - Amounts, currency, and payment method map to canonical fields (verify a deposit shows correct revenue in Analytics).
- Registration events populate player identity (email/name/country).
- Retries +
429/Retry-Afterhandled on the PAM side. - No unexpected
unknown_event_typesin responses. - Verified end-to-end on a test brand, then switched to production.
Stability & support
- The API is versioned under
/api/v1; breaking changes would ship under a new version, not by mutatingv1. - The canonical event set may gain types over time (additive, non-breaking).
- Coordinate the base URL, keys, and any volume-limit changes with the operator.
See also: Authentication · Event ingestion API · Mapping engine · Recipes & scenarios · Canonical event catalog.