{"openapi":"3.1.0","info":{"title":"KinetX Operator API","version":"1.0.0","summary":"Players, wallet, payments, games, bonuses, responsible gaming and reports for API and Turnkey operators.","description":"Server-to-server API of the KinetX iGaming platform. Every request is signed with HMAC-SHA256: `X-Signature` = hex HMAC-SHA256 of `METHOD\\nREQUEST_URI\\nX-Timestamp\\nBODY` (plus `\\nX-Nonce` when sent), keyed with your API secret. `X-Timestamp` is Unix seconds (±300 s) and a signature is accepted once.\n\nAmounts are integers in minor units of the currency; timestamps are ISO 8601 UTC. Errors use `{\"error\": {\"code\", \"message\", \"details\"}}`. POST requests accept an `Idempotency-Key` header (responses replayed for 24 hours).\n\nPlayer session endpoints (`/player/*`) are called by your front end with a short-lived player token: `Authorization: Bearer kxp_…`.\n\nDeveloper guide: https://kinetx.amhtechnologies.com/developers","contact":{"name":"KinetX integration support","email":"support@kinetx.io"}},"servers":[{"url":"https://kinetx.amhtechnologies.com","description":"KinetX platform"}],"tags":[{"name":"Account","description":"Check your credentials and see which operator and scopes the key belongs to."},{"name":"Players","description":"Register players, read and update their profiles and status, and issue player session tokens for your front end."},{"name":"Wallet","description":"Real and bonus balances and the transaction ledger of a player."},{"name":"Payments","description":"Record deposits collected by your own payment provider, request withdrawals and follow their status."},{"name":"Games","description":"The game catalogue (providers, categories, RTP) and game launch URLs."},{"name":"Bonuses","description":"Your bonus catalogue, granting bonuses, redeeming promo codes and the bonuses of a player."},{"name":"Responsible gaming","description":"Deposit, bet, loss, balance and session limits with cooling-off periods, and self-exclusion."},{"name":"Reports","description":"GGR and payment summaries for a date range."},{"name":"Player session","description":"Endpoints your front end calls directly with a player session token (Authorization: Bearer)."}],"security":[{"ApiKey":[],"Timestamp":[],"Signature":[]}],"paths":{"/api/v1/operator/me":{"get":{"operationId":"operatorMe","summary":"Get the calling API key","description":"Returns the API key, its scopes and rate limit, the operator it belongs to and the server time. Use it to test request signing.","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/Nonce"}],"responses":{"200":{"description":"Get the calling API key","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"api_key":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"rate_limit_per_minute":{"type":"integer"},"expires_at":{"type":["string","integer","object","array","null"]}}},"operator":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"currency":{"type":"string"},"cooperation_model":{"type":"string"}}},"server_time":{"type":"string"}}}}},"example":{"data":{"api_key":{"key":"kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d","name":"Production integration","scopes":["players:read","players:write","wallet:read","payments:write"],"rate_limit_per_minute":600,"expires_at":null},"operator":{"id":3,"slug":"lucky-orbit","name":"Lucky Orbit","currency":"EUR","cooperation_model":"turnkey"},"server_time":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/api/v1/operator/players":{"get":{"operationId":"operatorPlayersIndex","summary":"List players","description":"Players of your operator account, newest first.\n\nRequired scope: `players:read`.","tags":["Players"],"parameters":[{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"description":"Account status.","schema":{"type":"string","enum":["active","locked","closed"]}},{"name":"email","in":"query","required":false,"description":"Exact e-mail address.","schema":{"type":"string"}},{"name":"username","in":"query","required":false,"description":"Exact username.","schema":{"type":"string"}},{"name":"external_id","in":"query","required":false,"description":"Your own player id.","schema":{"type":"string"}},{"name":"kyc_status","in":"query","required":false,"description":"KYC status.","schema":{"type":"string","enum":["not_started","pending_review","verified","rejected","expired"]}},{"name":"search","in":"query","required":false,"description":"Part of the username, e-mail or last name.","schema":{"type":"string"}},{"name":"created_from","in":"query","required":false,"description":"Only records created at or after this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"created_to","in":"query","required":false,"description":"Only records created at or before this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"players:read","responses":{"200":{"description":"List players","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["VALIDATION_FAILED"]},"post":{"operationId":"operatorPlayersStore","summary":"Register a player","description":"Creates the player with real and bonus wallets and default limits. Players must be 18 or older and confirm the terms; username, e-mail, phone and external id are unique per operator. A registration matching the identity of a currently self-excluded player (personal id, document number, or name and date of birth) is refused. A promo code is redeemed on registration when valid. Sends the player.registered webhook.\n\nRequired scope: `players:write`.","tags":["Players"],"parameters":[{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"players:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","description":"3–30 characters: letters, digits, dashes and underscores."},"email":{"type":"string","format":"email","description":"E-mail address (stored in lower case)."},"first_name":{"type":"string","description":"First name as on the identity document."},"last_name":{"type":"string","description":"Last name as on the identity document."},"birth_date":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD); the player must be at least 18."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country of residence."},"terms_accepted":{"type":"boolean","description":"The player confirmed being 18+ and accepted your terms."},"external_id":{"type":"string","description":"Your own player id (unique per operator)."},"password":{"type":"string","description":"Only when players also sign in on a KinetX-hosted site; at least 8 characters with letters and digits. A random password is set otherwise."},"middle_name":{"type":"string","description":"Middle name."},"gender":{"type":"string","enum":["male","female","other"],"description":"Gender."},"city":{"type":"string","description":"City."},"address":{"type":"string","description":"Street address."},"zip_code":{"type":"string","description":"Postal code."},"phone":{"type":"string","description":"Phone in international format (unique per operator)."},"personal_id":{"type":"string","description":"National personal identification number."},"document_number":{"type":"string","description":"Identity document number."},"language":{"type":"string","description":"Two-letter language code (default en)."},"currency":{"type":"string","description":"Wallet currency, an active ISO 4217 code (default: the operator currency)."},"promo_code":{"type":"string","description":"Registration promo code."},"affiliate_id":{"type":"string","description":"Affiliate id."},"btag":{"type":"string","description":"Affiliate tracking tag."},"registration_ip":{"type":"string","description":"IP address of the player at registration (used by the risk engine)."},"terms_version":{"type":"string","description":"Version of the terms the player accepted."},"marketing":{"type":"object","properties":{"email":{"type":"boolean","description":"Consent to marketing e-mails."},"sms":{"type":"boolean","description":"Consent to marketing SMS."},"newsletter":{"type":"boolean","description":"Consent to the newsletter."}}},"is_test":{"type":"boolean","description":"Test account, left out of reports."}},"required":["username","email","first_name","last_name","birth_date","country","terms_accepted"]},"example":{"username":"jane_doe","email":"jane@example.com","first_name":"Jane","last_name":"Doe","birth_date":"1990-04-12","country":"MT","terms_accepted":true,"external_id":"op-58213","gender":"female","city":"Valletta","phone":"+35699123456","document_number":"P1234567","language":"en","registration_ip":"203.0.113.10","marketing":{"email":true}}}}},"responses":{"201":{"description":"Register a player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["VALIDATION_FAILED","SELF_EXCLUDED_IDENTITY"]}},"/api/v1/operator/players/{player}":{"get":{"operationId":"operatorPlayersShow","summary":"Get a player","description":"Profile, status, KYC status, restrictions and self-exclusion of a player.\n\nRequired scope: `players:read`.","tags":["Players"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"players:read","responses":{"200":{"description":"Get a player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]},"patch":{"operationId":"operatorPlayersUpdate","summary":"Update a player profile","description":"Changes only the fields sent. Every change is written to the player audit log in the backoffice.\n\nRequired scope: `players:write`.","tags":["Players"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"players:write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"E-mail address."},"first_name":{"type":"string","description":"First name."},"last_name":{"type":"string","description":"Last name."},"birth_date":{"type":"string","format":"date","description":"Date of birth (18+)."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country."},"city":{"type":"string","description":"City."},"address":{"type":"string","description":"Street address."},"phone":{"type":"string","description":"Phone in international format."},"external_id":{"type":"string","description":"Your own player id."},"language":{"type":"string","description":"Two-letter language code."},"marketing":{"type":"object","properties":{"email":{"type":"boolean","description":"Consent to marketing e-mails."}}}},"required":[]},"example":{"city":"Sliema","marketing":{"email":false}}}}},"responses":{"200":{"description":"Update a player profile","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED"]}},"/api/v1/operator/players/{player}/status":{"put":{"operationId":"operatorPlayersStatus","summary":"Change the account status","description":"Activates, locks or closes the account. The reason is kept as a note on the player.\n\nRequired scope: `players:write`.","tags":["Players"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"players:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","locked","closed"],"description":"New status."},"reason":{"type":"string","description":"Why the status changed."}},"required":["status"]},"example":{"status":"locked","reason":"Chargeback dispute"}}}},"responses":{"200":{"description":"Change the account status","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED"]}},"/api/v1/operator/players/{player}/session-tokens":{"post":{"operationId":"operatorPlayersSessionTokens","summary":"Issue a player session token","description":"A short-lived token your front end uses to call the player session endpoints (Authorization: Bearer). Tokens stop working when they expire or when the API key is revoked. Never expose your API secret to browsers or apps.\n\nRequired scope: `players:write`.","tags":["Players"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"players:write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ttl_minutes":{"type":"integer","description":"Lifetime in minutes, 1–720 (default 30)."}},"required":[]},"example":{"ttl_minutes":30}}}},"responses":{"201":{"description":"Issue a player session token","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"token":{"type":"string"},"token_type":{"type":"string"},"player_id":{"type":"integer"},"expires_at":{"type":"string"}}}}},"example":{"data":{"token":"kxp_eyJwIjoxMDQyLCJjIjo0LCJlIjoxNzYwNTIwNjAwfQ.N2Yz…","token_type":"Bearer","player_id":1042,"expires_at":"2026-10-15T10:00:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","PLAYER_RESTRICTED"]}},"/api/v1/operator/players/{player}/wallet":{"get":{"operationId":"operatorPlayersWallet","summary":"Get the balances","description":"Real and bonus balances in minor units, and how much the player may still withdraw without KYC verification (null = no limit).\n\nRequired scope: `wallet:read`.","tags":["Wallet"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"wallet:read","responses":{"200":{"description":"Get the balances","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"player_id":{"type":"integer"},"currency":{"type":"string"},"balance":{"type":"integer"},"bonus_balance":{"type":"integer"},"unverified_withdrawal_allowance":{"type":"integer"},"wallets":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"balance":{"type":"integer"},"currency":{"type":"string"},"updated_at":{"type":"string"}}}}}}}},"example":{"data":{"player_id":1042,"currency":"EUR","balance":12550,"bonus_balance":2000,"unverified_withdrawal_allowance":50000,"wallets":[{"type":"real","balance":12550,"currency":"EUR","updated_at":"2026-10-15T09:30:00Z"},{"type":"bonus","balance":2000,"currency":"EUR","updated_at":"2026-10-15T09:30:00Z"}]}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]}},"/api/v1/operator/players/{player}/transactions":{"get":{"operationId":"operatorPlayersTransactions","summary":"List transactions","description":"The append-only ledger of the player, newest first. Amounts are signed: credits are positive, debits negative.\n\nRequired scope: `wallet:read`.","tags":["Wallet"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}},{"name":"type","in":"query","required":false,"description":"Transaction type.","schema":{"type":"string","enum":["deposit","withdrawal","withdrawal_rejection","correction_up","correction_down","bonus_correction_up","bonus_correction_down","bonus_conversion","casino_bet","casino_win","casino_rollback","loyalty_exchange","tournament_prize","chargeback"]}},{"name":"wallet","in":"query","required":false,"description":"Wallet.","schema":{"type":"string","enum":["real","bonus"]}},{"name":"created_from","in":"query","required":false,"description":"Only records created at or after this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"created_to","in":"query","required":false,"description":"Only records created at or before this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"wallet:read","responses":{"200":{"description":"List transactions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"wallet":{"type":"string"},"type":{"type":"string"},"amount":{"type":"integer"},"balance_after":{"type":"integer"},"currency":{"type":"string"},"payment_request_id":{"type":"integer"},"game_id":{"type":["string","integer","object","array","null"]},"game_round_id":{"type":["string","integer","object","array","null"]},"player_bonus_id":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":88231,"player_id":1042,"wallet":"real","type":"deposit","amount":10000,"balance_after":12550,"currency":"EUR","payment_request_id":5120,"game_id":null,"game_round_id":null,"player_bonus_id":null,"created_at":"2026-10-15T09:30:00Z"}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED"]}},"/api/v1/operator/payment-methods":{"get":{"operationId":"operatorPaymentMethodsIndex","summary":"List payment methods","description":"Active payment methods for your currency. Use the code as payment_method.\n\nRequired scope: `payments:read`.","tags":["Payments"],"parameters":[{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"payments:read","responses":{"200":{"description":"List payment methods","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"supports_deposit":{"type":"boolean"},"supports_withdrawal":{"type":"boolean"},"min_deposit":{"type":"integer"},"max_deposit":{"type":"integer"},"min_withdrawal":{"type":"integer"},"max_withdrawal":{"type":"integer"},"currencies":{"type":"array","items":{"type":"string"}}}}}}},"example":{"data":[{"code":"visa-mastercard","name":"Visa / Mastercard","supports_deposit":true,"supports_withdrawal":true,"min_deposit":1000,"max_deposit":500000,"min_withdrawal":2000,"max_withdrawal":1000000,"currencies":["EUR","USD"]}]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/api/v1/operator/payments":{"get":{"operationId":"operatorPaymentsIndex","summary":"List deposits and withdrawals","description":"Payment requests of your players, newest first.\n\nRequired scope: `payments:read`.","tags":["Payments"],"parameters":[{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}},{"name":"player_id","in":"query","required":false,"description":"Only this player.","schema":{"type":"integer"}},{"name":"type","in":"query","required":false,"description":"Deposit or withdrawal.","schema":{"type":"string","enum":["deposit","withdrawal"]}},{"name":"status","in":"query","required":false,"description":"Request status.","schema":{"type":"string","enum":["new","allowed","paid","rejected","cancelled"]}},{"name":"external_reference","in":"query","required":false,"description":"Your payment reference.","schema":{"type":"string"}},{"name":"created_from","in":"query","required":false,"description":"Only records created at or after this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"created_to","in":"query","required":false,"description":"Only records created at or before this moment (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"payments:read","responses":{"200":{"description":"List deposits and withdrawals","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":["string","integer","object","array","null"]},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":"string"},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":5120,"type":"deposit","status":"paid","player_id":1042,"amount":10000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"psp_tx_7781","info":null,"reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":"2026-10-15T09:30:00Z","rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["VALIDATION_FAILED"]}},"/api/v1/operator/payments/{payment}":{"get":{"operationId":"operatorPaymentsShow","summary":"Get a payment","description":"Status of one deposit or withdrawal: new → allowed → paid, or rejected / cancelled.\n\nRequired scope: `payments:read`.","tags":["Payments"],"parameters":[{"name":"payment","in":"path","required":true,"description":"Payment request id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"payments:read","responses":{"200":{"description":"Get a payment","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":"string"},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":"string"},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":5121,"type":"withdrawal","status":"paid","player_id":1042,"amount":5000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242","reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":"2026-10-15T09:30:00Z","rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]}},"/api/v1/operator/players/{player}/deposits":{"post":{"operationId":"operatorPlayersDepositsStore","summary":"Record a paid deposit","description":"For Turnkey and API operators that collect deposits with their own payment provider: records the deposit as paid and credits the real wallet at once. Idempotent on external_reference — repeating it returns the original deposit (200); the same reference with another player or amount is refused. Deposit limits, self-exclusion and AML rules apply: if a deposit is refused, refund it on your side. Sends the deposit.paid webhook.\n\nRequired scope: `payments:write`.","tags":["Payments"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"integer","description":"Amount in minor units of the player currency."},"external_reference":{"type":"string","description":"Your unique payment reference (e.g. the PSP transaction id)."},"payment_method":{"type":"string","description":"Payment method code."},"info":{"type":"string","description":"Payment details shown to staff (e.g. masked card)."},"notes":{"type":"string","description":"Internal note."}},"required":["amount","external_reference"]},"example":{"amount":10000,"external_reference":"psp_tx_7781","payment_method":"visa-mastercard"}}}},"responses":{"201":{"description":"Record a paid deposit","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":["string","integer","object","array","null"]},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":"string"},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":5120,"type":"deposit","status":"paid","player_id":1042,"amount":10000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"psp_tx_7781","info":null,"reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":"2026-10-15T09:30:00Z","rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED","FEATURE_NOT_AVAILABLE","PLAYER_RESTRICTED","LIMIT_EXCEEDED","PAYMENT_REQUEST_INVALID","DUPLICATE_TRANSACTION"]}},"/api/v1/operator/players/{player}/withdrawals":{"post":{"operationId":"operatorPlayersWithdrawalsStore","summary":"Request a withdrawal","description":"Holds the amount on the real wallet and creates a withdrawal request for approval in the backoffice (four-eyes approval above your threshold). KYC thresholds, withdrawal limits and AML rules apply; running bonuses are forfeited when your settings say so. Idempotent on external_reference. Sends withdrawal.requested, then withdrawal.paid or withdrawal.rejected.\n\nRequired scope: `payments:write`.","tags":["Payments"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"integer","description":"Amount in minor units of the player currency."},"payment_method":{"type":"string","description":"Payment method code."},"external_reference":{"type":"string","description":"Your unique reference for this withdrawal."},"info":{"type":"string","description":"Payout details (e.g. masked card, wallet address)."},"bank_name":{"type":"string","description":"Bank name."},"notes":{"type":"string","description":"Internal note."}},"required":["amount","payment_method"]},"example":{"amount":5000,"payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242"}}}},"responses":{"201":{"description":"Request a withdrawal","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":"string"},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":["string","integer","object","array","null"]},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":5121,"type":"withdrawal","status":"new","player_id":1042,"amount":5000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242","reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":null,"rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED","INSUFFICIENT_FUNDS","KYC_REQUIRED","PLAYER_RESTRICTED","PAYMENT_REQUEST_INVALID","DUPLICATE_TRANSACTION"]}},"/api/v1/operator/games":{"get":{"operationId":"operatorGamesIndex","summary":"List games","description":"Active games of active providers, by name.\n\nRequired scope: `games:read`.","tags":["Games"],"parameters":[{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}},{"name":"provider","in":"query","required":false,"description":"Provider slug.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Category (see the categories endpoint).","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"RNG or live.","schema":{"type":"string","enum":["rng","live"]}},{"name":"search","in":"query","required":false,"description":"Part of the game name.","schema":{"type":"string"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"games:read","responses":{"200":{"description":"List games","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"rtp":{"type":"number"},"thumbnail_url":{"type":"string"},"is_original":{"type":"boolean"},"provider":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"}}}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":311,"external_id":"acme-book-of-gold","name":"Book of Gold","type":"rng","category":"Slots","rtp":96.2,"thumbnail_url":"https://cdn.example.com/games/book-of-gold.webp","is_original":false,"provider":{"id":7,"slug":"acme-gaming","name":"Acme Gaming"}}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["VALIDATION_FAILED"]}},"/api/v1/operator/games/providers":{"get":{"operationId":"operatorGamesProviders","summary":"List game providers","description":"Active providers with their number of active games.\n\nRequired scope: `games:read`.","tags":["Games"],"parameters":[{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"games:read","responses":{"200":{"description":"List game providers","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"games_count":{"type":"integer"}}}}}},"example":{"data":[{"id":7,"slug":"acme-gaming","name":"Acme Gaming","games_count":148}]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/api/v1/operator/games/categories":{"get":{"operationId":"operatorGamesCategories","summary":"List game categories","description":"Categories of the active games with their game count.\n\nRequired scope: `games:read`.","tags":["Games"],"parameters":[{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"games:read","responses":{"200":{"description":"List game categories","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"games_count":{"type":"integer"}}}}}},"example":{"data":[{"category":"Slots","games_count":412},{"category":"Live Casino","games_count":96}]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/api/v1/operator/games/{game}":{"get":{"operationId":"operatorGamesShow","summary":"Get a game","description":"One game of the catalogue.\n\nRequired scope: `games:read`.","tags":["Games"],"parameters":[{"name":"game","in":"path","required":true,"description":"Game id from the catalogue.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"games:read","responses":{"200":{"description":"Get a game","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"rtp":{"type":"number"},"thumbnail_url":{"type":"string"},"is_original":{"type":"boolean"},"provider":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"}}}}}}},"example":{"data":{"id":311,"external_id":"acme-book-of-gold","name":"Book of Gold","type":"rng","category":"Slots","rtp":96.2,"thumbnail_url":"https://cdn.example.com/games/book-of-gold.webp","is_original":false,"provider":{"id":7,"slug":"acme-gaming","name":"Acme Gaming"}}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]}},"/api/v1/operator/players/{player}/games/{game}/launch":{"post":{"operationId":"operatorPlayersGamesLaunch","summary":"Launch a game","description":"Real mode opens a 12-hour wallet session (the provider settles bets through the seamless wallet) after the responsible-gaming checks: account status, self-exclusion and session time limit. Demo mode returns the provider free-play URL. KinetX Originals have no provider URL (launch_url is null): play them with POST /player/games/{game}/play.\n\nRequired scope: `games:launch`.","tags":["Games"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"name":"game","in":"path","required":true,"description":"Game id from the catalogue.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"games:launch","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["real","demo"],"description":"`real` (default) opens a wallet session; `demo` returns the free-play URL."},"platform":{"type":"string","enum":["desktop","mobile","web","ios","android"],"description":"Device of the player."},"ip":{"type":"string","description":"IP address of the player."}},"required":[]}}}},"responses":{"201":{"description":"Launch a game","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string"},"game_id":{"type":"integer"},"launch_url":{"type":"string"},"session_token":{"type":"string"},"expires_at":{"type":"string"},"is_original":{"type":"boolean"}}}}},"example":{"data":{"mode":"real","game_id":311,"launch_url":"https://games.acme.example/launch?game=acme-book-of-gold&token=Yq3…&currency=EUR&language=en","session_token":"Yq3h0W2bVd…","expires_at":"2026-10-15T21:30:00Z","is_original":false}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","PLAYER_RESTRICTED","LIMIT_EXCEEDED"]}},"/api/v1/operator/bonuses":{"get":{"operationId":"operatorBonusesIndex","summary":"List your bonuses","description":"Active bonuses of your catalogue (amounts in minor units of the operator currency).\n\nRequired scope: `bonuses:read`.","tags":["Bonuses"],"parameters":[{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"bonuses:read","responses":{"200":{"description":"List your bonuses","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"default_amount":{"type":"integer"},"wagering_multiplier":{"type":"integer"},"valid_days":{"type":"integer"},"max_bet":{"type":"integer"},"max_conversion_multiplier":{"type":"integer"},"max_grants_per_player":{"type":"integer"},"is_active":{"type":"boolean"}}}}}},"example":{"data":[{"id":12,"name":"Welcome Bonus 100%","description":"100% match up to €200, 35x wagering","type":"wagering_bonus","default_amount":20000,"wagering_multiplier":35,"valid_days":30,"max_bet":500,"max_conversion_multiplier":10,"max_grants_per_player":1,"is_active":true}]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/api/v1/operator/players/{player}/bonuses":{"get":{"operationId":"operatorPlayersBonusesIndex","summary":"List the bonuses of a player","description":"Granted bonuses with their wagering progress, newest first.\n\nRequired scope: `bonuses:read`.","tags":["Bonuses"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}},{"name":"state","in":"query","required":false,"description":"Bonus state.","schema":{"type":"string","enum":["pending","activated","finished"]}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"bonuses:read","responses":{"200":{"description":"List the bonuses of a player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"bonus_id":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"},"state":{"type":"string"},"result":{"type":"string"},"amount":{"type":"integer"},"currency":{"type":"string"},"wager_requirement":{"type":"integer"},"wagered_amount":{"type":"integer"},"wagering_progress":{"type":"integer"},"converted_amount":{"type":"integer"},"forfeited_amount":{"type":"integer"},"max_bet":{"type":"integer"},"started_at":{"type":"string"},"expires_at":{"type":"string"},"finished_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":9001,"player_id":1042,"bonus_id":12,"name":"Welcome Bonus 100%","type":"wagering_bonus","state":"activated","result":"none","amount":20000,"currency":"EUR","wager_requirement":700000,"wagered_amount":175000,"wagering_progress":25,"converted_amount":0,"forfeited_amount":0,"max_bet":500,"started_at":"2026-10-15T09:30:00Z","expires_at":"2026-11-14T09:30:00Z","finished_at":null,"created_at":"2026-10-15T09:30:00Z"}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]},"post":{"operationId":"operatorPlayersBonusesStore","summary":"Grant a bonus","description":"Grants a bonus of your catalogue through the bonus engine: credited at once, or queued while another bonus is being wagered; bonuses without wagering are paid out instantly. Sends bonus.granted (and bonus.completed when it finishes).\n\nRequired scope: `bonuses:write`.","tags":["Bonuses"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"bonuses:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bonus_id":{"type":"integer","description":"Bonus id from your catalogue."},"amount":{"type":"integer","description":"Amount in minor units of the player currency (default: the bonus default amount)."},"note":{"type":"string","description":"Internal note."}},"required":["bonus_id"]},"example":{"bonus_id":12,"amount":20000}}}},"responses":{"201":{"description":"Grant a bonus","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"bonus_id":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"},"state":{"type":"string"},"result":{"type":"string"},"amount":{"type":"integer"},"currency":{"type":"string"},"wager_requirement":{"type":"integer"},"wagered_amount":{"type":"integer"},"wagering_progress":{"type":"integer"},"converted_amount":{"type":"integer"},"forfeited_amount":{"type":"integer"},"max_bet":{"type":"integer"},"started_at":{"type":"string"},"expires_at":{"type":"string"},"finished_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}}}},"example":{"data":{"id":9001,"player_id":1042,"bonus_id":12,"name":"Welcome Bonus 100%","type":"wagering_bonus","state":"activated","result":"none","amount":20000,"currency":"EUR","wager_requirement":700000,"wagered_amount":175000,"wagering_progress":25,"converted_amount":0,"forfeited_amount":0,"max_bet":500,"started_at":"2026-10-15T09:30:00Z","expires_at":"2026-11-14T09:30:00Z","finished_at":null,"created_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED","BONUS_INVALID"]}},"/api/v1/operator/players/{player}/promo-codes":{"post":{"operationId":"operatorPlayersPromoCodesStore","summary":"Redeem a promo code","description":"Redeems one of your promo codes for the player and grants its bonus.\n\nRequired scope: `bonuses:write`.","tags":["Bonuses"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"bonuses:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Promo code (case-insensitive)."}},"required":["code"]},"example":{"code":"SPIN50"}}}},"responses":{"201":{"description":"Redeem a promo code","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"redemption_id":{"type":"integer"},"code":{"type":"string"},"bonus":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"bonus_id":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"},"state":{"type":"string"},"result":{"type":"string"},"amount":{"type":"integer"},"currency":{"type":"string"},"wager_requirement":{"type":"integer"},"wagered_amount":{"type":"integer"},"wagering_progress":{"type":"integer"},"converted_amount":{"type":"integer"},"forfeited_amount":{"type":"integer"},"max_bet":{"type":"integer"},"started_at":{"type":"string"},"expires_at":{"type":"string"},"finished_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}}}}}},"example":{"data":{"redemption_id":318,"code":"SPIN50","bonus":{"id":9001,"player_id":1042,"bonus_id":12,"name":"Welcome Bonus 100%","type":"wagering_bonus","state":"activated","result":"none","amount":20000,"currency":"EUR","wager_requirement":700000,"wagered_amount":175000,"wagering_progress":25,"converted_amount":0,"forfeited_amount":0,"max_bet":500,"started_at":"2026-10-15T09:30:00Z","expires_at":"2026-11-14T09:30:00Z","finished_at":null,"created_at":"2026-10-15T09:30:00Z"}}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED","PROMO_CODE_INVALID","BONUS_INVALID"]}},"/api/v1/operator/players/{player}/limits":{"get":{"operationId":"operatorPlayersLimitsShow","summary":"Get the limits","description":"Current limits (money in minor units, max_session_minutes in minutes, null = no limit), raised or removed limits still in their cooling-off period, and the self-exclusion.\n\nRequired scope: `players:read`.","tags":["Responsible gaming"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"players:read","responses":{"200":{"description":"Get the limits","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"player_id":{"type":"integer"},"currency":{"type":"string"},"limits":{"type":"object","properties":{"max_single_bet":{"type":["string","integer","object","array","null"]},"max_daily_bet":{"type":["string","integer","object","array","null"]},"max_weekly_bet":{"type":["string","integer","object","array","null"]},"max_monthly_bet":{"type":["string","integer","object","array","null"]},"casino_max_single_bet":{"type":["string","integer","object","array","null"]},"casino_max_daily_bet":{"type":["string","integer","object","array","null"]},"max_daily_loss":{"type":["string","integer","object","array","null"]},"max_weekly_loss":{"type":["string","integer","object","array","null"]},"max_monthly_loss":{"type":["string","integer","object","array","null"]},"max_single_deposit":{"type":["string","integer","object","array","null"]},"max_daily_deposit":{"type":"integer"},"max_weekly_deposit":{"type":"integer"},"max_monthly_deposit":{"type":["string","integer","object","array","null"]},"max_yearly_deposit":{"type":["string","integer","object","array","null"]},"max_balance":{"type":["string","integer","object","array","null"]},"max_session_minutes":{"type":"integer"}}},"pending_changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"current_value":{"type":"integer"},"requested_value":{"type":"integer"},"effective_at":{"type":"string"}}}},"self_exclusion":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":{"player_id":1042,"currency":"EUR","limits":{"max_single_bet":null,"max_daily_bet":null,"max_weekly_bet":null,"max_monthly_bet":null,"casino_max_single_bet":null,"casino_max_daily_bet":null,"max_daily_loss":null,"max_weekly_loss":null,"max_monthly_loss":null,"max_single_deposit":null,"max_daily_deposit":20000,"max_weekly_deposit":100000,"max_monthly_deposit":null,"max_yearly_deposit":null,"max_balance":null,"max_session_minutes":120},"pending_changes":[{"field":"max_weekly_deposit","current_value":100000,"requested_value":200000,"effective_at":"2026-10-16T09:30:00Z"}],"self_exclusion":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND"]},"put":{"operationId":"operatorPlayersLimitsUpdate","summary":"Set limits","description":"Only the limits sent change. New and lower limits apply immediately; raised or removed (null) limits take effect after your cooling-off period and appear in pending_changes meanwhile. Limits: max_single_bet, max_daily_bet, max_weekly_bet, max_monthly_bet, casino_max_single_bet, casino_max_daily_bet, max_daily_loss, max_weekly_loss, max_monthly_loss, max_single_deposit, max_daily_deposit, max_weekly_deposit, max_monthly_deposit, max_yearly_deposit, max_balance, max_session_minutes.\n\nRequired scope: `limits:write`.","tags":["Responsible gaming"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"limits:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"limits":{"type":"object","description":"Limit name => value (minor units; minutes for max_session_minutes, 5–1440; null removes the limit)."}},"required":["limits"]},"example":{"limits":{"max_daily_deposit":20000,"max_weekly_deposit":200000,"max_session_minutes":120}}}}},"responses":{"200":{"description":"Set limits","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"player_id":{"type":"integer"},"currency":{"type":"string"},"limits":{"type":"object","properties":{"max_single_bet":{"type":["string","integer","object","array","null"]},"max_daily_bet":{"type":["string","integer","object","array","null"]},"max_weekly_bet":{"type":["string","integer","object","array","null"]},"max_monthly_bet":{"type":["string","integer","object","array","null"]},"casino_max_single_bet":{"type":["string","integer","object","array","null"]},"casino_max_daily_bet":{"type":["string","integer","object","array","null"]},"max_daily_loss":{"type":["string","integer","object","array","null"]},"max_weekly_loss":{"type":["string","integer","object","array","null"]},"max_monthly_loss":{"type":["string","integer","object","array","null"]},"max_single_deposit":{"type":["string","integer","object","array","null"]},"max_daily_deposit":{"type":"integer"},"max_weekly_deposit":{"type":"integer"},"max_monthly_deposit":{"type":["string","integer","object","array","null"]},"max_yearly_deposit":{"type":["string","integer","object","array","null"]},"max_balance":{"type":["string","integer","object","array","null"]},"max_session_minutes":{"type":"integer"}}},"pending_changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"current_value":{"type":"integer"},"requested_value":{"type":"integer"},"effective_at":{"type":"string"}}}},"self_exclusion":{"type":["string","integer","object","array","null"]}}},"meta":{"type":"object","properties":{"applied":{"type":"array","items":{"type":"string"}},"pending":{"type":"array","items":{"type":"string"}},"cooling_off_hours":{"type":"integer"}}}}},"example":{"data":{"player_id":1042,"currency":"EUR","limits":{"max_single_bet":null,"max_daily_bet":null,"max_weekly_bet":null,"max_monthly_bet":null,"casino_max_single_bet":null,"casino_max_daily_bet":null,"max_daily_loss":null,"max_weekly_loss":null,"max_monthly_loss":null,"max_single_deposit":null,"max_daily_deposit":20000,"max_weekly_deposit":100000,"max_monthly_deposit":null,"max_yearly_deposit":null,"max_balance":null,"max_session_minutes":120},"pending_changes":[{"field":"max_weekly_deposit","current_value":100000,"requested_value":200000,"effective_at":"2026-10-16T09:30:00Z"}],"self_exclusion":null},"meta":{"applied":["max_daily_deposit","max_session_minutes"],"pending":["max_weekly_deposit"],"cooling_off_hours":24}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED"]}},"/api/v1/operator/players/{player}/self-exclusion":{"post":{"operationId":"operatorPlayersSelfExclusionStore","summary":"Self-exclude a player","description":"Starts or extends a time-out or self-exclusion; it can never be shortened or lifted through the API. Self-excluded players cannot play, deposit or receive bonuses, but may withdraw their balance. Send either period or until.\n\nRequired scope: `limits:write`.","tags":["Responsible gaming"],"parameters":[{"name":"player","in":"path","required":true,"description":"KinetX player id.","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Nonce"},{"$ref":"#/components/parameters/IdempotencyKey"}],"x-required-scope":"limits:write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"period":{"type":"string","enum":["24_hours","7_days","30_days","3_months","6_months","12_months","5_years"],"description":"A fixed period (time-out up to 30 days, self-exclusion from 3 months)."},"until":{"type":"string","format":"date-time","description":"End of the exclusion (ISO 8601), instead of period."},"type":{"type":"string","enum":["self_exclusion","time_out","self_closure"],"description":"Overrides the type derived from the period."}},"required":[]},"example":{"period":"6_months"}}}},"responses":{"201":{"description":"Self-exclude a player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"player_id":{"type":"integer"},"currency":{"type":"string"},"limits":{"type":"object","properties":{"max_single_bet":{"type":["string","integer","object","array","null"]},"max_daily_bet":{"type":["string","integer","object","array","null"]},"max_weekly_bet":{"type":["string","integer","object","array","null"]},"max_monthly_bet":{"type":["string","integer","object","array","null"]},"casino_max_single_bet":{"type":["string","integer","object","array","null"]},"casino_max_daily_bet":{"type":["string","integer","object","array","null"]},"max_daily_loss":{"type":["string","integer","object","array","null"]},"max_weekly_loss":{"type":["string","integer","object","array","null"]},"max_monthly_loss":{"type":["string","integer","object","array","null"]},"max_single_deposit":{"type":["string","integer","object","array","null"]},"max_daily_deposit":{"type":"integer"},"max_weekly_deposit":{"type":"integer"},"max_monthly_deposit":{"type":["string","integer","object","array","null"]},"max_yearly_deposit":{"type":["string","integer","object","array","null"]},"max_balance":{"type":["string","integer","object","array","null"]},"max_session_minutes":{"type":"integer"}}},"pending_changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"current_value":{"type":"integer"},"requested_value":{"type":"integer"},"effective_at":{"type":"string"}}}},"self_exclusion":{"type":"object","properties":{"type":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"}}}}}}},"example":{"data":{"player_id":1042,"currency":"EUR","limits":{"max_single_bet":null,"max_daily_bet":null,"max_weekly_bet":null,"max_monthly_bet":null,"casino_max_single_bet":null,"casino_max_daily_bet":null,"max_daily_loss":null,"max_weekly_loss":null,"max_monthly_loss":null,"max_single_deposit":null,"max_daily_deposit":20000,"max_weekly_deposit":100000,"max_monthly_deposit":null,"max_yearly_deposit":null,"max_balance":null,"max_session_minutes":120},"pending_changes":[{"field":"max_weekly_deposit","current_value":100000,"requested_value":200000,"effective_at":"2026-10-16T09:30:00Z"}],"self_exclusion":{"type":"self_exclusion","since":"2026-10-15T09:30:00Z","until":"2027-04-15T09:30:00Z"}}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["NOT_FOUND","VALIDATION_FAILED","RESPONSIBLE_GAMING_RULE"]}},"/api/v1/operator/reports/ggr":{"get":{"operationId":"operatorReportsGgr","summary":"GGR summary","description":"Casino bets, wins and GGR (total, per game type and per provider), bonus conversions, net gaming revenue, deposits and withdrawals, and registrations for a UTC date range, in your currency (minor units) — the same figures as the backoffice dashboard. Provider rows include bonus-money bets (bonus_bets). At most 366 days.\n\nRequired scope: `reports:read`.","tags":["Reports"],"parameters":[{"name":"from","in":"query","required":true,"description":"First day (YYYY-MM-DD, UTC).","schema":{"type":"string","format":"date"},"example":"2026-10-01"},{"name":"to","in":"query","required":true,"description":"Last day (YYYY-MM-DD, UTC), inclusive.","schema":{"type":"string","format":"date"},"example":"2026-10-14"},{"name":"include_test_players","in":"query","required":false,"description":"Include test accounts (default false).","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/Nonce"}],"x-required-scope":"reports:read","responses":{"200":{"description":"GGR summary","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"currency":{"type":"string"},"include_test_players":{"type":"boolean"},"casino":{"type":"object","properties":{"bets":{"type":"integer"},"wins":{"type":"integer"},"ggr":{"type":"integer"},"rounds":{"type":"integer"},"players":{"type":"integer"},"by_type":{"type":"object","properties":{"rng":{"type":"object","properties":{"bets":{"type":"integer"},"wins":{"type":"integer"},"ggr":{"type":"integer"},"rounds":{"type":"integer"},"players":{"type":"integer"}}},"live":{"type":"object","properties":{"bets":{"type":"integer"},"wins":{"type":"integer"},"ggr":{"type":"integer"},"rounds":{"type":"integer"},"players":{"type":"integer"}}}}},"by_provider":{"type":"array","items":{"type":"object","properties":{"provider_id":{"type":"integer"},"provider":{"type":"string"},"bets":{"type":"integer"},"wins":{"type":"integer"},"ggr":{"type":"integer"},"bonus_bets":{"type":"integer"},"rounds":{"type":"integer"}}}}}},"bonus_conversions":{"type":"integer"},"net_gaming_revenue":{"type":"integer"},"payments":{"type":"object","properties":{"deposits":{"type":"integer"},"depositing_players":{"type":"integer"},"withdrawals":{"type":"integer"},"withdrawing_players":{"type":"integer"},"net_deposits":{"type":"integer"}}},"players":{"type":"object","properties":{"registered":{"type":"integer"}}}}}}},"example":{"data":{"from":"2026-10-01","to":"2026-10-14","currency":"EUR","include_test_players":false,"casino":{"bets":18450000,"wins":17312000,"ggr":1138000,"rounds":412882,"players":1840,"by_type":{"rng":{"bets":15120000,"wins":14210000,"ggr":910000,"rounds":398114,"players":1702},"live":{"bets":3330000,"wins":3102000,"ggr":228000,"rounds":14768,"players":403}},"by_provider":[{"provider_id":7,"provider":"Acme Gaming","bets":9880000,"wins":9301000,"ggr":579000,"bonus_bets":412000,"rounds":233190}]},"bonus_conversions":214000,"net_gaming_revenue":924000,"payments":{"deposits":6120000,"depositing_players":1211,"withdrawals":3980000,"withdrawing_players":402,"net_deposits":2140000},"players":{"registered":932}}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["VALIDATION_FAILED"]}},"/api/v1/player/me":{"get":{"operationId":"playerMe","summary":"Get the signed-in player","description":"Profile of the player the session token was issued for.","tags":["Player session"],"parameters":[],"security":[{"PlayerToken":[]}],"responses":{"200":{"description":"Get the signed-in player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}},"example":{"data":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["INVALID_PLAYER_TOKEN"]}},"/api/v1/player/wallet":{"get":{"operationId":"playerWallet","summary":"Get the player balances","description":"Real and bonus balance of the signed-in player.","tags":["Player session"],"parameters":[],"security":[{"PlayerToken":[]}],"responses":{"200":{"description":"Get the player balances","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"player_id":{"type":"integer"},"currency":{"type":"string"},"balance":{"type":"integer"},"bonus_balance":{"type":"integer"}}}}},"example":{"data":{"player_id":1042,"currency":"EUR","balance":12550,"bonus_balance":2000}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["INVALID_PLAYER_TOKEN"]}},"/api/v1/player/transactions":{"get":{"operationId":"playerTransactions","summary":"List the player transactions","description":"Ledger of the signed-in player, newest first.","tags":["Player session"],"parameters":[{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1–100 (default 25).","schema":{"type":"integer"}}],"security":[{"PlayerToken":[]}],"responses":{"200":{"description":"List the player transactions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"wallet":{"type":"string"},"type":{"type":"string"},"amount":{"type":"integer"},"balance_after":{"type":"integer"},"currency":{"type":"string"},"payment_request_id":{"type":"integer"},"game_id":{"type":["string","integer","object","array","null"]},"game_round_id":{"type":["string","integer","object","array","null"]},"player_bonus_id":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"last_page":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"}}},"links":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":["string","integer","object","array","null"]},"next":{"type":["string","integer","object","array","null"]}}}}},"example":{"data":[{"id":88231,"player_id":1042,"wallet":"real","type":"deposit","amount":10000,"balance_after":12550,"currency":"EUR","payment_request_id":5120,"game_id":null,"game_round_id":null,"player_bonus_id":null,"created_at":"2026-10-15T09:30:00Z"}],"meta":{"current_page":1,"per_page":25,"total":1,"last_page":1,"from":1,"to":1},"links":{"first":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","last":"https://kinetx.amhtechnologies.com/api/v1/operator/…?page=1","prev":null,"next":null}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["INVALID_PLAYER_TOKEN"]}},"/api/v1/player/games/{game}/launch":{"post":{"operationId":"playerGamesLaunch","summary":"Launch a game for the player","description":"Same as the operator launch endpoint, for the signed-in player (the IP defaults to the caller).","tags":["Player session"],"parameters":[{"name":"game","in":"path","required":true,"description":"Game id from the catalogue.","schema":{"type":"integer"}}],"security":[{"PlayerToken":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["real","demo"],"description":"`real` (default) opens a wallet session; `demo` returns the free-play URL."},"platform":{"type":"string","enum":["desktop","mobile","web","ios","android"],"description":"Device of the player."},"ip":{"type":"string","description":"IP address of the player."}},"required":[]}}}},"responses":{"201":{"description":"Launch a game for the player","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string"},"game_id":{"type":"integer"},"launch_url":{"type":"string"},"session_token":{"type":"string"},"expires_at":{"type":"string"},"is_original":{"type":"boolean"}}}}},"example":{"data":{"mode":"real","game_id":311,"launch_url":"https://games.acme.example/launch?game=acme-book-of-gold&token=Yq3…&currency=EUR&language=en","session_token":"Yq3h0W2bVd…","expires_at":"2026-10-15T21:30:00Z","is_original":false}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["INVALID_PLAYER_TOKEN","NOT_FOUND","PLAYER_RESTRICTED","LIMIT_EXCEEDED"]}},"/api/v1/player/games/{game}/play":{"post":{"operationId":"playerGamesPlay","summary":"Play a KinetX Original round","description":"Plays one real-money round of a KinetX Original (kx-slot, kx-roulette, kx-crash) through the casino wallet; bet limits, bonus rules and loss limits apply. The slot needs no params; roulette takes params.bet (red, black, even, odd, low, high … or number with params.number 0–36); crash takes params.target (cash-out multiplier 1.01–1000).","tags":["Player session"],"parameters":[{"name":"game","in":"path","required":true,"description":"Game id from the catalogue.","schema":{"type":"integer"}}],"security":[{"PlayerToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stake":{"type":"integer","description":"Stake in minor units."},"params":{"type":"object","description":"Game-specific options."}},"required":["stake"]},"example":{"stake":100}}}},"responses":{"200":{"description":"Play a KinetX Original round","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"round_id":{"type":"string"},"stake":{"type":"integer"},"payout":{"type":"integer"},"outcome":{"type":"object","properties":{"grid":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"line":{"type":"array","items":{"type":"string"}},"multiplier":{"type":"number"}}},"balance":{"type":"integer"},"bonus_balance":{"type":"integer"},"currency":{"type":"string"}}}}},"example":{"data":{"round_id":"9b1f8c3e-4a1d-4f0e-9a52-7d2c1e0b6a11","stake":100,"payout":250,"outcome":{"grid":[["cherry","seven","bell"],["lemon","seven","bar"],["plum","seven","cherry"]],"line":["seven","seven","seven"],"multiplier":2.5},"balance":12700,"bonus_balance":0,"currency":"EUR"}}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"x-error-codes":["INVALID_PLAYER_TOKEN","NOT_FOUND","NOT_AN_ORIGINAL","VALIDATION_FAILED","INSUFFICIENT_FUNDS","PLAYER_RESTRICTED","LIMIT_EXCEEDED","BONUS_INVALID"]}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApiSpec","summary":"This OpenAPI document","tags":["Account"],"security":[],"responses":{"200":{"description":"OpenAPI 3.1 JSON","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Public key id of your API key (kx_live_…)."},"Timestamp":{"type":"apiKey","in":"header","name":"X-Timestamp","description":"Current Unix time in seconds."},"Signature":{"type":"apiKey","in":"header","name":"X-Signature","description":"Hex HMAC-SHA256 of the string to sign, keyed with the API secret."},"PlayerToken":{"type":"http","scheme":"bearer","bearerFormat":"kxp","description":"Player session token from POST /operator/players/{player}/session-tokens."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the POST safe to retry: the first response is stored and replayed for the same key and request."},"Nonce":{"name":"X-Nonce","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"Optional unique value, appended to the string to sign, for byte-identical requests within one second."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","details"],"properties":{"code":{"type":"string","enum":["MISSING_CREDENTIALS","INVALID_API_KEY","API_KEY_INACTIVE","TIMESTAMP_OUT_OF_RANGE","INVALID_NONCE","INVALID_SIGNATURE","REPLAYED_REQUEST","INVALID_PLAYER_TOKEN","IP_NOT_ALLOWED","INSUFFICIENT_SCOPE","FEATURE_NOT_AVAILABLE","NOT_FOUND","METHOD_NOT_ALLOWED","IDEMPOTENCY_IN_PROGRESS","DUPLICATE_TRANSACTION","INSUFFICIENT_FUNDS","VALIDATION_FAILED","INVALID_REQUEST","IDEMPOTENCY_KEY_REUSED","INVALID_IDEMPOTENCY_KEY","SELF_EXCLUDED_IDENTITY","PLAYER_RESTRICTED","LIMIT_EXCEEDED","RESPONSIBLE_GAMING_RULE","KYC_REQUIRED","PAYMENT_REQUEST_INVALID","BONUS_INVALID","PROMO_CODE_INVALID","NOT_AN_ORIGINAL","RATE_LIMITED","SERVER_ERROR"]},"message":{"type":"string"},"details":{"description":"Field errors (VALIDATION_FAILED) or extra context; null otherwise."}}}}},"Scope":{"type":"string","enum":["players:read","players:write","limits:write","wallet:read","payments:read","payments:write","games:read","games:launch","bonuses:read","bonuses:write","reports:read"]},"WebhookEvent":{"type":"string","enum":["player.registered","deposit.paid","withdrawal.requested","withdrawal.paid","withdrawal.rejected","bonus.granted","bonus.completed","kyc.status_changed","compliance.alert_created","ping"]}},"responses":{"Error":{"description":"Error envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"webhooks":{"player.registered":{"post":{"summary":"A player registered (website, backoffice or API)","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"middle_name":{"type":["string","integer","object","array","null"]},"last_name":{"type":"string"},"gender":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"zip_code":{"type":"string"},"phone":{"type":"string"},"personal_id":{"type":["string","integer","object","array","null"]},"document_number":{"type":"string"},"language":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"kyc_status":{"type":"string"},"is_verified":{"type":"boolean"},"risk_level":{"type":"string"},"is_test":{"type":"boolean"},"restrictions":{"type":"object","properties":{"can_login":{"type":"boolean"},"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"can_bet":{"type":"boolean"},"excluded_from_bonuses":{"type":"boolean"}}},"self_exclusion":{"type":["string","integer","object","array","null"]},"marketing":{"type":"object","properties":{"email":{"type":"boolean"},"sms":{"type":"boolean"},"newsletter":{"type":"boolean"}}},"registration":{"type":"object","properties":{"source":{"type":"string"},"ip":{"type":"string"},"promo_code":{"type":"string"},"affiliate_id":{"type":"string"},"btag":{"type":["string","integer","object","array","null"]}}},"last_login_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"player.registered","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"player":{"id":1042,"external_id":"op-58213","username":"jane_doe","email":"jane@example.com","first_name":"Jane","middle_name":null,"last_name":"Doe","gender":"female","birth_date":"1990-04-12","country":"MT","city":"Valletta","address":"12 Republic Street","zip_code":"VLT 1110","phone":"+35699123456","personal_id":null,"document_number":"P1234567","language":"en","currency":"EUR","status":"active","category":"new_user","kyc_status":"not_started","is_verified":false,"risk_level":"low","is_test":false,"restrictions":{"can_login":true,"can_deposit":true,"can_withdraw":true,"can_bet":true,"excluded_from_bonuses":false},"self_exclusion":null,"marketing":{"email":true,"sms":false,"newsletter":false},"registration":{"source":"api","ip":"203.0.113.10","promo_code":"WELCOME100","affiliate_id":"aff-204","btag":null},"last_login_at":null,"created_at":"2026-10-15T09:30:00Z","updated_at":"2026-10-15T09:30:00Z"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"deposit.paid":{"post":{"summary":"A deposit was paid and credited to the wallet","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"payment":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":["string","integer","object","array","null"]},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":"string"},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"deposit.paid","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"payment":{"id":5120,"type":"deposit","status":"paid","player_id":1042,"amount":10000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"psp_tx_7781","info":null,"reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":"2026-10-15T09:30:00Z","rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"withdrawal.requested":{"post":{"summary":"A player requested a withdrawal (the amount is held)","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"payment":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":"string"},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":["string","integer","object","array","null"]},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"withdrawal.requested","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"payment":{"id":5121,"type":"withdrawal","status":"new","player_id":1042,"amount":5000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242","reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":null,"rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"withdrawal.paid":{"post":{"summary":"A withdrawal was paid out","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"payment":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":"string"},"reject_reason":{"type":["string","integer","object","array","null"]},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":"string"},"rejected_at":{"type":["string","integer","object","array","null"]},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"withdrawal.paid","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"payment":{"id":5121,"type":"withdrawal","status":"paid","player_id":1042,"amount":5000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242","reject_reason":null,"is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":"2026-10-15T09:30:00Z","rejected_at":null,"cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"withdrawal.rejected":{"post":{"summary":"A withdrawal was rejected and the amount refunded","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"payment":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"player_id":{"type":"integer"},"amount":{"type":"integer"},"currency":{"type":"string"},"payment_method":{"type":"string"},"external_reference":{"type":"string"},"info":{"type":"string"},"reject_reason":{"type":"string"},"is_reversed":{"type":"boolean"},"created_at":{"type":"string"},"paid_at":{"type":["string","integer","object","array","null"]},"rejected_at":{"type":"string"},"cancelled_at":{"type":["string","integer","object","array","null"]},"updated_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"withdrawal.rejected","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"payment":{"id":5121,"type":"withdrawal","status":"rejected","player_id":1042,"amount":5000,"currency":"EUR","payment_method":"visa-mastercard","external_reference":"wd_20261015_001","info":"Visa **** 4242","reject_reason":"Proof of address required","is_reversed":false,"created_at":"2026-10-15T09:30:00Z","paid_at":null,"rejected_at":"2026-10-15T09:30:00Z","cancelled_at":null,"updated_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"bonus.granted":{"post":{"summary":"A bonus was granted to a player","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"bonus":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"bonus_id":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"},"state":{"type":"string"},"result":{"type":"string"},"amount":{"type":"integer"},"currency":{"type":"string"},"wager_requirement":{"type":"integer"},"wagered_amount":{"type":"integer"},"wagering_progress":{"type":"integer"},"converted_amount":{"type":"integer"},"forfeited_amount":{"type":"integer"},"max_bet":{"type":"integer"},"started_at":{"type":"string"},"expires_at":{"type":"string"},"finished_at":{"type":["string","integer","object","array","null"]},"created_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"bonus.granted","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"bonus":{"id":9001,"player_id":1042,"bonus_id":12,"name":"Welcome Bonus 100%","type":"wagering_bonus","state":"activated","result":"none","amount":20000,"currency":"EUR","wager_requirement":700000,"wagered_amount":175000,"wagering_progress":25,"converted_amount":0,"forfeited_amount":0,"max_bet":500,"started_at":"2026-10-15T09:30:00Z","expires_at":"2026-11-14T09:30:00Z","finished_at":null,"created_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"bonus.completed":{"post":{"summary":"A bonus finished (converted, lost, expired or cancelled)","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"bonus":{"type":"object","properties":{"id":{"type":"integer"},"player_id":{"type":"integer"},"bonus_id":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"},"state":{"type":"string"},"result":{"type":"string"},"amount":{"type":"integer"},"currency":{"type":"string"},"wager_requirement":{"type":"integer"},"wagered_amount":{"type":"integer"},"wagering_progress":{"type":"integer"},"converted_amount":{"type":"integer"},"forfeited_amount":{"type":"integer"},"max_bet":{"type":"integer"},"started_at":{"type":"string"},"expires_at":{"type":"string"},"finished_at":{"type":"string"},"created_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"bonus.completed","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"bonus":{"id":9001,"player_id":1042,"bonus_id":12,"name":"Welcome Bonus 100%","type":"wagering_bonus","state":"finished","result":"paid","amount":20000,"currency":"EUR","wager_requirement":700000,"wagered_amount":700000,"wagering_progress":100,"converted_amount":18250,"forfeited_amount":0,"max_bet":500,"started_at":"2026-10-15T09:30:00Z","expires_at":"2026-11-14T09:30:00Z","finished_at":"2026-10-20T18:02:11Z","created_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}},"kyc.status_changed":{"post":{"summary":"The KYC status of a player changed","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}},"previous_status":{"type":"string"},"status":{"type":"string"},"is_verified":{"type":"boolean"}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"kyc.status_changed","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"},"previous_status":"pending_review","status":"verified","is_verified":true}}}}},"responses":{"2XX":{"description":"Received"}}}},"compliance.alert_created":{"post":{"summary":"The risk engine raised a compliance (AML) alert","description":"Signed with `X-KinetX-Signature` = hex HMAC-SHA256 of `{X-KinetX-Timestamp}.{raw body}`, keyed with the endpoint secret. Answer 2xx within 5 seconds.","parameters":[{"name":"X-KinetX-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Delivery","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-KinetX-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string"},"data":{"type":"object","properties":{"alert":{"type":"object","properties":{"id":{"type":"integer"},"rule":{"type":"string"},"severity":{"type":"string"},"status":{"type":"string"},"created_at":{"type":"string"}}},"player":{"type":"object","properties":{"id":{"type":"integer"},"external_id":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"id":"evt_01jaq3w8z6x4t2v9r7p5n3m1k0","type":"compliance.alert_created","api_version":"v1","created_at":"2026-10-15T09:30:00Z","data":{"alert":{"id":77,"rule":"large_deposit","severity":"high","status":"open","created_at":"2026-10-15T09:30:00Z"},"player":{"id":1042,"external_id":"op-58213","username":"jane_doe"}}}}}},"responses":{"2XX":{"description":"Received"}}}}}}