Darwin Gaming System API ## Sections • [API Reference](https://app.theneo.io/darwininteractive/darwin-api/api-reference.md): 🚀 Introduction This document provides a walk-through of Darwin’s Gaming System API (DGSAPI), which offers a simple solution to integrate with the Darwin Gaming System. It is organized around REST , with predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. A brief and simple overview of Darwin’s Gaming System (DGS) will also be provided, covering its components, the technologies used, and where it is deployed. Darwin uses Google Cloud Platform (GCP) to host its containerized application. All aspects of DGS are carefully orchestrated through Google Kubernetes Engine (GKE). DGS design ensures portability across clouds and on-premises as it can run anywhere Kubernetes is supported. Each client has a dedicated deployment of DGS within Darwin’s cluster with at least two environments, production and testing. Darwin Gaming System Overview Darwin Gaming System (DGS) is a B2B game provider service that integrates seamlessly with operators. Through a simple integration with the operator’s wallet platform, all Darwin games become available and any additional future content becomes instantly accessible as it is added DGS is a composition of Docker containerized applications and Google Cloud Services: Game Manager: Backend application developed in Python using the Django framework. It manages game logic and configurations, wallet integration, and reporting. DB Relational database: where all transactions are stored. In development and on-premises deployment, it uses MySQL. When running in GCP it uses Google Cloud SQL. Cache: In-memory cache to store temporary data using REDIS. Web Server: Web server and reverse proxy using NGINX RNG : RNG and game internal logic developed in Python using the Falcon framework. Wallet Internal: The wallet used in development environments is also used for free-to-play deployments (demo mode). Developed in Python using the Django framework. Infrastructure Overview Cloudflare Darwin's system uses Cloudflare to optimize and protect its applications. All traffic to DGS goes through Cloudflare’s service. (More on the advantages of using Cloudflare here .) For security reasons, the access to stage and testing environments is IP-restricted by Cloudflare’s Web Application firewall and needs to be whitelisted. Google Cloud Plataform GCP provides a reliable and highly scalable infrastructure to build, test, and deploy applications. DGS takes advantage of all the power of GCP delivering a stable and secure system with on-demand scalability and high availability. Namespaces Each operator integrated with Darwin’s System is attributed to a namespace within Darwin’s cluster. This organization provides independence for each operator, ensuring the best security and performance for all. Autoscaling Autoscaling allows DGS to handle increased demand and automatically adjust capacity to maintain steady and appropriate performance. Regional Clusters GCP zones are very stable however, if improved availability is needed, DGS can be deployed using regional clusters and distribute the Kubernetes resources across multiple zones within a region. This will allow DGS to continue functioning even during an outage or downtime in an individual zone. • [Requests](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests.md): Darwin is very flexible regarding the needs of our clients and will gladly implement an operator’s API if it eases the integration. In case the operator prefers we supply the following API. DGSAPI is composed of six operations, each one represented by an endpoint, all requests will be made from DGS to the operator’s wallet platform. Title Description Title Operation HTTP Method Details get account details GET Returns player details such as a unique ID, currency and language get balance GET Returns the current balance in the specific player account bet POST Informs the wallet that the player placed a bet winnings POST Awards one or more winnings of a bet, and closes the game round rollback POST Cancels a specific bet and refunds that bet amount to the player DGSAPI uses session-based authentication and the operator must ensure that each player has a unique ID. Note: Darwin is always open to our customer’s requests, if you need any change or have any special request on the API and its workings, please let us know. The following sequence diagram is an example of a normal game interaction between DGS and the operator’s Wallet. It’s important to notice that all common parameters are always present in each type of operation request. General Notes All operators shall take into account the following when integrating with DGS Assertion DGS asserts that all parameters sent match the returned values. Idempotence Operators wallet platform shall have idempotence; i.e. receiving more than one bet request (if identical) shall register only once in the wallet platform. If there is a need to retry an operation (in case of a network error or response code with an error) the platform must ensure that the operation is carried out only once, allowing DGS to safely retry the operations. Timeouts All requests shall have a timeout of 15 seconds to prevent resource exhaustion. Open Rounds A round is considered open from the moment that the first successful bet has been placed and remains open until a successful call has been made with the parameter gamestatus has finished. A round can have multiple transactions of the type of bet and winnings. Request Format All DGSAPI requests: use user and password authentication are URL encoded data is assumed to be encoded in UTF-8 The following list of parameters is considered mandatory and is always provided in requests to the operator’s wallet platform, regardless of which endpoint being called. List of mandatory parameters: Title Description Title Description Parameter Description Type Example Value requestType Request entry point name Char winnings currency The selected currency. (ISO 4217) List ["EUR"] user Username representing the login on the operator wallet Char user-123 password Password for login on operator wallet Char qoF4SaI56f915&Q gameID Unique Game ID configured in DGS instance List ["Blackjack"] token Operator generated session ID token passed on to the game provider at game launch List ["edhabgt4bshbfkokpal"] It is important to notice that the sessionID parameter should expire after some time of inactivity from the player, for security reasons. Even after expiration, some operations must be accepted to guarantee the data integrity between the wallet and DGS - more on this in the following chapters. Response Format Darwin uses UTF-8 encoded JSON as the preferred format for all responses. Example as follows: Plain text { "requestType": "REQUEST_TYPE", "rc": "RESPONSE_CODE", "accountID": "ACCOUNT_ID", "gameID": "GAME_ID", "balance": "BALANCE", "currency": "CURRENCY" } All responses have the following parameters: Title Description Title Description Parameter Description Type Example Value request Request entry point name Char winnings rc Response Code Char 0 gameID Unique Game ID configured in DGS instance Char Blackjack accountID The player’s unique ID Char 2501112 currency The selected currency. (ISO 4217) Char EUR balance The player’s current balance (in cents) Int 12354 • [Open Game](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/open-game.md): The following diagram illustrates the sequence to request and launch a game from DGS. To launch a game from DGS the operator shall send a well-formatted request using the URL such as the following: Plain text https://<DGS_DOMAIN>/<CASINO_ID>/?currency=<CURRENCY>&token=<SESSIONTOKEN>&language=<LANGUAGE>&device=<DEVICETYPE>&gameID=<GAME_ID>&lobbyUrl=<LOBBYURL> DGS_DOMAIN – Darwin DGS instance Domain CASINO_ID – Darwin configured CASINO in DGS GAME_ID – Darwin Unique GameID configured for the CASINO in the DGS instance The parameters have to be replaced with actual values by the operator as follows: Title Description Title Description Parameter Description Type Example Value token A session identifier is generated by the operator and used to validate the player’s session. Char fb2e77d.47a0479900504cb3ab4a1f626d174d2d currency The selected currency. (ISO 4217) Char EUR language The language used when opening the game Char pt-pt device OPTIONAL: Device type of the client: “mobile” or “desktop” Char mobile gameID Unique Game ID configured in DGS instance Char blackjack lobbyUrl OPTIONAL: If the player presses the in-game home button he will be redirected to the given URL. Char www.xyz.com/blackjack operator OPTIONAL: used to differentiate a casino with multiple operators Char darwinPT Demo Mode Darwin games can be launched in demo mode to allow players to test the games. When a game is launched in demo mode all plays are made with virtual currency. All requests of the game will be made between the player and the DGS instance. No requests are made to the Operator's wallet. The request to launch a game in demo mode is practically the same, the main difference is the keyword “demo” in the URL after the CASINO_ID. Example of a demo launch request with parameters: Plain text https:// / /demo/?currency=EUR&token=fb2e77d47a0479900504cb3ab4a1f626d174d2d&language=pt-pt&gameID=blackjack • [Get Account Details](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/get-account-details.md): After receiving a game launch request, DGS will issue a getaccountdetails request to the operator´s wallet. This request will retrieve the player’s data, such as accountID, currency and sessionID. The operator wallet shall also validate the received sessionId. If valid, return a unique account ID that shall be identical each time the same player launches the game. • [Get Balance](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/get-balance.md): Whenever DGS needs to obtain the current balance for a specific player, a get balance request is issued. • [Bet](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/bet.md): Each time the player places a bet, the bet method is called. This will deduct money from the player’s account. This is reflected in the player's account balance in the operator's wallet platform. One or more bets are reported per game round, depending on the type of game being played. • [Bet - Free Round](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/bet/bet-free-round.md): Each time the player places a bet, the bet method is called. When playing free rounds the money won't be deducted from the player's account. • [Winnings](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/winnings.md): The winnings request reports the outcomes of a game round. This request is issued when a play finishes and may be issued more than one time for the same play depending on the type of game being played. This method is also used to close a round. Closing a game round is performed by setting the parameter gameStatus to “finished” . While reporting intermediary results, the status is “open” . • [Winnings - Free Round](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/winnings/winnings-free-round.md): The winnings request reports the outcomes of a game round. This request is issued when a play finishes and may be issued more than one time for the same play depending on the type of game being played. This method is also used to close a round. Closing a game round is performed by setting the parameter gameStatus to “finished” . While reporting intermediary results, the status is “open” . Our free round packages offer two configuration options, if instant_pay is active winnings will be credit to the player's account at the end of the play otherwise winnings will only be credited at the end of the package. See Create Free Round Package for more information. • [Rollback](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/rollback.md): This operation is used to return the value used in a bet request that failed in the casino’s wallet. This request should never be issued when a winnings request has already been sent for a round. A rollback is normally issued when an error occurs in the game server. E.g., if a communication error exists between DGS and the operator´s wallet platform. DGS will wait for 30 seconds before issuing a rollback. This is to prevent the issue of a rollback while the operator’s wallet is still processing a bet request. • [Retry Policy](https://app.theneo.io/darwininteractive/darwin-api/game-flow-requests/retry-policy.md): When a winnings or rollback request is issued, and we obtain a response with rc !=0 our application enters a retry process. Within this process the user is locked and consecutive requests are issued according to a given time interval until a successful response (rc =0) is achieved or that same time interval ends. When a successful response is achieved the user is unlocked and can normally resume the gameplay otherwise it stays locked and has to be manually unlocked by our support team. Bellow is possible to see an example of our retry process flow: • [Service API](https://app.theneo.io/darwininteractive/darwin-api/service-api.md): Darwin API also possesses a separate module named SAPI where is possible to retrieve details related to any round available and info from the operator. • [Open Game Url](https://app.theneo.io/darwininteractive/darwin-api/service-api/open-game-url.md): This method will return the open game URL for the given game casino in real mode. Note: If you wish to generate the URL in Demo mode, you must include the key "demo": true. • [List Game](https://app.theneo.io/darwininteractive/darwin-api/service-api/list-game.md): This method will return the list of games and information related to each one for the desired casino. • [Round Visual Details](https://app.theneo.io/darwininteractive/darwin-api/service-api/round-visual-details.md): This method will return the information on each play transaction and the respective round details (used in the PT market). • [Round Details](https://app.theneo.io/darwininteractive/darwin-api/service-api/round-details.md): This method will return the information on each play transaction and the respective round details (used in the PT market). • [Round SmDetails](https://app.theneo.io/darwininteractive/darwin-api/service-api/round-smdetails.md): This method will return the information on each play transaction and the respective round details (used in the PT market). • [Update Balance](https://app.theneo.io/darwininteractive/darwin-api/service-api/update-balance.md): This event will trigger a visual update of the user's balance without needing to change the game state. Note: If “balance” is provided that will be the value used to update the user's balance in game instead of making a Get Balance request. The value of “balance” must be a string representing an int. The string should not contain decimal places. For 10,00$ the "balance" should be “1000” and the currency “USD” • [Create Free Round Package](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/create-free-round-package.md): This endpoint allows for the creation of free round packages. If you intend on creating a free round package with multiple games, please send an array of strings in the game_id property. If the free round package is intended to include multiple games, the game_id property should contain an array of strings, with each string representing a unique game identifier. For a package associated with only a single game, provide a single string representing the game_id . • [Cancel Free Round Package](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/cancel-free-round-package.md): This endpoints allows the cancelation of an existing free round package. • [Register Player to Free Round Package](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/register-player-free-round-package.md): This endpoint allows the registration of either a player or a group of players to a free round package. • [Remove Player from Free Round Package](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/remove-player-free-round-package.md): This endpoint allows for the removal of either a player or group of players from the free round package. • [Get Game Settings](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/free-round-package-game-settings.md): This endpoint allows for the removal of either a player or group of players from the free round package. • [Get Free Round Package Information](https://app.theneo.io/darwininteractive/darwin-api/service-api/promotions/remove-player-from-free-round-package-copy.md): This endpoint allows retrieval of information about a freeround package. If multiple users are assigned to the provided freeround ID, the response will include information for all users; otherwise, it will return data for a single user. • [GameDetails PT Legislation](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation.md): In order to operate in the Portuguese gambling market, it’s mandatory by law that at the end of each round, the operator shares the player action history and the result of that same round with the Portuguese gambling market regulator SRIJ . Darwin already conducted a deep market study regarding this situation. Based on the results of that study, and our own personal experience operating in the Portuguese market, we suggest the following game details reporting structure: • [Bet Details](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/bet-details.md): For this category, we propose a JSON format structure containing the following parameters: Plain text { "blackjack":{ "maxPlayers":1, "tableCards":"10S-JC", "roundID":2459786, "playerHands":[ { "position":1, "cards":"5D-5H-5S-9D", "bet":100, "winnings":0, "result": 0 }, { "position":2, "cards":"QD-JS", "bet":50, "winnings":100, "result": 1 }, { "position":3, "cards":"QC-3S-8H", "bet":25, "winnings":50, "result": 1 }, . . . N ] } } However, Blackjack possesses a specific action called split that requires a small change to our standard reporting structure due to the fact that the split action breaks the original player hand in which this action was executed and creates new ones. In this case in set of player hands we add two new arrays containing all the information regarding the new generated player hands. Example of a blackjack round gamedetails report with 1 player hand that suffered a split action: Plain text { "blackjack":{ "maxPlayers":1, "tableCards":"10S-JC", "roundID":2459786, "playerHands":[ { "position":1, "cards":"5D-5H", "bet":100, "winnings":0, "result": 0 }, { "position":1.1, "cards":"5D-JS", "bet":50, "winnings":100, "result": 1 }, { "position":1.2, "cards":"5H-8H", "bet":25, "winnings":50, "result": 1 } ] } } • [Blackjack](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/bet-details/blackjack.md): For this category, we propose a list for every bet with a JSON format structure containing the following parameters: Parameter Description Type Example Value position Integer field that represents the position of the associated player hand in the table. Int 1 bet The total amount of money (in cents) used in the associated player hand Int 7000 Example of a blackjack opening bet with 7 hands: Select... { "gameID": "blackjack", "method": "POST", "roundID": 161, "accountID": "12345", "betAmount": 7000, "betDetails": [{"bet": 1000, "position": 1}, {"bet": 1000, "position": 2}, {"bet": 1000, "position": 3}, {"bet": 1000, "position": 4}, {"bet": 1000, "position": 5}, {"bet": 1000, "position": 6}, {"bet": 1000, "position": 7}], "requestType": "bet", "transactionID": 441 } • [Baccarat](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/bet-details/baccarat.md): For this category, we propose a JSON format structure containing the following parameters: Parameter Description Type Example Value player Total amount of money (in cents) bet in player Int 1000 banker Total amount of money (in cents) bet in banker Int 0 tie The total amount of money (in cents) bet in tie Int 0 total Total amount of money (in cents) used in the associated player bet Int 1000 • [Banca Francesa](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/bet-details/banca-francesa.md): For this category, the "betDetails" parameter consists of a string formatted as required by SRIJ, which starts with "BancaFrancesa#". Next, for each bet area, it is specified the bet area code followed by ";" plus the bet amount in that area (in EUR). The bet areas are separated by "#". The codes for the bet areas are: AS - aces GR - big LG - big line PE - small LP - small line As an example, if a round is made of a bet of 100 in "aces" and another bet of 100 in "small", the bet details is as follows: Select... { "gameID": "banca_francesa", "method": "POST", "roundID": 82, "accountID": "12345", "betAmount": 200, "betDetails": "BancaFrancesa#AS;1#GR;0#LG;0#PE;1#LP;0", "requestType": "bet", "transactionID": 934 } • [Roulette](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/bet-details/roulette.md): For this category, the "betDetails" parameter consists of a string formatted as required by SRIJ, which is the bet area ID followed by "#", plus the bet amount in that area (in EUR), ending with ";". If the round has bets in multiple areas, those areas are appended to the string following the previous rule. As an example, if a round is made of a bet of 100 cents in area 1 and another bet of 150 cents in area 60, the betDetails is as follows: Select... { "gameID": "roulette", "method": "POST", "roundID": 162, "accountID": "12345", "betAmount": 250, "betDetails": "1#1;60#1.5;", "requestType": "bet", "transactionID": 782 } • [Baccarat](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/game-details/baccarat.md): For this category, we propose a JSON format structure containing the following parameters: Parameter Description Type Example Value maxPlayers Maximum number of players allowed by round. Int 1 roundID Unique game round identifier, generated by the Game Provider. Within a game round, the bet and all connected results will have the same roundID. BigInt 2459786 playerHand An array containing information related to the player hand such as it’s associated cards and hand value. bankerHand An array containing information related to the player hand such as it’s associated cards and hand value. cards String representation separated by hyphens containing all the cards that were extracted in the associated player or banker hand Char AD-JS-7C bets (player) Amount of money (in cents) used in the player position Int 100 bets (tie) Amount of money (in cents) used in the tie position Int 50 bets (banker) Amount of money (in cents) used in the banker position Int 0 bets (total) Total amount of money (in cents) in all positions Int 0 winnings (player, banker, tie) Amount of money (in cents) won for each betting area Int 0 winnings (commission) The commission applied over plays won by betting in the banker Int 250 winnings (total) Total amount of money (in cents) won by the player, without the commission, if it was applied Int 250 Example of a baccarat round game details report: Select... { "baccarat":{ "maxPlayers":1, "roundID":2, "playerHand":{ "cards":"AD-JS-7C", "value":8 }, "bankerHand":{ "cards":"4D-AS-QC", "value":5 }, "bets": { "player": 0, "banker": 5, "tie": 10, "total": 15 }, "winnings": { "player":0, "banker":0, "tie": 0, "commission": 0, "total": 0 } } } • [Banca Francesa](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/game-details/banca-francesa.md): For this category, we propose a JSON format structure containing the following parameters: Title Description Title Description Parameter Description Type Example Value game Name of the game Char Darwin Banca Francesa maxPlayers Maximum number of players allowed by round. Int 1 roundID Unique game round identifier, generated by the Game Provider. Within a game round, the bet and all connected results will have the same roundID. BigInt 2459786 bets A string formatted as required by SRIJ, which starts with "BancaFrancesa#". Next, for each bet area, it is specified the bet area code followed by ";" plus the bet amount in that area (in EUR). The bet areas are separated by "#". Char BancaFrancesa#AS;1#GR;0#LG;0#PE;0#LP;2 total_bet Total amount of money (in cents) bet in all areas Int 0 total_winnings Amount of money (in cents) won for all betting areas Int 0 details A string formatted as required by SRIJ, which starts with "R#", followed by the result code, ending with "#X" plus the number in each of the dice separated by ";". Char R#LN#X;4;4;2 The codes for each result are: LN - invalid roll PE - small wins GR - big wins AS - aces wins Example of a Banca Francesa round game details report: Plain text { "banca_francesa": { "game": "Darwin Banca Francesa", "maxPlayers": 1, "roundID": 9375, "bets": "BancaFrancesa#AS;1#GR;0#LG;0#PE;0#LP;2", "total_bet": 300, "total_winnings": 0, "details": "R#LN#X;4;4;2" } } • [Roulette](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/game-details/roulette.md): For this category, we propose a JSON format structure containing the following parameters: Select... { "roulette":{ "game": "Darwin Roulette", "maxPlayers": 1, "roundID": 26, "bets": "1#0.40;2#0.50;", "total_bet": 90, "total_winnings": 1440, "bets_returned": 40, "winnings_without_returns": 1400, "details": { "number": "0", "color": "G" } } } • [Slot](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/game-details/slot.md): For this category, we propose a JSON format structure containing the following parameters: Parameter Description Type Example Value game Name of the game Char Darwin Slot maxPlayers Maximum number of players allowed by round. Int 1 roundID Unique game round identifier, generated by the Game Provider. Within a game round, the bet and all connected results will have the same roundID. BigInt 2459786 bet Amount of money (in cents) used in this player’s bet Int 40 winnings Amount of money (in cents) won by the player in a given round Int 200 details A string formatted as required by SRIJ, containing information about the outcome of a round Char 0:E;J;J;F;F#A;J;J;B;C#C;J;J;C;D#R#E#0011223# However, slots game type possesses a special type of play called freespins. In the case of a freespins round, we need to report the aggregation of all the free plays combined at the end of that same round in the details parameter . Example of two freespins plays details string report to SRIJ : Select... { "slot":{ "game": "DarwinSlot", "maxPlayers": 1, "roundID": 2459786, "bet": 40, "winnings": 160, "details": "0:B;E;E;F;C#D;C;J;C;E#C;H;C;D;J#R#C#02112231#MV#0,4#MT#1#MG#0,8#1:B;B;B;H;C#B;E;E;F;E#D;H;J;D;J#R#B#001020#MV#0,4#MT#1#R#B#011020#MV#0,4#MT#1#MG#0,8#" } } • [Crash](https://app.theneo.io/darwininteractive/darwin-api/gamedetails-pt-legislation/game-details/crash.md): For this category, we propose a JSON format structure containing the following parameters: Parameter Description Type Example Value game Name of the game Char DarwinCrash roundID Unique game round identifier, generated by the Game Provider. Within a game round, the bet and all connected results will have the same roundID. BigInt 2459786 winnings Amount of money (in cents) won by the player in a given round Int 200 details A string formatted as required by SRIJ, containing information about the outcome of a round Char R#1.90#1.18#2.21#W;R#2.00#0.00#2.21#L; Select... { "crash":{ "game": "DarwinCrash", "maxPlayers": 1, "roundID": 2459786, "winnings": 118, "details": "R#1.90#1.18#2.21#W;R#2.00#0.00#2.21#L;" } } • [Data Types](https://app.theneo.io/darwininteractive/darwin-api/appendix/data-types.md): The following table specifies the data types and ISO’s used in this document parameters. Type Specification Char String of maximum length X consisting only of printable ASCII chars (32 – 126) Bool “true” of “false” as string Int Integer of maximum value 2147483647 and minimum value 1 BigInt Big integer of maximum value 9223372036854775807 and minimum value 1 Country Three-letter country code as defined by ISO 3166-1 alpha-3 Currency Three-letter currency code as defined by ISO 4217 Language ISO 639 language code combined with ISO 3166-1 alpha-2 country code. • [Response Codes](https://app.theneo.io/darwininteractive/darwin-api/appendix/response-codes.md): The following table shows the response code that we have listed in our system. RC Value Title Description 0 Success Request was successfully executed 1 Technical Error A technical error occurred when processing the request 102 Bet Not Found The return code to use when a rollback or winnings is issued in a non-existing bet 1000 Not logged on The session ID is invalid 1003 Authentication failed Game Provider user and password on the request do not match the one’s in Casino API 1006 Out of balance The player does not have sufficient funds for the bet 1007 Unknown Currency An unexpected currency was used in the request 1008 Parameter Required A required parameter is missing. The error message shall explain which parameter is missing 1019 Gaming Limits The player is not allowed to perform the bet due to gaming limits in the wallet platform. 1035 Account Blocked The account associated with a given session ID is blocked and can't perform any actions. Custom Notifications Darwin API has its own notification package in which is possible to create custom notifications to satisfy specific operator’s needs. To do so, our API needs to receive specific response codes different from the ones shown above. If necessary, is also possible to add a msg parameter to the response in order to show a detailed message related with the custom error to the player. • [Locking/Unlocking Users Policy](https://app.theneo.io/darwininteractive/darwin-api/appendix/locking-unlocking-users-policy.md): Within our application, a user is locked when the retry process is issued. As stated before if our application receives a successful response within a retry request the user is automatically unlocked. However, if at the end of the retry process the user is still locked the following steps need to be done: Contact the operator to obtain information about the state of the last request that was issued by our application; Compare the requested information obtained with the operator with the one in our application; Synchronize the request state so that the following requests won't be rejected by the operator's wallet; Manually unlock the user in our backoffice.