Skip to main content

First tenant setup

This walkthrough takes you from fresh signup to first welcome bonus journey in about 15 minutes.

1. Sign up + create tenant

Go to app.casinocrm.io/sign-up. Clerk handles auth — pick a workspace name; it becomes your tenant.

2. Configure your tenant

Navigate to Settings → Tenant configuration. Three things to set:

FieldWhat it does
License jurisdictionAuto-suggests verticals + KYC model + RG features for your license. Pick the closest to yours; override below.
VerticalsWhich products you run — casino, sportsbook, lottery, poker, esports, virtual_sports, bingo. Disabled verticals hide their reports + segments + journeys from the UI.
KYC modelplatform_owns (your platform handles KYC, CRM mirrors webhooks) / crm_owns (CRM initiates, platform listens) / dual (mixed by KYC level) / none (no KYC tracked).

Click Save configuration — capabilities cache invalidates within seconds.

3. Set up your first project

A project is a logical environment within a tenant (production / staging / dev). Every API call carries a project's API key. Most operators run a single project; multi-project comes into play when you want strict separation between staging events and production.

Navigate to Settings → ProjectsCreate project. Note the API key — you'll need it in step 5.

4. Add a messaging provider

Navigate to Providers → Add provider. Pick a channel + provider:

  • Email → Postmark (server token + from address)
  • SMS → Twilio (Account SID + Auth Token + from number or Messaging Service SID)
  • Push → FCM (project_id + service-account JSON)
  • Telegram → Grammy (bot token)

Save. The credentials are encrypted at rest with the project key.

5. Send your first event

Replace YOUR_API_KEY with the project key from step 3.

curl -X POST https://api.casinocrm.io/v1/events \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event": "signup",
"external_id": "demo_player_001",
"anonymous_id": "anon_abc",
"timestamp": "2026-05-08T10:00:00Z",
"properties": {}
}'

You should see {"data":{"ingestion_id":"..."}}.

The event lands in ClickHouse + the player is upserted in Postgres. Visit Players in the admin to see it appear within ~5 seconds.

6. Identify the player

Tell UCRM "this anonymous_id is actually player+demo01@example.com":

curl -X POST https://api.casinocrm.io/v1/players/identify \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "demo_player_001",
"anonymous_id": "anon_abc",
"traits": {
"email": "player+demo01@example.com",
"phone": "+15551234567"
}
}'

The player now has email + phone + can receive campaigns.

7. Create your first segment

Navigate to Segments → New segment → name it "All players" → leave the condition empty (matches everyone) → Save. UCRM materializes the membership; the GIN index on players.segment_ids[] makes campaign fan-out fast even on 1M-player tenants.

8. Author your first template

Navigate to Templates → New template → pick channel email, paste:

<p>Welcome, {{first_name | default: "player"}}!</p>
<p>Here's your free spin code: <strong>WELCOME10</strong></p>

Variables in {{double-curlies}} are Mustache-rendered against the player's traits.

9. Build your first journey

Navigate to Journeys → New journey → trigger signup → drop a wait 24h node → drop send_message (pick your template + provider) → connect to end.

Click Activate — UCRM listens for signup events on this project; every new signup walks the graph.

10. Watch it work

Trigger another signup event for demo_player_002. Within seconds you'll see:

  • New player row in the Players list
  • Journey run starting in Journeys → Runs
  • After 24 hours of wait, the email sends; Campaigns → Recipients shows delivery status

You're operational. Next steps: