Quickstart
This gets you from a new game to a formed match. It assumes you have signed up; the free tier is enough for everything here.
1. Get a token
Section titled “1. Get a token”In the portal, create an API credential for your game. It is shown once. Store it in your secret manager now, because it cannot be retrieved again, only replaced.
2. Create a queue
Section titled “2. Create a queue”Create a queue with this configuration. It is the smallest thing that will match anything:
version: 1queue_id: acme.smoketestname: Smoke Testrulesets: - ruleset_id: default engine_id: nemesis params: team_size: { start: 5, end: 5 } team_count: { start: 2, end: 2 }Ten players, two teams of five. Everything else takes a default: skill matching is on, latency
scoring is off, and no attribute filtering happens. Change queue_id to something in your own
namespace. Dot-separated is the convention, and it groups your queues together.
3. Submit a ticket
Section titled “3. Submit a ticket”One ticket is one player or one party. This is a single player:
grpcurl -H 'Authorization: Bearer <token>' -d '{ "ticket": { "id": "3f2b8c1e-9a4d-4f7b-8e11-2c5d6a7b8c90", "queue_id": "acme.smoketest", "ruleset_ids": ["default"], "engine_input": "<base64 nemesis EngineInput>" }}' match.ivk.dev:443 matchmaker.core.v1.MatchmakerService/CreateTicketengine_input is a serialized matchmaker.engines.nemesis.v1.EngineInput, base64-encoded. That is
the awkward part of calling the API by hand, and it is why the .NET SDK
exists. It packs the payload for you:
EngineInput = Nemesis.PackInput(new EngineInput{ Players = { new Player { PlayerId = "alice", Mmr = 0.55 } },})The call returns as soon as the ticket is durably queued. That is not a match yet.
4. Submit nine more
Section titled “4. Submit nine more”A 5v5 ruleset needs ten players, and the engine will not form a match until it has them. Submit nine
more tickets with different UUIDs and varying mmr values.
Reusing an ID is not an error, since that is how retries stay safe, but it will not add a second player to the pool. Ten calls with the same ID leave you with one ticket and no match.
5. Watch the match form
Section titled “5. Watch the match form”Within a tick or two of the tenth ticket, the engine forms a match and emits a match.created
outcome carrying the match ID, every ticket, and the teams the engine chose.
What you just did, and what is missing
Section titled “What you just did, and what is missing”You submitted tickets and the engine matched them. A real integration adds four things:
| Next | Why |
|---|---|
| Core Concepts | The model behind what you just did: pools, ticks, commitments |
| Integration Flow | The full sequence, including provisioning and notifying players |
| Queue Configuration | Latency budgets, skill tolerance, crossplay rules |
| Production Checklist | The failure cases you have not handled yet |
Start with this: a formed match is a commitment. Those ten players have left the pool and are counting on your backend to put them in a game. The integration flow covers what that obliges you to do.