API reference
Every endpoint of the Operator API v1 with its scope, parameters and example responses. Examples are generated from the same resources the API returns.
Account
Check your credentials and see which operator and scopes the key belongs to.
GET
/api/v1/operator/me
Get the calling API key
Returns the API key, its scopes and rate limit, the operator it belongs to and the server time. Use it to test request signing.
GET /api/v1/operator/me HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
}
}
Players
Register players, read and update their profiles and status, and issue player session tokens for your front end.
GET
/api/v1/operator/players
List players
Players of your operator account, newest first.
players:read
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
status
string
|
Account status.
active
locked
closed
|
email
string
|
Exact e-mail address. |
username
string
|
Exact username. |
external_id
string
|
Your own player id. |
kyc_status
string
|
KYC status.
not_started
pending_review
verified
rejected
expired
|
search
string
|
Part of the username, e-mail or last name. |
created_from
string · date-time
|
Only records created at or after this moment (ISO 8601). |
created_to
string · date-time
|
Only records created at or before this moment (ISO 8601). |
GET /api/v1/operator/players HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
POST
/api/v1/operator/players
Register a player
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.
players:write
Idempotency-Key
username
string
|
required 3–30 characters: letters, digits, dashes and underscores. |
email
string · email
|
required E-mail address (stored in lower case). |
first_name
string
|
required First name as on the identity document. |
last_name
string
|
required Last name as on the identity document. |
birth_date
string · date
|
required Date of birth (YYYY-MM-DD); the player must be at least 18. |
country
string
|
required ISO 3166-1 alpha-2 country of residence. |
terms_accepted
boolean
|
required The player confirmed being 18+ and accepted your terms. |
external_id
string
|
Your own player id (unique per operator). |
password
string
|
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
string
|
Middle name. |
gender
string
|
Gender.
male
female
other
|
city
string
|
City. |
address
string
|
Street address. |
zip_code
string
|
Postal code. |
phone
string
|
Phone in international format (unique per operator). |
personal_id
string
|
National personal identification number. |
document_number
string
|
Identity document number. |
language
string
|
Two-letter language code (default en). |
currency
string
|
Wallet currency, an active ISO 4217 code (default: the operator currency). |
promo_code
string
|
Registration promo code. |
affiliate_id
string
|
Affiliate id. |
btag
string
|
Affiliate tracking tag. |
registration_ip
string
|
IP address of the player at registration (used by the risk engine). |
terms_version
string
|
Version of the terms the player accepted. |
marketing.email
boolean
|
Consent to marketing e-mails. |
marketing.sms
boolean
|
Consent to marketing SMS. |
marketing.newsletter
boolean
|
Consent to the newsletter. |
is_test
boolean
|
Test account, left out of reports. |
POST /api/v1/operator/players HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"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
}
}
{
"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"
}
}
GET
/api/v1/operator/players/{player}
Get a player
Profile, status, KYC status, restrictions and self-exclusion of a player.
players:read
player
integer
|
required KinetX player id. |
GET /api/v1/operator/players/1042 HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
}
}
PATCH
/api/v1/operator/players/{player}
Update a player profile
Changes only the fields sent. Every change is written to the player audit log in the backoffice.
players:write
player
integer
|
required KinetX player id. |
email
string · email
|
E-mail address. |
first_name
string
|
First name. |
last_name
string
|
Last name. |
birth_date
string · date
|
Date of birth (18+). |
country
string
|
ISO 3166-1 alpha-2 country. |
city
string
|
City. |
address
string
|
Street address. |
phone
string
|
Phone in international format. |
external_id
string
|
Your own player id. |
language
string
|
Two-letter language code. |
marketing.email
boolean
|
Consent to marketing e-mails. |
PATCH /api/v1/operator/players/1042 HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Content-Type: application/json
{
"city": "Sliema",
"marketing": {
"email": false
}
}
{
"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"
}
}
PUT
/api/v1/operator/players/{player}/status
Change the account status
Activates, locks or closes the account. The reason is kept as a note on the player.
players:write
player
integer
|
required KinetX player id. |
status
string
|
required
New status.
active
locked
closed
|
reason
string
|
Why the status changed. |
PUT /api/v1/operator/players/1042/status HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Content-Type: application/json
{
"status": "locked",
"reason": "Chargeback dispute"
}
{
"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"
}
}
POST
/api/v1/operator/players/{player}/session-tokens
Issue a player session token
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.
players:write
Idempotency-Key
player
integer
|
required KinetX player id. |
ttl_minutes
integer
|
Lifetime in minutes, 1–720 (default 30). |
POST /api/v1/operator/players/1042/session-tokens HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"ttl_minutes": 30
}
{
"data": {
"token": "kxp_eyJwIjoxMDQyLCJjIjo0LCJlIjoxNzYwNTIwNjAwfQ.N2Yz…",
"token_type": "Bearer",
"player_id": 1042,
"expires_at": "2026-10-15T10:00:00Z"
}
}
Wallet
Real and bonus balances and the transaction ledger of a player.
GET
/api/v1/operator/players/{player}/wallet
Get the balances
Real and bonus balances in minor units, and how much the player may still withdraw without KYC verification (null = no limit).
wallet:read
player
integer
|
required KinetX player id. |
GET /api/v1/operator/players/1042/wallet HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
}
]
}
}
GET
/api/v1/operator/players/{player}/transactions
List transactions
The append-only ledger of the player, newest first. Amounts are signed: credits are positive, debits negative.
wallet:read
player
integer
|
required KinetX player id. |
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
type
string
|
Transaction type.
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
|
wallet
string
|
Wallet.
real
bonus
|
created_from
string · date-time
|
Only records created at or after this moment (ISO 8601). |
created_to
string · date-time
|
Only records created at or before this moment (ISO 8601). |
GET /api/v1/operator/players/1042/transactions HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
Payments
Record deposits collected by your own payment provider, request withdrawals and follow their status.
GET
/api/v1/operator/payment-methods
List payment methods
Active payment methods for your currency. Use the code as payment_method.
payments:read
GET /api/v1/operator/payment-methods HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
]
}
]
}
GET
/api/v1/operator/payments
List deposits and withdrawals
Payment requests of your players, newest first.
payments:read
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
player_id
integer
|
Only this player. |
type
string
|
Deposit or withdrawal.
deposit
withdrawal
|
status
string
|
Request status.
new
allowed
paid
rejected
cancelled
|
external_reference
string
|
Your payment reference. |
created_from
string · date-time
|
Only records created at or after this moment (ISO 8601). |
created_to
string · date-time
|
Only records created at or before this moment (ISO 8601). |
GET /api/v1/operator/payments HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
GET
/api/v1/operator/payments/{payment}
Get a payment
Status of one deposit or withdrawal: new → allowed → paid, or rejected / cancelled.
payments:read
payment
integer
|
required Payment request id. |
GET /api/v1/operator/payments/5121 HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
}
}
POST
/api/v1/operator/players/{player}/deposits
Record a paid deposit
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.
payments:write
Idempotency-Key
player
integer
|
required KinetX player id. |
amount
integer
|
required Amount in minor units of the player currency. |
external_reference
string
|
required Your unique payment reference (e.g. the PSP transaction id). |
payment_method
string
|
Payment method code. |
info
string
|
Payment details shown to staff (e.g. masked card). |
notes
string
|
Internal note. |
POST /api/v1/operator/players/1042/deposits HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"amount": 10000,
"external_reference": "psp_tx_7781",
"payment_method": "visa-mastercard"
}
{
"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"
}
}
POST
/api/v1/operator/players/{player}/withdrawals
Request a withdrawal
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.
payments:write
Idempotency-Key
player
integer
|
required KinetX player id. |
amount
integer
|
required Amount in minor units of the player currency. |
payment_method
string
|
required Payment method code. |
external_reference
string
|
Your unique reference for this withdrawal. |
info
string
|
Payout details (e.g. masked card, wallet address). |
bank_name
string
|
Bank name. |
notes
string
|
Internal note. |
POST /api/v1/operator/players/1042/withdrawals HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"amount": 5000,
"payment_method": "visa-mastercard",
"external_reference": "wd_20261015_001",
"info": "Visa **** 4242"
}
{
"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"
}
}
Games
The game catalogue (providers, categories, RTP) and game launch URLs.
GET
/api/v1/operator/games
List games
Active games of active providers, by name.
games:read
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
provider
string
|
Provider slug. |
category
string
|
Category (see the categories endpoint). |
type
string
|
RNG or live.
rng
live
|
search
string
|
Part of the game name. |
GET /api/v1/operator/games HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
GET
/api/v1/operator/games/providers
List game providers
Active providers with their number of active games.
games:read
GET /api/v1/operator/games/providers HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"data": [
{
"id": 7,
"slug": "acme-gaming",
"name": "Acme Gaming",
"games_count": 148
}
]
}
GET
/api/v1/operator/games/categories
List game categories
Categories of the active games with their game count.
games:read
GET /api/v1/operator/games/categories HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"data": [
{
"category": "Slots",
"games_count": 412
},
{
"category": "Live Casino",
"games_count": 96
}
]
}
GET
/api/v1/operator/games/{game}
Get a game
One game of the catalogue.
games:read
game
integer
|
required Game id from the catalogue. |
GET /api/v1/operator/games/311 HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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"
}
}
}
POST
/api/v1/operator/players/{player}/games/{game}/launch
Launch a game
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.
games:launch
Idempotency-Key
player
integer
|
required KinetX player id. |
game
integer
|
required Game id from the catalogue. |
mode
string
|
`real` (default) opens a wallet session; `demo` returns the free-play URL.
real
demo
|
platform
string
|
Device of the player.
desktop
mobile
web
ios
android
|
ip
string
|
IP address of the player. |
POST /api/v1/operator/players/1042/games/311/launch HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
{
"data": {
"mode": "real",
"game_id": 311,
"launch_url": "https://games.acme.example/launch?game=acme-book-of-gold&token=Yq3…¤cy=EUR&language=en",
"session_token": "Yq3h0W2bVd…",
"expires_at": "2026-10-15T21:30:00Z",
"is_original": false
}
}
Bonuses
Your bonus catalogue, granting bonuses, redeeming promo codes and the bonuses of a player.
GET
/api/v1/operator/bonuses
List your bonuses
Active bonuses of your catalogue (amounts in minor units of the operator currency).
bonuses:read
GET /api/v1/operator/bonuses HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
]
}
GET
/api/v1/operator/players/{player}/bonuses
List the bonuses of a player
Granted bonuses with their wagering progress, newest first.
bonuses:read
player
integer
|
required KinetX player id. |
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
state
string
|
Bonus state.
pending
activated
finished
|
GET /api/v1/operator/players/1042/bonuses HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
POST
/api/v1/operator/players/{player}/bonuses
Grant a bonus
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).
bonuses:write
Idempotency-Key
player
integer
|
required KinetX player id. |
bonus_id
integer
|
required Bonus id from your catalogue. |
amount
integer
|
Amount in minor units of the player currency (default: the bonus default amount). |
note
string
|
Internal note. |
POST /api/v1/operator/players/1042/bonuses HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"bonus_id": 12,
"amount": 20000
}
{
"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"
}
}
POST
/api/v1/operator/players/{player}/promo-codes
Redeem a promo code
Redeems one of your promo codes for the player and grants its bonus.
bonuses:write
Idempotency-Key
player
integer
|
required KinetX player id. |
code
string
|
required Promo code (case-insensitive). |
POST /api/v1/operator/players/1042/promo-codes HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"code": "SPIN50"
}
{
"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"
}
}
}
Responsible gaming
Deposit, bet, loss, balance and session limits with cooling-off periods, and self-exclusion.
GET
/api/v1/operator/players/{player}/limits
Get the limits
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.
players:read
player
integer
|
required KinetX player id. |
GET /api/v1/operator/players/1042/limits HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
PUT
/api/v1/operator/players/{player}/limits
Set limits
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.
limits:write
player
integer
|
required KinetX player id. |
limits
object
|
required Limit name => value (minor units; minutes for max_session_minutes, 5–1440; null removes the limit). |
PUT /api/v1/operator/players/1042/limits HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Content-Type: application/json
{
"limits": {
"max_daily_deposit": 20000,
"max_weekly_deposit": 200000,
"max_session_minutes": 120
}
}
{
"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
}
}
POST
/api/v1/operator/players/{player}/self-exclusion
Self-exclude a player
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.
limits:write
Idempotency-Key
player
integer
|
required KinetX player id. |
period
string
|
A fixed period (time-out up to 30 days, self-exclusion from 3 months).
24_hours
7_days
30_days
3_months
6_months
12_months
5_years
|
until
string · date-time
|
End of the exclusion (ISO 8601), instead of period. |
type
string
|
Overrides the type derived from the period.
self_exclusion
time_out
self_closure
|
POST /api/v1/operator/players/1042/self-exclusion HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
Idempotency-Key: 4f6c1a2e-8b0d-4f5e-9a71-3c2d1e0f9b8a
Content-Type: application/json
{
"period": "6_months"
}
{
"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"
}
}
}
Reports
GGR and payment summaries for a date range.
GET
/api/v1/operator/reports/ggr
GGR summary
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.
reports:read
from
string · date
|
required First day (YYYY-MM-DD, UTC). |
to
string · date
|
required Last day (YYYY-MM-DD, UTC), inclusive. |
include_test_players
boolean
|
Include test accounts (default false). |
GET /api/v1/operator/reports/ggr?from=2026-10-01&to=2026-10-14 HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
X-Api-Key: kx_live_7f3k2m9q4w8e1r6t5y0u3i2o9p8a7s6d
X-Timestamp: 1760520600
X-Signature: 5b0c7d6e9f… (hex HMAC-SHA256)
{
"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
}
}
}
Player session
Endpoints your front end calls directly with a player session token (Authorization: Bearer).
GET
/api/v1/player/me
Get the signed-in player
Profile of the player the session token was issued for.
Authorization: Bearer kxp_…
GET /api/v1/player/me HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
Authorization: Bearer kxp_eyJwIjoxMDQyLCJjIjo0…
{
"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"
}
}
GET
/api/v1/player/wallet
Get the player balances
Real and bonus balance of the signed-in player.
Authorization: Bearer kxp_…
GET /api/v1/player/wallet HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
Authorization: Bearer kxp_eyJwIjoxMDQyLCJjIjo0…
{
"data": {
"player_id": 1042,
"currency": "EUR",
"balance": 12550,
"bonus_balance": 2000
}
}
GET
/api/v1/player/transactions
List the player transactions
Ledger of the signed-in player, newest first.
Authorization: Bearer kxp_…
page
integer
|
Page number, starting at 1. |
per_page
integer
|
Items per page, 1–100 (default 25). |
GET /api/v1/player/transactions HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
Authorization: Bearer kxp_eyJwIjoxMDQyLCJjIjo0…
{
"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
}
}
POST
/api/v1/player/games/{game}/launch
Launch a game for the player
Same as the operator launch endpoint, for the signed-in player (the IP defaults to the caller).
Authorization: Bearer kxp_…
game
integer
|
required Game id from the catalogue. |
mode
string
|
`real` (default) opens a wallet session; `demo` returns the free-play URL.
real
demo
|
platform
string
|
Device of the player.
desktop
mobile
web
ios
android
|
ip
string
|
IP address of the player. |
POST /api/v1/player/games/311/launch HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
Authorization: Bearer kxp_eyJwIjoxMDQyLCJjIjo0…
{
"data": {
"mode": "real",
"game_id": 311,
"launch_url": "https://games.acme.example/launch?game=acme-book-of-gold&token=Yq3…¤cy=EUR&language=en",
"session_token": "Yq3h0W2bVd…",
"expires_at": "2026-10-15T21:30:00Z",
"is_original": false
}
}
POST
/api/v1/player/games/{game}/play
Play a KinetX Original round
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).
Authorization: Bearer kxp_…
game
integer
|
required Game id from the catalogue. |
stake
integer
|
required Stake in minor units. |
params
object
|
Game-specific options. |
POST /api/v1/player/games/311/play HTTP/1.1
Host: kinetx.amhtechnologies.com
Accept: application/json
Authorization: Bearer kxp_eyJwIjoxMDQyLCJjIjo0…
Content-Type: application/json
{
"stake": 100
}
{
"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"
}
}