---
title: "Mint a Try-Me Config (scenario + model) with a server-generated token."
method: POST
path: "/dojo/try-me-configs"
tags: ["Dojo"]
---

# Mint a Try-Me Config (scenario + model) with a server-generated token.

`POST /dojo/try-me-configs`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/dojo/try-me-configs`
- Auth: HTTP bearer

Creates a single-use Try-Me Config and binds an ephemeral compute key server-side (sets `compute_key_ref`). MNE-828: the resolve token is SERVER-GENERATED, high-entropy, and prefixed `tryme_…` — the request does NOT accept a user-chosen token/slug (any supplied value is ignored), and the compute key is NOT returned in the response (the gateway resolves credentials server-side). Returns the created `config` (carrying the generated `token`) and the agent-directive `share_line` the operator copies and sends to the person they're inviting. Single-use ON by default; a default 7-day expiry is applied when none is given. Accepts an optional operator `label`. Admin-only — backs `/admin/dojo`. MNE-517 §3 / MNE-522 / MNE-828.

## Request body

- object
  - `scenarioId` string, required: dojo_scenarios.id (e.g. 'db-shepherd').
  - `label` string, nullable: MNE-828: optional operator label (free text) for the operator's own list (e.g. 'WonderCo DB-Shepherd demo'). NOT a credential — the resolve token is server-generated.
  - `model` object: Frontier model; defaults to {provider:'anthropic', name:'claude'}.
    - `provider` 'anthropic' | 'openai' | 'google'
    - `name` string
  - `expiresAt` string, date-time, nullable
  - `usageLimit` integer
  - `briefingManifestRef` string, nullable
  - `logoUrl` string, uri, nullable: MNE-1322: optional brand logo (https URL); the agent minted from this invite carries it as its avatar.

## Response `201`

Try-Me Config created (with a server-generated token) and a compute key bound server-side. The compute key is NOT returned (MNE-828).

- object
  - `config` object, required
    - `id` string, uuid, required
    - `token` string, required: The single-use resolve credential. MNE-828: server-generated, high-entropy, prefixed `tryme_…` (no longer a user-chosen slug). Existing low-entropy tokens keep resolving (back-compat).
    - `label` string, nullable: MNE-828: optional operator label (free text) for the operator's own list. NOT a credential and never resolved against.
    - `scenario_id` string, required
    - `model_provider` 'anthropic' | 'openai' | 'google', required
    - `model_name` string, required
    - `compute_key_ref` string, nullable: mnemom_api_keys.key_id of the bound compute key.
    - `briefing_manifest_ref` string, nullable
    - `logo_url` string, uri, nullable: MNE-1322: optional brand logo (https URL) attached to the invite; the agent minted from it carries this as its avatar.
    - `usage_limit` integer, required
    - `uses_remaining` integer, required: Burns to 0 on first use.
    - `used_at` string, date-time, nullable
    - `expires_at` string, date-time, nullable
    - `self_serve_resettable` boolean: When true, the anon self-serve reset (POST /dojo/try-me/reset) may re-arm this token. Default false (opt-in).
    - `reset_count` integer: Monotonic self-serve reset count, capped in-handler to bound farmed births.
    - `created_by` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `share_line` string, required: MNE-804 — the agent-directive entry one-liner the operator copies and SENDS to the person they're inviting: an invite to spar in the Dojo that tells the agent to CONNECT to the Mnemom MCP and call `get_started` with the (server-generated) token, or (no MCP) HTTP GET the resolve endpoint and read the RAW JSON, then follow the returned manifest verbatim. Never 'visit', never a password prompt.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `409`: Resource conflict — the request cannot proceed because of a current state conflict (e.g., resource already exists, version mismatch, in-flight idempotency key with a different body).
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
