# ADGT Play+ API

The ADGT Play+ API lets operators and gaming platform partners enroll customers in their
branded Play+ program, verify their identity, and move funds between Play+ and the
operator's Gaming Wager Account.
## Getting started
1. Sign the mutual NDA with ADGT and receive your **ClientId** and **EntryCode** for the
ADGT Simulator (sandbox).
2. Send ADGT the internet-routable IP address(es) you will call from; they must be
allowlisted before any request is accepted.
3. Read the [Integration flow](/integration-flow) and [Certification](/certification) guides.
4. Call **GetToken** from your server, then send the returned `securityToken` object in the
body of every other request. No `Authorization` header is used.

## Request and response envelope
Every request (except GetToken) is a JSON object with `securityToken`,
`applicationSessionId`, `merchantTransactionId` and a method-specific `payload`.
Every response carries `transactionStatus`, `notifications` and a method-specific `payload`.
**Always check `transactionStatus`** – declines and failures are returned with HTTP 200:
`1` Approved, `2` Declined, `3` Failed, `4` Pending (verification still in progress; poll again).
## Notification codes
| Code | Meaning | What to do |
|  --- | --- | --- |
| `AUTH-0001` | Invalid credentials, or the token has expired | Request a new token and retry |
| `ACCI-0001` | Account not found | The customer has no Play+ account; offer enrollment |
| `RVLD-nnnn` | Request validation failed; the message names the field | Correct the request |
| `ISRV-nnnn` | Unexpected ADGT error | Retry once; then contact ADGT with the `transactionId` |

Show the customer a short, friendly message rather than the raw notification, for example: *“We are unable to process your request at this time. Please contact help desk for assistance.”* ADGT will agree the exact messaging for your program.
## Guidelines
- Fields not described here must not be sent.
- Ping or keep-alive calls are not supported; excessive requests (for example repeated
GetToken calls) can get the source IP removed from the allowlist.
- UAE country and emirate enum values are provided by ADGT during onboarding.

Confidential – provided to integration partners under a mutual NDA.

Enrollment, identity verification and transfers for the ADGT Play+ wallet.

Version: 1.1

## Servers

Sandbox
```
https://adgtpay.com
```

## Download OpenAPI description

 - [ADGT Play+ API](https://docs.wallet.adgtpay.com/_bundle/openapi.yaml)

## Authentication

 - [POST /authentication/api/gettoken](https://docs.wallet.adgtpay.com/openapi/authentication/gettoken.md): Call from your server only. The token authenticates every other API call and the hosted funding launch. It is valid for 15 minutes; request a new one when a call returns `AUTH-0001`.
## Customer

 - [POST /customer/api/AccountHolderProfile](https://docs.wallet.adgtpay.com/openapi/customer/accountholderprofile.md): Returns the profile and status of a customer's Play+ account. Use it to check whether a customer is already enrolled, or to retrieve details needed to complete a transfer. If the customer has no Play+
 - [POST /customer/api/Enroll](https://docs.wallet.adgtpay.com/openapi/customer/enroll.md): Creates the Play+ account after a successful identity verification on the session. The customer must have accepted the Play+ T&C through the Document Viewer with the same `merchantTransactionId`.
## Identity Verification

 - [POST /identityverificationgateway/api/CreateIdentityAndDocumentSession](https://docs.wallet.adgtpay.com/openapi/identity-verification/createidentityanddocumentsession.md): Opens a verification session. Every later verification call needs the returned session ID. A session expires 30 minutes after it is created.
 - [POST /identityverificationgateway/api/StartHostedDocumentVerification](https://docs.wallet.adgtpay.com/openapi/identity-verification/starthosteddocumentverification.md): Starts the ADGT-hosted identity journey: the customer photographs their Emirates ID or passport and takes a selfie; ADGT checks the document, liveness and face match. Send the customer to the returned
 - [POST /identityverificationgateway/api/VerifyDocument](https://docs.wallet.adgtpay.com/openapi/identity-verification/verifydocument.md): While the customer has not finished, `transactionStatus` is `4` (Pending). Poll every few seconds until it changes.
 - [POST /identityverificationgateway/api/VerifyIdentity](https://docs.wallet.adgtpay.com/openapi/identity-verification/verifyidentity.md): Checks the customer's details against identity and sanctions sources. Not needed in the hosted document flow; use it when you submit the customer's details yourself, or a KYC check you performed (`mer
## Transfer

 - [POST /transferservice/api/BalanceInquiry](https://docs.wallet.adgtpay.com/openapi/transfer/balanceinquiry.md): Call only when the customer selects Play+ for a transfer, never on page refresh. Fees may apply.
 - [POST /transferservice/api/Deposit](https://docs.wallet.adgtpay.com/openapi/transfer/deposit.md): Credits the Play+ account when the customer cashes out from the Gaming Wager Account. `merchantTransactionId` must be unique.
 - [POST /transferservice/api/Withdraw](https://docs.wallet.adgtpay.com/openapi/transfer/withdraw.md): Debits the Play+ account to fund the Gaming Wager Account. If funds then fail to post to the Gaming Wager Account, send Reverse.
 - [POST /transferservice/api/Reverse](https://docs.wallet.adgtpay.com/openapi/transfer/reverse.md)
## Hosted funding

 - [POST /hostedfunding](https://docs.wallet.adgtpay.com/openapi/hosted-funding/launchhostedfunding.md): Not a JSON API: the customer's browser posts these fields as an HTML form, with the form's target set to the frame or web view that shows hosted funding. Get the token from your server first; never ca
## Document Viewer

 - [GET /playplusdocumentviewer/view/document/{documentTypeId}/{programCode}](https://docs.wallet.adgtpay.com/openapi/document-viewer/viewdocument.md)
 - [GET /playplusdocumentviewer/view/document/{documentTypeId}/{programCode}/{accountIdentifier}/{merchantCode}/{merchantTransactionId}](https://docs.wallet.adgtpay.com/openapi/document-viewer/viewtermsforacceptance.md): Display the returned content and require the customer to press Accept before calling Enroll. The enrollment request must use the same programCode, accountIdentifier and merchantTransactionId, or it is
