Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.
The playground is a chat screen in the dashboard that sends a real request to a
real model. It is not a simulator and not a sandbox.
A playground run spends real credit from this workspace’s balance, at the same
rate an API call to the same model would. There is no free tier on this screen.
Before you can send anything you pick a key. The screen labels the control
Send as key and explains what it is for:
The key this request is testing. Its tokens and its charge land on this key’s
line, which is what makes a playground run and an API call read the same in
your usage.
The key is attribution, not authentication. The playground is authenticated by
your dashboard session; the key you pick decides which key’s line the spend lands
on. You never paste a key secret into the playground, and you could not: only a
hash of it exists, so there is nothing to paste back.No key means no playground. A workspace with no keys cannot use this screen,
and the screen says so and points at Keys rather than leaving the composer
looking broken:
Every playground request sends as one of this workspace’s API keys, so its
usage lands on that key’s line. Create a key and this composer unlocks.
Sending without naming a key is refused with:
Every playground request sends as one of this workspace’s API keys, so its
spend lands on that key’s line. Pick a key, or create one on the Keys screen if
this workspace has none yet.
Exactly the keys your key list shows you, and no others. An owner or admin can
send as any key in the workspace; everybody else can send as the keys they are
accountable for or named on. A reserved key that has not been viewed yet is not
offered, because it is not a key yet.A key that does not exist and a key you are not allowed to see are refused with
the same message:
That is not a key you can send as in this workspace. Pick one from your own key
list.
One message rather than two, because two would tell you which hidden keys exist,
which is the thing a member limit is for. See
Who can see which keys.
A playground run is admitted, held against your balance, and settled the same way
an API request is. The same code path serves both doors, so the request that
leaves us is the same request either way.That means:
It holds an estimated maximum before the model is called, and a run you
cannot pay for is refused before it reaches a provider.
It settles at the provider’s rate at face value, with no markup, exactly like
an API call.
It writes a usage record on that key’s line, alongside the member who was at
the keyboard. Those are two different facts: the key says whose line the spend
lands on, the member says who sent it.
So a model you tested in the playground and then called through the API tell one
story about the same spend rather than two.
The prompt and the reply are not stored, here or on our side. The screen states
it rather than letting you find out:
The playground keeps no history, because we never store prompts. Leaving this
screen loses what is on it.
There is no history, no saved session, and no shareable link to a run. If you
want to keep a prompt, keep it on your side. See
Data and privacy.The metadata is kept, like any request: the model, the token counts, the cost,
the latency and the outcome. That is what makes the run visible in your usage
figures without the content being anywhere.
Each reply carries one quiet line of figures under it, with each figure labelled:
time to first token, total time, tokens per second, tokens in, tokens out.A figure that was not measured reads unknown rather than 0, because a
measured zero and a missing measurement are different facts and only one of them
is something you can act on.Two absences worth knowing about:
Time to first token reads unknown. The playground does not stream yet, so
the reply arrives in one piece and there is no first-token moment to measure. A
streamed API request does carry that timing.
No cost appears on this line. The charge is computed in one place and shown
in your usage figures, not worked out by this screen. To see what a run cost,
read it in your usage. See Monitor usage.
Requests are paused. If the owner has paused the workspace, requests are
refused, playground runs included. Reading the pause state is open to every
member; changing it is the owner’s. See
Spend controls.The workspace is suspended. A suspended workspace cannot send at all:
This account is suspended, so it cannot send requests. Contact support.
No credit. A run that the balance cannot cover is refused before the model is
called. Nothing is charged for a request we refuse. See
Credits and billing.
The playground works and it spends real credit, and much of what the finished
screen will do is still open work:
No streaming. The reply arrives complete.
No cost preview before you send, and no cost figure after.
No per-run generation settings beyond choosing the model and the key.
No warning that a run is about to exceed your balance other than the
refusal itself.
The whole conversation is sent again on every turn, which is how a stateless
completions API remembers anything. A long conversation therefore costs more per
turn than a short one, because the prompt grows.
The behaviour on this page comes from the shipped screen and the route behind it,
including the key requirement and the refusal wording. It was not exercised
against a deployed environment for this documentation, and the playground stories
that would accept this screen are still open.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Hopscotch","description":"OpenAI-compatible LLM router. One key, one endpoint, every model.","colors":{"primary":"#00786a","light":"#00c5a9","dark":"#00786a"},"logo":{"light":"https://mintcdn.com/unirouter/e-jU4qy0Y8gPhRZJ/logo/light.svg?fit=max\u0026auto=format\u0026n=e-jU4qy0Y8gPhRZJ\u0026q=85\u0026s=eb9901b22939c791c90369af09611ebe","dark":"https://mintcdn.com/unirouter/e-jU4qy0Y8gPhRZJ/logo/dark.svg?fit=max\u0026auto=format\u0026n=e-jU4qy0Y8gPhRZJ\u0026q=85\u0026s=22613b0632e285d26d92e43e064b95db","href":"/"},"favicon":{"light":"https://mintcdn.com/unirouter/e-jU4qy0Y8gPhRZJ/favicon/light.svg?fit=max\u0026auto=format\u0026n=e-jU4qy0Y8gPhRZJ\u0026q=85\u0026s=cddcf3547075243322e642a21f97d9eb","dark":"https://mintcdn.com/unirouter/e-jU4qy0Y8gPhRZJ/favicon/dark.svg?fit=max\u0026auto=format\u0026n=e-jU4qy0Y8gPhRZJ\u0026q=85\u0026s=613a4663bfe054aab755b5eae7c3c7b8"},"api":{"openapi":"api-reference/openapi.public.json","playground":{"display":"interactive"}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#f1f0ea","dark":"#111110"}},"navbar":{"links":[{"href":"https://platform.hopscotchlabs.ai","label":"Dashboard"}]},"seo":{"indexing":"navigable"},"fonts":{"family":"Geist"},"icons":{"library":"tabler"},"styling":{"eyebrows":"section","codeblocks":{"theme":{"light":"vitesse-light","dark":"vesper"}},"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"unirouter","hasAudioNarration":false,"actualSubdomain":"unirouter","customDomains":["docs.hopscotchlabs.ai"],"gitSource":{"type":"github","owner":"uniblock-dev","repo":"unirouter-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adb83702d3c9c6f327a005f","collectionId":"39af8e51-e739-4223-bac0-6495e7203215","liveDeploymentHistoryId":"6adb83702d3c9c6f327a005f","schemaVersion":"v3"},"entitlements":{},"buildId":"6adb83702d3c9c6f327a005f","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Integrations","count":21},{"language":"default","tag":"Features","count":20},{"language":"default","tag":"Manage \u0026 monitor","count":18},{"language":"default","tag":"Coding agents","count":14},{"language":"default","tag":"API Reference","count":12},{"language":"default","tag":"Get started","count":9},{"language":"default","tag":"Overview","count":8},{"language":"default","tag":"Endpoints","count":7},{"language":"default","tag":"Request features","count":6},{"language":"default","tag":"SDKs and frameworks","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"brand.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--uni-bg:#111110;--uni-pane:#161615;--uni-ink:#d2d2cc;--uni-mute:#9e9e98;--uni-dim:#80807a;--uni-faint:#61615b;--uni-bg-light:#f1f0ea;--uni-pane-light:#fafaf6;--uni-ink-light:#2b2b25;--uni-mute-light:#51514b;--uni-dim-light:#6c6c66;--uni-faint-light:#8a8a84;--uni-live:#00c5a9;--uni-live-light:#00786a;--uni-blue:#00afff;--uni-cyan:#00bfdf;--uni-indigo:#7c9cff;--uni-lime:#98b305;--uni-orange:#ef8600;--uni-pink:#f771a0;--uni-teal:#00c5a9;--uni-violet:#b688fe;--uni-ease-snap:cubic-bezier(0.22, 0.61, 0.36, 1)}[data-component-part=code-block],[data-component-part=code-block] *,code,kbd,pre,pre *,samp{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace}@supports (corner-shape:squircle){*{corner-shape:squircle}}::selection{background:rgb(126 200 212/.28);color:currentColor}:focus-visible:not(input):not(textarea):not(select){outline:1.5px solid color-mix(in srgb,currentColor 55%,transparent);outline-offset:3px}.overflow-x-auto,.overflow-y-auto,[data-component-part=code-block],body,html,pre{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,currentColor 16%,transparent) transparent}[data-component-part=code-block]::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar,pre::-webkit-scrollbar{width:6px;height:6px}[data-component-part=code-block]::-webkit-scrollbar-thumb,body::-webkit-scrollbar-thumb,html::-webkit-scrollbar-thumb,pre::-webkit-scrollbar-thumb{background:color-mix(in srgb,currentColor 16%,transparent);border-radius:99px;border:2px solid transparent;background-clip:padding-box}[data-component-part=code-block]::-webkit-scrollbar-track,body::-webkit-scrollbar-track,html::-webkit-scrollbar-track,pre::-webkit-scrollbar-track{background:0 0}body{font-feature-settings:\"ss01\" on,\"cv11\" on;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:root{--uni-ramp-bg:var(--uni-bg-light);--uni-ramp-pane:var(--uni-pane-light);--uni-ramp-ink:var(--uni-ink-light);--uni-ramp-mute:var(--uni-mute-light);--uni-ramp-dim:var(--uni-dim-light);--uni-ramp-faint:var(--uni-faint-light);--uni-ramp-line:color-mix(in srgb, var(--uni-ramp-ink) 10%, transparent);--uni-ramp-line-strong:color-mix(\n in srgb,\n var(--uni-ramp-ink) 16%,\n transparent\n );--uni-ramp-chip:color-mix(in srgb, var(--uni-ramp-ink) 6%, transparent);--uni-ramp-ink-hover:color-mix(\n in srgb,\n var(--uni-ramp-ink) 88%,\n var(--uni-ramp-bg)\n )}html.dark{--uni-ramp-bg:var(--uni-bg);--uni-ramp-pane:var(--uni-pane);--uni-ramp-ink:var(--uni-ink);--uni-ramp-mute:var(--uni-mute);--uni-ramp-dim:var(--uni-dim);--uni-ramp-faint:var(--uni-faint);--uni-ramp-line:rgb(255 255 255 / 0.08);--uni-ramp-line-strong:rgb(255 255 255 / 0.14)}.api-section,.callout,.card,details.accordion{background:var(--uni-ramp-pane);border:1px solid var(--uni-ramp-line);box-shadow:inset 0 1px 0 color-mix(in srgb,var(--uni-ramp-ink) 6%,transparent)}.card{border-radius:14px}.api-section,.callout,details.accordion{border-radius:12px}.card{transition:border-color 200ms var(--uni-ease-snap)}.card:hover{border-color:var(--uni-ramp-line-strong)}[data-component-part=card-icon]{color:var(--uni-ramp-mute);fill:var(--uni-ramp-mute)}[data-component-part=card-title]{color:var(--uni-ramp-ink);font-size:.875rem;font-weight:400;line-height:1.3;margin-top:.75rem}[data-component-part=card-content],[data-component-part=card-content] p,[data-component-part=card-content] span{color:var(--uni-ramp-mute);font-size:.8125rem;line-height:1.4}.accordion-group{background:var(--uni-ramp-pane);border:1px solid var(--uni-ramp-line);border-radius:12px;box-shadow:inset 0 1px 0 color-mix(in srgb,var(--uni-ramp-ink) 6%,transparent);overflow:hidden}.accordion-group>details.accordion{background:0 0;border:0;border-radius:0;box-shadow:none}.accordion-group>details.accordion+details.accordion{border-top:1px solid var(--uni-ramp-line)}[data-component-part=accordion-button]{padding:.75rem 1.25rem}[data-component-part=accordion-title]{color:var(--uni-ramp-ink);font-size:.875rem;font-weight:400;line-height:1.3}[data-component-part=accordion-caret-right]{color:var(--uni-ramp-faint);transition:transform 200ms var(--uni-ease-snap)}[data-component-part=accordion-content]{border-top:1px solid var(--uni-ramp-line);padding:1rem 1.25rem}.callout{padding:1rem 1.25rem}[data-component-part=callout-content],[data-component-part=callout-content] p{color:var(--uni-ramp-ink);font-size:.8125rem;line-height:1.5}[data-component-part=code-block-root]{border:1px solid var(--uni-ramp-line)}[data-component-part=code-block-header-filename],[data-component-part=code-block-header],[data-component-part=code-group-tab-bar]{color:var(--uni-ramp-dim);font-size:.75rem;line-height:1.4}[data-component-part=code-group-tab-bar]{border-bottom:1px solid var(--uni-ramp-line)}[data-component-part=step-line]{background:var(--uni-ramp-line)}[data-component-part=step-number]>*{background:var(--uni-ramp-chip);color:var(--uni-ramp-ink);font-size:.6875rem;font-weight:400}[data-component-part=step-title]{color:var(--uni-ramp-ink);font-size:.875rem;font-weight:400;line-height:1.3}.api-section{padding:1.25rem}.api-section+.api-section{margin-top:.75rem}.api-section-heading-title{color:var(--uni-ramp-ink);font-size:.875rem;font-weight:400;line-height:1.3}.api-section-heading-subtitle{color:var(--uni-ramp-dim);font-size:.75rem;line-height:1.4}.param-head{border-bottom:1px solid var(--uni-ramp-line);padding-bottom:.5rem}.array-param-field:last-child>.param-head,.object-param-field:last-child>.param-head,.primitive-param-field:last-child>.param-head{border-bottom:0}[data-component-part=field-name]{color:var(--uni-ramp-ink);font-weight:500}[data-component-part=field-name]:hover{color:var(--uni-ramp-ink);text-decoration:underline;text-decoration-color:var(--uni-ramp-line-strong);text-underline-offset:3px}[data-component-part=field-meta]{color:var(--uni-ramp-dim);font-size:.75rem}[data-component-part=field-info-pill],[data-component-part=field-required-pill]{background:var(--uni-ramp-chip);border-radius:9999px;color:var(--uni-ramp-ink);font-size:.6875rem;font-weight:400;padding:.0625rem .5rem}[data-component-part=field-info-pill]{color:var(--uni-ramp-dim)}.method-nav-pill,.method-pill{border-radius:0;font-size:.625rem;font-weight:400;letter-spacing:.06em;padding:.125rem .375rem;text-transform:uppercase}.tryit-button{background:var(--uni-ramp-ink);border-radius:10px;color:var(--uni-ramp-bg);font-weight:400;transition:background 200ms var(--uni-ease-snap)}.tryit-button:hover{background:var(--uni-ramp-ink-hover);filter:none;opacity:1}.tryit-button svg{fill:var(--uni-ramp-bg);color:var(--uni-ramp-bg)}[data-component-part=expandable-button]{color:var(--uni-ramp-dim);font-size:.75rem}[data-component-part=expandable-button]:hover{color:var(--uni-ramp-ink)}[data-component-part=expandable-content]{border-left:1px solid var(--uni-ramp-line);padding-left:1rem}[data-provider]{--uni-accent:var(--uni-ramp-mute)}[data-provider]:not(.card){align-items:center;display:inline-flex;gap:.375rem}[data-provider]:not(.card)::before{background:var(--uni-accent);content:\"\";display:inline-block;flex:none;height:6px;width:6px}[data-provider][data-mark=tag]{background:var(--uni-accent);border-radius:0;color:#111110;font-size:.625rem;letter-spacing:.06em;padding:.125rem .25rem;text-transform:uppercase}[data-provider][data-mark=tag]::before{content:none}[data-provider=alibaba],[data-provider=anthropic],[data-provider=mistral],[data-provider=qwen]{--uni-accent:var(--uni-orange)}[data-provider=openai]{--uni-accent:var(--uni-blue)}[data-provider=fireworks],[data-provider=moonshot]{--uni-accent:var(--uni-cyan)}[data-provider=deepseek]{--uni-accent:var(--uni-teal)}[data-provider=deepinfra]{--uni-accent:var(--uni-indigo)}[data-provider=google],[data-provider=z-ai],[data-provider=zai],[data-provider=zhipu]{--uni-accent:var(--uni-violet)}[data-provider=groq]{--uni-accent:var(--uni-pink)}[data-provider=meta],[data-provider=together]{--uni-accent:var(--uni-lime)}.card[data-provider] [data-component-part=card-icon]{color:var(--uni-accent);fill:var(--uni-accent)}"}],"page":{"pagePath":"features/playground","slug":"/features/playground","pageMetadata":{"title":"Playground","description":"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.","status":"partial","gates":["8.10","8.13","8.14","8.16","8.17","8.18","8.19","8.20","8.21","8.23"],"href":"/features/playground"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The playground is a chat screen in the dashboard that sends a real request to a\nreal model. It is not a simulator and not a sandbox.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`A playground run spends real credit from this workspace’s balance, at the same\nrate an API call to the same model would. There is no free tier on this screen.`})}),`\n`,_jsx(Heading,{level:`2`,id:`every-run-sends-as-one-of-your-keys`,children:`Every run sends as one of your keys`}),`\n`,_jsxs(_components.p,{children:[`Before you can send anything you pick a key. The screen labels the control\n`,_jsx(_components.code,{children:`Send as key`}),` and explains what it is for:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`The key this request is testing. Its tokens and its charge land on this key’s\nline, which is what makes a playground run and an API call read the same in\nyour usage.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`The key is attribution, not authentication. The playground is authenticated by\nyour dashboard session; the key you pick decides which key’s line the spend lands\non. You never paste a key secret into the playground, and you could not: only a\nhash of it exists, so there is nothing to paste back.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`No key means no playground.`}),` A workspace with no keys cannot use this screen,\nand the screen says so and points at Keys rather than leaving the composer\nlooking broken:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Every playground request sends as one of this workspace’s API keys, so its\nusage lands on that key’s line. Create a key and this composer unlocks.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Sending without naming a key is refused with:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Every playground request sends as one of this workspace’s API keys, so its\nspend lands on that key’s line. Pick a key, or create one on the Keys screen if\nthis workspace has none yet.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`which-keys-you-can-send-as`,children:`Which keys you can send as`}),`\n`,_jsx(_components.p,{children:`Exactly the keys your key list shows you, and no others. An owner or admin can\nsend as any key in the workspace; everybody else can send as the keys they are\naccountable for or named on. A reserved key that has not been viewed yet is not\noffered, because it is not a key yet.`}),`\n`,_jsx(_components.p,{children:`A key that does not exist and a key you are not allowed to see are refused with\nthe same message:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`That is not a key you can send as in this workspace. Pick one from your own key\nlist.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`One message rather than two, because two would tell you which hidden keys exist,\nwhich is the thing a member limit is for. See\n`,_jsx(_components.a,{href:`/get-started/create-an-api-key#who-can-see-which-keys`,children:`Who can see which keys`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-run-does-to-your-balance`,children:`What a run does to your balance`}),`\n`,_jsx(_components.p,{children:`A playground run is admitted, held against your balance, and settled the same way\nan API request is. The same code path serves both doors, so the request that\nleaves us is the same request either way.`}),`\n`,_jsx(_components.p,{children:`That means:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`It holds an estimated maximum before the model is called, and a run you\ncannot pay for is refused before it reaches a provider.`}),`\n`,_jsx(_components.li,{children:`It settles at the provider’s rate at face value, with no markup, exactly like\nan API call.`}),`\n`,_jsx(_components.li,{children:`It writes a usage record on that key’s line, alongside the member who was at\nthe keyboard. Those are two different facts: the key says whose line the spend\nlands on, the member says who sent it.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`So a model you tested in the playground and then called through the API tell one\nstory about the same spend rather than two.`}),`\n`,_jsx(Heading,{level:`2`,id:`nothing-is-stored`,children:`Nothing is stored`}),`\n`,_jsx(_components.p,{children:`The prompt and the reply are not stored, here or on our side. The screen states\nit rather than letting you find out:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`The playground keeps no history, because we never store prompts. Leaving this\nscreen loses what is on it.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`There is no history, no saved session, and no shareable link to a run. If you\nwant to keep a prompt, keep it on your side. See\n`,_jsx(_components.a,{href:`/manage/data-and-privacy`,children:`Data and privacy`}),`.`]}),`\n`,_jsx(_components.p,{children:`The metadata is kept, like any request: the model, the token counts, the cost,\nthe latency and the outcome. That is what makes the run visible in your usage\nfigures without the content being anywhere.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-metrics-line`,children:`The metrics line`}),`\n`,_jsx(_components.p,{children:`Each reply carries one quiet line of figures under it, with each figure labelled:\ntime to first token, total time, tokens per second, tokens in, tokens out.`}),`\n`,_jsxs(_components.p,{children:[`A figure that was not measured reads `,_jsx(_components.code,{children:`unknown`}),` rather than `,_jsx(_components.code,{children:`0`}),`, because a\nmeasured zero and a missing measurement are different facts and only one of them\nis something you can act on.`]}),`\n`,_jsx(_components.p,{children:`Two absences worth knowing about:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Time to first token reads `,_jsx(_components.code,{children:`unknown`}),`.`]}),` The playground does not stream yet, so\nthe reply arrives in one piece and there is no first-token moment to measure. A\nstreamed API request does carry that timing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No cost appears on this line.`}),` The charge is computed in one place and shown\nin your usage figures, not worked out by this screen. To see what a run cost,\nread it in your usage. See `,_jsx(_components.a,{href:`/manage/monitor-usage`,children:`Monitor usage`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`refusals-you-may-hit`,children:`Refusals you may hit`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Requests are paused.`}),` If the owner has paused the workspace, requests are\nrefused, playground runs included. Reading the pause state is open to every\nmember; changing it is the owner’s. See\n`,_jsx(_components.a,{href:`/manage/spend-controls`,children:`Spend controls`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The workspace is suspended.`}),` A suspended workspace cannot send at all:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`This account is suspended, so it cannot send requests. Contact support.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`No credit.`}),` A run that the balance cannot cover is refused before the model is\ncalled. Nothing is charged for a request we refuse. See\n`,_jsx(_components.a,{href:`/manage/credits-and-billing`,children:`Credits and billing`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-not-built-yet`,children:`What is not built yet`}),`\n`,_jsx(_components.p,{children:`The playground works and it spends real credit, and much of what the finished\nscreen will do is still open work:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No streaming.`}),` The reply arrives complete.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No cost preview before you send`}),`, and no cost figure after.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No per-run generation settings`}),` beyond choosing the model and the key.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No warning that a run is about to exceed your balance`}),` other than the\nrefusal itself.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The whole conversation is sent again on every turn, which is how a stateless\ncompletions API remembers anything. A long conversation therefore costs more per\nturn than a short one, because the prompt grows.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-we-did-not-verify`,children:`What we did not verify`}),`\n`,_jsx(_components.p,{children:`The behaviour on this page comes from the shipped screen and the route behind it,\nincluding the key requirement and the refusal wording. It was not exercised\nagainst a deployed environment for this documentation, and the playground stories\nthat would accept this screen are still open.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"vitesse-light","dark":"vesper"}},"config":{},"pageMetadata":{"title":"Playground","description":"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.","status":"partial","gates":["8.10","8.13","8.14","8.16","8.17","8.18","8.19","8.20","8.21","8.23"],"href":"/features/playground"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Every run sends as one of your keys","slug":"every-run-sends-as-one-of-your-keys","depth":2,"children":[{"title":"Which keys you can send as","slug":"which-keys-you-can-send-as","depth":3,"children":[]}]},{"title":"What a run does to your balance","slug":"what-a-run-does-to-your-balance","depth":2,"children":[]},{"title":"Nothing is stored","slug":"nothing-is-stored","depth":2,"children":[]},{"title":"The metrics line","slug":"the-metrics-line","depth":2,"children":[]},{"title":"Refusals you may hit","slug":"refusals-you-may-hit","depth":2,"children":[]},{"title":"What is not built yet","slug":"what-is-not-built-yet","depth":2,"children":[]},{"title":"What we did not verify","slug":"what-we-did-not-verify","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"unirouter","siteName":"Hopscotch","title":"Playground - Hopscotch","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T14:53:24.483Z","originalFileLocation":"features/playground.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Hopscotch\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Playground - Hopscotch\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Hopscotch\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.hopscotchlabs.ai/features/playground\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://unirouter.mintlify.app/_mintlify/api/og/v2?division=Try+it\u0026amp;title=Playground\u0026amp;description=Run+a+real+request+from+the+dashboard.+Every+run+sends+as+one+of+your+workspace+keys%2C+spends+real+credit%2C+and+stores+nothing.\u0026amp;theme=6715395fa0e7fb019cdde93e\u0026amp;signature=01f7f5a8e6832155364dde2426dc21639615f9ebb6563778a57f987771b90e6f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Playground - Hopscotch\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://unirouter.mintlify.app/_mintlify/api/og/v2?division=Try+it\u0026amp;title=Playground\u0026amp;description=Run+a+real+request+from+the+dashboard.+Every+run+sends+as+one+of+your+workspace+keys%2C+spends+real+credit%2C+and+stores+nothing.\u0026amp;theme=6715395fa0e7fb019cdde93e\u0026amp;signature=01f7f5a8e6832155364dde2426dc21639615f9ebb6563778a57f987771b90e6f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/unirouter/51ojQE1LhN9oLy-j/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Hopscotch\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00786a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.hopscotchlabs.ai/features/playground\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/playground.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.hopscotchlabs.ai/#organization\",\"name\":\"Hopscotch\",\"url\":\"https://docs.hopscotchlabs.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/unirouter/e-jU4qy0Y8gPhRZJ/logo/light.svg?fit=max\u0026auto=format\u0026n=e-jU4qy0Y8gPhRZJ\u0026q=85\u0026s=eb9901b22939c791c90369af09611ebe\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.hopscotchlabs.ai#website\",\"name\":\"Hopscotch\",\"url\":\"https://docs.hopscotchlabs.ai\",\"publisher\":{\"@id\":\"https://docs.hopscotchlabs.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.hopscotchlabs.ai/features/playground#webpage\",\"url\":\"https://docs.hopscotchlabs.ai/features/playground\",\"name\":\"Playground\",\"description\":\"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\",\"dateModified\":\"2026-10-22T14:53:24.483Z\",\"isPartOf\":{\"@id\":\"https://docs.hopscotchlabs.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.hopscotchlabs.ai/features/playground#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.hopscotchlabs.ai/features/playground#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hopscotch\",\"item\":\"https://docs.hopscotchlabs.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Playground\",\"item\":\"https://docs.hopscotchlabs.ai/features/playground\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.hopscotchlabs.ai/features/playground#article\",\"headline\":\"Playground\",\"name\":\"Playground\",\"description\":\"Run a real request from the dashboard. Every run sends as one of your workspace keys, spends real credit, and stores nothing.\",\"url\":\"https://docs.hopscotchlabs.ai/features/playground\",\"mainEntityOfPage\":{\"@id\":\"https://docs.hopscotchlabs.ai/features/playground#webpage\"},\"dateModified\":\"2026-10-22T14:53:24.483Z\",\"publisher\":{\"@id\":\"https://docs.hopscotchlabs.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.hopscotchlabs.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Hopscotch\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Hopscotch","nav":{"global":null,"tabs":[{"tab":"Get started","icon":"player-play","pages":[{"title":"Get started","href":""}]},{"tab":"Features","icon":"stack-2","groups":[{"group":"Overview","pages":[{"title":"Features","href":"/features/overview"}]},{"group":"Models","pages":[{"title":"Models","href":"/features/models"},{"title":"Model capabilities","href":"/features/model-capabilities"},{"title":"Model lifecycle","href":"/features/model-lifecycle"}]},{"group":"Request features","pages":[{"title":"Streaming","href":"/features/streaming"},{"title":"Tool calling","href":"/features/tool-calling"},{"title":"Structured outputs","href":"/features/structured-outputs"},{"title":"Image inputs","href":"/features/image-inputs"},{"title":"Reasoning models","href":"/features/reasoning"},{"title":"Prompt caching","href":"/features/prompt-caching"}]},{"group":"More endpoints","pages":[{"title":"Responses API","href":"/features/responses-api"},{"title":"Completions and embeddings","href":"/features/completions-and-embeddings"},{"title":"Anthropic Messages API","href":"/features/anthropic-messages"},{"title":"Usage lookup","href":"/features/usage-lookup"}]},{"group":"Routing and reliability","pages":[{"title":"Routing profiles","href":"/features/routing-profiles"},{"title":"Bring your own key","href":"/features/bring-your-own-key"},{"title":"Guardrails","href":"/features/guardrails"},{"title":"Errors and refusals","description":"One error body for the whole API, a closed set of types, and a request id on every response, so a failure tells you what to do next.","href":"/features/errors"}]},{"group":"Try it","pages":[{"title":"Playground","href":"/features/playground"}]},{"group":"Coming soon","pages":[{"title":"Images, audio and video","description":"Coming soon: image generation and editing, speech, transcription, translation and video jobs on the same key and balance, and what a call returns today.","href":"/features/images-audio-and-video"}]}]},{"tab":"Manage \u0026 monitor","icon":"gauge","pages":[{"title":"Manage \u0026 monitor","href":"/manage/overview"}]},{"tab":"Integrations","icon":"plug","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"title":"Playground - Hopscotch","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}