Lucra Sports Webhooks API
Manage webhook configurations to receive real-time event notifications via HTTP POST requests.---## Available Event Types| Event | Description ||-------|-------------|| `UserSignedUp` | New user registration || `UserKYCVerified` | User KYC verification completed || `FundsDeposited` | User deposited funds || `C2CWithdrawal` | Convert-to-credit withdrawal initiated || `TournamentCreated` | Tournament created || `TournamentCanceled` | Tournament canceled || `TournamentCompleted` | Tournament completed || `TournamentCompletionFailed` | Tournament completion failed (async processing error). Payload contains `failure: { code, reason, requestId, attempt, willRetry }`. `willRetry: false` is terminal — subscribe to be notified when a completion request cannot be processed. || `TournamentComplianceLimitExceeded` | Tournament completion placed on hold due to compliance payout limit || `TournamentEdited` | Tournament modified || `TournamentUserJoined` | User joined tournament || `ScoreIngestionFailed` | Score ingestion failed (async processing error). Payload contains `failure: { code, reason, requestId, attempt, willRetry }`. `willRetry: false` is terminal — subscribe to be notified when a score submission cannot be processed. || `RecreationalGameCreated` | Recreational game created || `RecreationalGameJoined` | User joined recreational game || `RecreationalGameCanceled` | Recreational game canceled || `RecreationalGameCompleted` | Recreational game completed || `RecreationalGameStarted` | Recreational game started || `RecreationalGameCompletionFailed` | Recreational game completion failed (async processing error). Payload contains `failure: { code, reason, requestId, attempt, willRetry }`. `willRetry: false` is terminal — subscribe to be notified when a completion request cannot be processed. |---## Event PayloadsAll events include an `event` field identifying the type. The remaining fields depend on the event.### Tournament EventsApplies to: `TournamentCreated`, `TournamentEdited`, `TournamentCanceled`, `TournamentCompleted`, `TournamentUserJoined`, `TournamentComplianceLimitExceeded````json{ "event": "TournamentCreated", "tenantId": "YOUR_TENANT_ID", "matchup": { }}```The `matchup` object matches the legacy tournament response shape (equivalent to the legacy `GET /api/rest/pool-tournament/{id}`)**Additional fields by event:**| Event | Extra Fields ||-------|-------------|| `TournamentCompleted` | `mode`: `"auto"` | `"manual"` | `"admin"` — how winners were determined || `TournamentUserJoined` | `newUserId`: UUID of the user who joined; `userMetadata`: their metadata || `TournamentComplianceLimitExceeded` | `complianceLimits`: compliance threshold details |**Failure events** — `TournamentCompletionFailed`, `ScoreIngestionFailed`:```json{ "event": "TournamentCompletionFailed", "tenantId": "YOUR_TENANT_ID", "entityId": "uuid", "failure": { "code": "COMPLETION_FAILED", "reason": "Human-readable description", "requestId": "uuid", "attempt": 1, "willRetry": true }}````willRetry: false` is terminal — no further delivery attempts will be made.---### Recreational Games EventsApplies to: `RecreationalGameCreated`, `RecreationalGameJoined`, `RecreationalGameCanceled`, `RecreationalGameCompleted`, `RecreationalGameStarted````json{ "event": "RecreationalGameCreated", "id": "uuid", "createdByUserId": "uuid", "gameId": "external-game-id", "status": "OPEN", "type": "RECREATIONAL_GAME", "subtype": "GROUP_VS_GROUP", "buyInAmount": 10, "isPublic": true, "winnerGroupId": null, "metadata": null, "groups": [ { "groupId": "uuid", "name": "Team Alpha", "users": [ { "userId": "uuid", "userMetadata": {}, "reward": { "type": "CASH", "value": "20.00", "metadata": null } } ] } ]}````reward.type` is `"CASH"` for buy-in games or `"TENANT_REWARD"` for reward-based games.`RecreationalGameJoined` includes an additional `joinedByUserId` field with the UUID of the user who joined.**Failure events** — `RecreationalGameCompletionFailed`, `ScoreIngestionFailed`:```json{ "event": "RecreationalGameCompletionFailed", "tenantId": "YOUR_TENANT_ID", "entityId": "uuid", "failure": { "code": "COMPLETION_FAILED", "reason": "Human-readable description", "requestId": "uuid", "attempt": 1, "willRetry": true }}````willRetry: false` is terminal — no further delivery attempts will be made.---## Configuration Limits- **Maximum 5 webhook configurations** per account- **Single-instance subscriptions**: Some events (e.g., `C2CWithdrawal`) can only exist in one configuration at a time- **Custom headers**: Optional headers added to each webhook request- **Expiration**: Optionally set an expiration date for time-limited webhooks---## Request VerificationAll webhook requests include an `X-Lucra-Signature` header containing an HMAC-SHA256 signature for payload verification.**Signature format:**```X-Lucra-Signature: sha256=```**Verification steps:**1. Extract signature from the `X-Lucra-Signature` header2. Capture the raw request body (before JSON parsing)3. Compute HMAC-SHA256 of the raw body using your sign secret4. Compare computed signature with received signature using constant-time comparison**Node.js example:**```typescriptimport crypto from 'crypto';function verifyWebhookSignature( rawBody: Buffer, signature: string, secret: string): boolean { if (!signature.startsWith('sha256=')) return false; const received = signature.substring(7); const computed = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex'); if (received.length !== computed.length) return false; return crypto.timingSafeEqual( Buffer.from(received), Buffer.from(computed) );}```---## Security Best Practices- **Use raw body** — verify signature against the raw request body before parsing JSON- **Constant-time comparison** — use timing-safe comparison functions to prevent timing attacks- **Secure secret storage** — store sign secrets in environment variables or secret managers- **HTTPS only** — only accept webhooks over HTTPS- **Idempotency** — handle duplicate webhook deliveries gracefully
Lucra Sports Webhooks API is one of 9 APIs that Lucra Sports publishes on the APIs.io network, described by a machine-readable OpenAPI specification.
Tagged areas include Webhook. The published artifact set on APIs.io includes an OpenAPI specification, API documentation, an API reference, authentication docs, and rate-limit docs.
This API exposes 4 operations across 2 paths, and defines 6 schemas. It is described by OpenAPI 3.2.0, at version 1.0.
Requests are made against 3 base URLs: /, https://forge.lucrasports.com, https://forge.sandbox.lucrasports.com.
Metadata
The identity and technical contract details declared by the specification.
Authentication & Security 1
Lucra Sports Webhooks API declares
1 security scheme
for authenticating requests.
An API key is passed in the header as X-Lucra-Api-Key (X-Lucra-Api-Key).
X-Lucra-Api-Key— API key for tenant authentication
Paths & Operations 4
Across 2 paths, the API surfaces 4 operations — 1 DELETE, 1 GET, 1 POST, 1 PUT. Each is listed below with its method, path, parameters, and response codes.
Manage webhook configurations to receive real-time event notifications via HTTP POST requests. --- Available Event Types | Event | Description | |-------|-------------| | UserSign…
Schemas 6
The contract defines 6 schemas that model the data the API accepts and returns. The most detailed are WebhookResponseDto (8 properties), WebhookCreateObjectDto (8 properties), WebhookUpdateDto (8 properties), Error (3 properties). Each schema is shown below with its type and property counts.
Specification
The full machine-readable OpenAPI contract behind this narrative.
Source
More from Lucra Sports 8
Other APIs Lucra Sports publishes across the network.
This is an independent, third-party profile of Lucra Sports Webhooks API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.
The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.
Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.
info@apievangelist.com
·
Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and
you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.