Social contests in your app
We handle identity, contests, scoring, leaderboards, feeds, and real-time infrastructure while you keep your fans, authentication, and data.
One API for fans, contests, and prizes
Three building blocks cover the full lifecycle — from identifying fans to delivering prizes — without storing what shouldn't leave your app.
$ curl https://api.soucher.com/v2/platform/identities \
-H "Authorization: Bearer fcn_live_..." \
-d tenant_user_id="user_42" \
-d display_name="Alex M." \
-d country="GB"Fans Contest runs every contest on Soucher.
Live prediction games, quizzes, and tournaments for sports fans across iOS and Android — built end-to-end on the Soucher API.


Move fast. Sleep at night.
Three guarantees that make Soucher safe to plug into production — a typed public API, hardened webhook delivery, and tenant isolation that's never an opt-in.
One API, same shape for everyone
Tenant-scoped REST endpoints for identity, contests, scoring, leaderboards, and prize delivery. Whatever your stack — Rails, Node, Go, Django — you integrate the same way Adidas would.

Signed webhooks, hardened
HMAC-SHA256 signed events. Exponential backoff. Idempotency keys. Dead-letter routing on permanent failure. The boring stuff, done right.

Multi-tenant isolation
Every row carries a tenant_id. No shared schemas. No cross-tenant leaks. Your data stays yours.

Idempotent writes
Send the same event twice; the second is a no-op. No double-scores, no double-charges.
Geo-eligibility
Restrict participation by country at the contest level. Server-enforced, not client-trusted.
Bracket tournaments
Multi-round contests with seeding, advancement rules, and full bracket trees.
Sponsored prizes
Attach sponsor brands and reward currencies to any contest. Multiple sponsors per contest supported.
Anti-cheat blocks
PI-to-PI blocks, submission anti-cheat, and juror review for creative contests.
Live leaderboards
Ranks recompute on every scored entry. Pushed to your endpoint via webhook.
Every contest format, one API
From prediction polls to creative submissions, the same integration ships any format. Configure the rules; ship the contest.
Why brands trust us
Three disciplines underpin everything we ship: how we hold your fans, how we deliver events, and how we keep your data yours.
PlatformIdentity
Lightweight fan records. Display name plus optional geo. We never store emails or phones.
Tenant API keys
fcn_* keys with rotation, scoping, and per-key audit. Issue and revoke without downtime.
Tenant-scoped reads
Every query carries tenant_id. Cross-tenant leaks are impossible at the row level.
Signed webhooks
HMAC-SHA256 signatures per event, per tenant secret. Verify before you trust.
Idempotency keys
Send the same event twice; the second is a no-op. Safe to retry, always.
Dead-letter on failure
After max attempts, events land in a queue you can replay, inspect, or audit.
Audit log
Every tenant-bound action timestamped, scoped, and queryable. No mysteries.
OpenTelemetry traces
Distributed traces from API call to webhook delivery. Exportable to your stack.
Per-tenant isolation
Strict tenant boundaries. No shared schemas, no shared queries, no surprise leaks.
Pricing scales with your contests
We're in private beta with custom pricing for each integration. Tell us about your fans, your contests, and your timeline — we'll write the right deal.

What integrators ask first
Every request needs a tenant API key in the Authorization header — keys look like fcn_<env>_<prefix><secret>. The platform verifies the key, resolves your tenant, and applies tenant scoping on every query. Fan authentication stays on your side — your fans never log into us.
Every webhook is signed with HMAC-SHA256 using a per-tenant secret. The signature ships in an X-Soucher-Signature header — verify before you trust. Replay attacks are blocked by per-event idempotency keys.
No emails, no phone numbers, no real names, no payment details. The platform stores a PlatformIdentity per fan — your tenant_user_id plus optional display name and country. Everything else lives in your database.
Retries with exponential backoff for up to 24 hours. After max attempts, the event lands in a dead-letter queue you can inspect, replay, or audit. You will never silently lose an event.
Yes. Send your existing user IDs as tenant_user_id when creating PlatformIdentities and we mint platform UUIDs you can store alongside. Migration is one bulk API call — no exports, no schema mapping.
A weekend for a proof of concept; a sprint for production. The integration surface is one API plus your webhook endpoints — most of the work is in your own code (mapping our PI UUID to your user id, writing webhook handlers, dispatching notifications and rewards your way).
Ship your first contest this sprint.
Apply for a private-beta tenant. Keys in days. Integrated within a sprint.

