--- title: "Connect module: launch" description: How your platform asks OneHazel for a game URL, real money or demo, and why the launch module follows your wallet. --- For the operator's engineer wiring game launch into the lobby. # launch The launch module is how your lobby opens a game. You ask OneHazel for a game URL; OneHazel prepares the session against your wallet and the studio, and hands back a URL you open in an iframe or redirect to. The wallet-capable session token never appears in that URL. ## Who calls whom You call OneHazel. This is the only module in the contract that OneHazel hosts. | Operation | What it does | |---|---| | `POST https://api.onehazel.com/connect/v1/launch` | A real-money game URL. OneHazel calls your `session/start` and `session/exchange`, then the studio. | | `POST https://api.onehazel.com/connect/v1/demo-launch` | A play-money game URL. Moves no money and calls no wallet operation. | A launch request carries `connection_id` (the `conn_` id of the activated studio connection), `game_code`, `player_external_id` and `currency`, plus optional `language`, `client_type` and `return_url`. A demo launch needs only `connection_id` and `game_code`. Both answer `{ "game_url": "..." }`. OneHazel can only build a `game_url` for a connector whose listing carries a launch template; without one, `launch` and `demo-launch` answer `404 game_unknown`. For a connector without a template your casino builds the game link from its own catalogue, as [PatePlay, end to end](/connect/mcp/providers/pateplay#step-3-add-a-pateplay-game-to-your-catalogue-for-your-platform-team) shows for PatePlay. ## Headers `Authorization: Bearer `, an `oh_live_` key. There is no request signature on this direction: the API key is the credential, so keep it on your server and never send it to a browser. The TypeScript helper `@onehazel/connect` wraps both calls as `launch` and `demoLaunch`; see [the contract](/connect/contract#helper). ## How it becomes conformant The launch module has no conformance run of its own. Its state is derived: launch is `conformant` exactly when [wallet](/connect/modules/wallet) is, because a real-money launch is a wallet `session/start` and `session/exchange` under the hood. Until then `connect_status` shows it `not_started` with the reason "launch needs a conformant wallet module". Its `evidence` is always `derived`. ## Conformance None of its own: the wallet scenarios `balance.ok`, `bet.ok` and the rest prove the path a launch depends on. A demo launch after go-live is the practical check (step 6 of [Getting started](/connect/getting-started)). ## Samples There is no server sample: you do not host anything for this module. Use `launch` and `demoLaunch` from `@onehazel/connect`, or call the two routes directly with the request shapes above.