There is no separate base URL. The key prefix — unif_sk_test_ — decides the environment, so
switching is a matter of changing one environment variable.
A fixed fixture set of about 500 shops, 5,000 products and 2,000 creators
Credits
Never charged; GET /usage reports the live balance unchanged
Freshness
meta.refreshed_at is fixed to the fixture’s build date
Jobs
Complete in seconds regardless of size
Coverage
Mirrors tiktok_shop / US for every requested market
Fixture data is stable, not realistic. It is built so that assertions do not break, which
means it will not reproduce data-shaped problems — a market with weekly-only granularity, a
creator with a null agency, an ambiguous product. Test those against live data with a small
budget before you ship.
Known fixture IDs are listed in the dashboard under Settings → Sandbox, so you can write tests
against a specific shop or product rather than whatever happens to rank first.
Point CI at the sandbox and keep live keys out of it entirely. A test suite that spends credits
will eventually spend a lot of them on a branch nobody merged.
Sandbox webhooks deliver real signed requests with their own secret, so your verification code is
exercised properly. Register an endpoint with a test key and it fires on sandbox jobs and trackers
only — sandbox events never reach a live endpoint, and vice versa.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Unif","description":"One schema for commerce data across every channel.","colors":{"primary":"#15803D","light":"#3ECD75","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/unifdev/t6BPluVf4xKZ3_nf/logo/light.svg?fit=max\u0026auto=format\u0026n=t6BPluVf4xKZ3_nf\u0026q=85\u0026s=b9b4ff2d35ee8ff9cb9ccef766d4b839","dark":"https://mintcdn.com/unifdev/t6BPluVf4xKZ3_nf/logo/dark.svg?fit=max\u0026auto=format\u0026n=t6BPluVf4xKZ3_nf\u0026q=85\u0026s=60f1adbd68708a9930e9234f8db92815","href":"/"},"favicon":"https://mintcdn.com/unifdev/t6BPluVf4xKZ3_nf/favicon.svg?fit=max\u0026auto=format\u0026n=t6BPluVf4xKZ3_nf\u0026q=85\u0026s=eaf2ff555b5275e691ac9f1f2c25514b","api":{"params":{"expanded":"all"},"examples":{"defaults":"all","prefill":true,"autogenerate":true},"url":"full","mdx":{"auth":{"method":"bearer"}}},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.unif.dev"}},"footer":{"links":[{"header":"Product","items":[{"label":"Quickstart","href":"/docs/quickstart"},{"label":"API reference","href":"/api-reference/introduction"},{"label":"Changelog","href":"/changelog"}]},{"header":"Concepts","items":[{"label":"Unified model","href":"/docs/concepts/unified-model"},{"label":"Entities","href":"/docs/concepts/entities"},{"label":"Coverage","href":"/docs/concepts/coverage"}]},{"header":"Support","items":[{"label":"Contact","href":"mailto:[email protected]"},{"label":"Dashboard","href":"https://app.unif.dev"}]}]},"seo":{"metatags":{"og:site_name":"Unif"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"markdown":{"schema":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"unifdev","hasAudioNarration":false,"actualSubdomain":"unifdev","customDomains":["unif.dev"],"gitSource":{"type":"github","owner":"winsloop","repo":"unif","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aa9f54cdd8d74ee1feb94f8","collectionId":"20eff3fc-1a7b-44dc-9539-384bd7c9b040","liveDeploymentHistoryId":"6aa9f54cdd8d74ee1feb94f8","schemaVersion":"v3"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aa9f966df0e3365e72e777d","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API reference","count":48},{"language":"default","tag":"Documentation","count":30},{"language":"default","tag":"Core concepts","count":8},{"language":"default","tag":"Platform","count":7},{"language":"default","tag":"Lists","count":7},{"language":"default","tag":"Workflows","count":6},{"language":"default","tag":"Guides","count":5},{"language":"default","tag":"Jobs","count":5},{"language":"default","tag":"Webhooks","count":5},{"language":"default","tag":"Creators","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--u-mono:var(--font-mono, ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace);--u-bg:#ffffff;--u-bg-subtle:#f7f8f7;--u-bg-raised:#ffffff;--u-border:#e4e7e4;--u-border-strong:#d2d7d2;--u-text:#10201a;--u-text-muted:#5b6b63;--u-text-faint:#66736d;--u-accent:#15803d;--u-accent-strong:#0f5c2c;--u-accent-wash:#eefcf3;--u-on-accent:#ffffff;--u-neg:#a63d28;--u-line-up:#15803d;--u-line-down:#b4452f;--u-line-flat:#858f8a;--u-warn-bg:#fef6e7;--u-warn-text:#8a5a08;--u-off-bg:#f2f4f3;--u-off-text:#606d67;--u-shadow:0 1px 2px rgba(16, 32, 26, 0.04), 0 14px 34px -18px rgba(16, 32, 26, 0.2);--u-d-bg:#0c1512;--u-d-raised:#101b17;--u-d-border:#263631;--u-d-border-soft:#1f2e28;--u-d-text:#e8efeb;--u-d-muted:#8fa49b;--u-d-label:#7a8f86;--u-d-faint:#75857e;--u-d-code:#9fb3aa;--u-d-code-key:#d4e0da;--u-d-accent:#3ecd75;--u-d-on-accent:#07140d}.dark{--u-bg:#0a0f0d;--u-bg-subtle:#0f1613;--u-bg-raised:#121a17;--u-border:#1e2825;--u-border-strong:#2b3733;--u-text:#eef2f0;--u-text-muted:#9aaaa3;--u-text-faint:#8a9a93;--u-accent:#3ecd75;--u-accent-strong:#5fdc8d;--u-accent-wash:#0f2418;--u-on-accent:#071310;--u-neg:#f08c72;--u-line-up:#3ecd75;--u-line-down:#f08c72;--u-line-flat:#7c8c86;--u-warn-bg:#2a2110;--u-warn-text:#e8bd6a;--u-off-bg:#151d1a;--u-off-text:#9aaaa3;--u-shadow:0 1px 2px rgba(0, 0, 0, 0.3), 0 14px 34px -18px rgba(0, 0, 0, 0.6);--u-d-bg:#101a16;--u-d-raised:#16211c}.u-page p,.u-panel-body pre{margin:0}.u-page{color:var(--u-text);font-size:16px;line-height:1.6}.u-section{max-width:1160px;margin:0 auto;padding:92px 24px}.u-band{border-top:1px solid var(--u-border);border-bottom:1px solid var(--u-border);background:var(--u-bg-subtle)}.u-band--dark{background:var(--u-d-bg);border-color:transparent;color:var(--u-d-text)}.u-strip{border-top:1px solid var(--u-border);border-bottom:1px solid var(--u-border);background:var(--u-bg)}.u-strip-inner{max-width:1160px;margin:0 auto;padding:30px 24px;display:flex;align-items:center;gap:26px;flex-wrap:wrap}.u-strip-label{flex:none;font-family:var(--u-mono);font-size:11.5px;letter-spacing:.09em;color:var(--u-text-faint)}.u-strip-note{flex-grow:1;min-width:230px;font-size:14px;line-height:1.55;color:var(--u-text-faint);text-align:right}.u-eyebrow{display:flex;align-items:center;flex-wrap:wrap;gap:12px;font-family:var(--u-mono);font-size:12px;letter-spacing:.1em;color:var(--u-text-muted);margin-bottom:28px}.u-eyebrow-live{display:inline-flex;align-items:center;gap:7px;color:var(--u-accent-strong)}.u-eyebrow-sep{color:var(--u-border-strong)}.u-dot{width:6px;height:6px;border-radius:50%;background:var(--u-accent);flex:none}.u-h1,.u-h2{font-size:clamp(2.3rem,4.6vw,3.4rem);line-height:1.05;letter-spacing:-.034em;font-weight:620;margin:0 0 24px;max-width:17ch;text-wrap:balance}.u-h2{font-size:clamp(1.7rem,3vw,2.5rem);line-height:1.12;letter-spacing:-.028em;margin:0 0 14px;max-width:26ch}.u-h2--wide{max-width:32ch}.u-lede,.u-triptych p{line-height:1.6;margin:0}.u-lede{font-size:1.0625rem;color:var(--u-text-muted);max-width:64ch;text-wrap:pretty}.u-hero .u-lede{font-size:1.1875rem;max-width:60ch}.u-kicker{font-family:var(--u-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--u-accent-strong);margin:0 0 16px}.u-note{margin-top:24px;font-size:13px;color:var(--u-text-faint)}.u-mono,.u-note{font-family:var(--u-mono)}.u-hero,.u-link{align-items:center}.u-link{display:inline-flex;gap:8px;font-size:16px;font-weight:560;color:var(--u-accent-strong);text-decoration:none}.u-link:hover{color:var(--u-accent)}.u-hero{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,.96fr);gap:60px;padding-top:84px;padding-bottom:84px}.u-cta-row{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:36px}.u-btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-size:16px;font-weight:560;height:50px;padding:0 24px;border-radius:10px;text-decoration:none;border:1px solid transparent;transition:background-color .15s ease,border-color .15s ease,transform .15s ease}.u-btn:hover{transform:translateY(-1px)}.u-btn--primary{background:var(--u-accent);color:var(--u-on-accent)}.u-btn--primary:hover{background:var(--u-accent-strong);color:var(--u-on-accent)}.u-btn--ghost{background:var(--u-bg-raised);color:var(--u-text);border-color:var(--u-border-strong)}.u-btn--ghost:hover{border-color:var(--u-accent);color:var(--u-text)}.u-btn--bright{font-weight:620}.u-btn--bright,.u-btn--bright:hover{background:var(--u-d-accent);color:var(--u-d-on-accent)}.u-btn--outline{border-color:var(--u-d-border);color:var(--u-d-text);background:0 0}.u-btn--outline:hover{border-color:var(--u-d-accent);color:var(--u-d-text)}.u-panel{border:1px solid var(--u-border);border-radius:13px;background:var(--u-bg-raised);box-shadow:var(--u-shadow);overflow:hidden}.u-panel-bar,.u-table td{border-bottom:1px solid var(--u-border);color:var(--u-text-muted)}.u-panel-bar{display:flex;align-items:center;gap:9px;padding:13px 18px;background:var(--u-bg-subtle);font-family:var(--u-mono);font-size:12.5px}.u-panel-bar .u-dot{width:7px;height:7px}.u-panel-body{padding:4px 14px 10px}.u-cascade-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:44px 0 14px;font-family:var(--u-mono);font-size:11.5px;letter-spacing:.09em;color:var(--u-d-label)}.u-cascade{display:flex;flex-direction:column;gap:9px}.u-cas{display:flex;align-items:center;gap:20px;padding:15px 20px;border:1px solid var(--u-d-border-soft);border-radius:9px;font-family:var(--u-mono);font-size:13px}.u-cas--hit{border-color:var(--u-d-accent);background:var(--u-d-raised)}.u-cas--skip{border-style:dashed}.u-cas-n{flex:none;width:26px;font-size:12px;color:var(--u-d-faint)}.u-cas-payload{flex-grow:1;min-width:0;color:var(--u-d-code);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.u-cas--hit .u-cas-payload{color:var(--u-d-text)}.u-cas-payload em{font-style:normal}.u-cas-payload b,.u-returned-body b{font-weight:400;color:var(--u-d-code-key)}.u-cas-credits,.u-cas-status{flex:none;width:118px;font-size:12px;color:var(--u-d-label)}.u-cas--hit .u-cas-status{color:var(--u-d-accent)}.u-cas--skip .u-cas-status,.u-cas-payload em{color:var(--u-d-faint)}.u-cas-credits{width:66px;text-align:right}.u-cas--hit .u-cas-credits{color:var(--u-d-accent)}.u-cas--skip .u-cas-credits{color:var(--u-d-faint)}.u-returned{display:flex;align-items:center;gap:16px;margin-top:22px}.u-returned-arrow{flex:none;margin-left:24px}.u-returned-body{flex-grow:1;min-width:0;border:1px solid var(--u-d-border);border-radius:9px;background:var(--u-d-raised);padding:15px 20px;font-family:var(--u-mono);font-size:13px;color:var(--u-d-code);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.u-returned-body em{font-style:normal;color:var(--u-d-label)}.u-returned-body i{font-style:normal}.u-triptych{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px;margin-top:52px;padding-top:40px;border-top:1px solid var(--u-d-border-soft)}.u-triptych h3{font-size:17px;font-weight:620;margin:0 0 7px;letter-spacing:-.01em}.u-triptych p{font-size:14.5px;color:var(--u-d-muted)}.u-band--dark .u-kicker,.u-returned-body i{color:var(--u-d-accent)}.u-band--dark .u-h2,.u-triptych h3{color:var(--u-d-text)}.u-band--dark .u-lede{color:var(--u-d-muted)}.u-chips{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.u-chip{font-size:16px;font-weight:620;letter-spacing:-.01em;padding:7px 15px;border:1px solid var(--u-border-strong);border-radius:8px}.u-chip--ghost,.u-table th{font-family:var(--u-mono);color:var(--u-text-faint)}.u-chip--ghost{font-size:12.5px;font-weight:400;letter-spacing:0;border-style:dashed;padding:8px 15px}.u-channel{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.u-channel-name{font-size:17px;font-weight:620;letter-spacing:-.02em}.u-channel-meta{font-size:14px;color:var(--u-text-muted)}.u-table-wrap{overflow-x:auto}.u-table{width:100%;border-collapse:collapse;font-size:15px;min-width:620px}.u-table th{font-size:11.5px;font-weight:500;letter-spacing:.09em;text-align:left;padding:0 16px 12px 0;border-bottom:1px solid var(--u-text);white-space:nowrap}.u-table td{padding:16px 16px 16px 0;vertical-align:middle}.u-table tr:last-child td{border-bottom:0}.u-table td:last-child,.u-table th:last-child{padding-right:0}.u-t-name{font-weight:620;font-size:16px;color:var(--u-text);letter-spacing:-.01em}.u-t-id{font-family:var(--u-mono);font-size:13px;color:var(--u-accent-strong)}.u-t-fields{font-size:12.5px;color:var(--u-text-faint)}.u-callout code,.u-num,.u-t-fields{font-family:var(--u-mono)}.u-num{font-size:13.5px;text-align:right;white-space:nowrap}.u-num--lead{font-size:14.5px;font-weight:560;color:var(--u-text)}.u-pos{color:var(--u-accent-strong)}.u-neg{color:var(--u-neg)}.u-prod{font-size:15px;font-weight:560;color:var(--u-text);line-height:1.35}.u-prod-shop{font-family:var(--u-mono);font-size:12px;color:var(--u-text-faint);margin-top:4px}.u-spark{display:block}.u-spark--up{color:var(--u-line-up)}.u-spark--down{color:var(--u-line-down)}.u-spark--flat{color:var(--u-line-flat)}.u-table-foot{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:18px;font-family:var(--u-mono);font-size:12.5px;color:var(--u-text-faint)}.u-callout{display:flex;gap:12px;margin-top:22px;padding:16px 18px;border-radius:10px;background:var(--u-accent-wash)}.u-callout svg{flex:none;margin-top:2px}.u-callout-text{font-size:14.5px;line-height:1.6;color:var(--u-accent-strong)}.u-callout code{font-size:13px;background:0 0;padding:0}.u-do{display:flex;flex-direction:column;margin-top:48px}.u-do-row{display:flex;align-items:flex-start;gap:36px;padding:30px 0;border-top:1px solid var(--u-border-strong)}.u-do-row:last-child{border-bottom:1px solid var(--u-border-strong)}.u-do-n{flex:none;width:40px;font-family:var(--u-mono);font-size:13px;color:var(--u-accent);padding-top:5px}.u-do-name{flex:none;width:200px;font-size:22px;font-weight:620;letter-spacing:-.02em;color:var(--u-text)}.u-do-desc{flex-grow:1;margin:0;font-size:16px;line-height:1.62;color:var(--u-text-muted);max-width:46ch}.u-endpoint{flex:none;margin-left:auto;align-self:center;font-family:var(--u-mono);font-size:13px;color:var(--u-text);background:var(--u-bg-raised);border:1px solid var(--u-border);border-radius:7px;padding:7px 12px;text-decoration:none;white-space:nowrap}.u-endpoint:hover{border-color:var(--u-accent);color:var(--u-text)}.u-split{display:flex;gap:72px;align-items:flex-start}.u-split-copy{flex:none;width:430px}.u-copy-p{font-size:16.5px;line-height:1.62;color:var(--u-text-muted);margin:0 0 16px}.u-split-copy .u-h2{margin-bottom:18px}.u-split-copy .u-link{margin-top:10px}.u-cov{flex-grow:1;min-width:0;border:1px solid var(--u-border);border-radius:12px;overflow:hidden}.u-cov-bar,.u-cov-row{border-bottom:1px solid var(--u-border)}.u-cov-bar{padding:13px 20px;background:var(--u-bg-subtle);font-family:var(--u-mono);font-size:12px;color:var(--u-text-muted)}.u-cov-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px}.u-cov-row:last-child{border-bottom:0}.u-cov-field{font-family:var(--u-mono);font-size:13.5px;color:var(--u-text)}.u-cov-meta{font-size:13px;color:var(--u-text-faint);margin-top:3px}.u-pill{flex:none;font-family:var(--u-mono);font-size:11.5px;letter-spacing:.06em;padding:5px 11px;border-radius:999px;white-space:nowrap}.u-pill--full{background:var(--u-accent-wash);color:var(--u-accent-strong)}.u-pill--partial{background:var(--u-warn-bg);color:var(--u-warn-text)}.u-pill--none{background:var(--u-off-bg);color:var(--u-off-text)}.u-pill--live{background:var(--u-accent);color:var(--u-on-accent);font-size:11px;letter-spacing:.07em;padding:4px 10px}.u-closer{display:flex;align-items:center;justify-content:space-between;gap:56px}.u-closer-actions{flex:none;display:flex;flex-direction:column;gap:12px}@media (max-width:1080px){.u-split{gap:44px}.u-split-copy{width:360px}.u-do-name{width:150px}}@media (max-width:960px){.u-section{padding:72px 24px}.u-hero{grid-template-columns:minmax(0,1fr);gap:44px}.u-h1{max-width:none}.u-triptych{grid-template-columns:minmax(0,1fr);gap:22px}.u-split{flex-direction:column;gap:40px}.u-split-copy{width:auto}.u-cov{width:100%}.u-closer{flex-direction:column;align-items:flex-start;gap:32px}.u-strip-note{text-align:left}.u-do-row{flex-wrap:wrap;gap:0 24px}.u-do-name{width:auto;flex-grow:1}.u-do-desc{flex-basis:100%;margin-top:10px;max-width:none}.u-endpoint{margin-left:0;order:3;margin-top:14px}}@media (max-width:640px){.u-section{padding:56px 20px}.u-strip-inner{padding:24px 20px;gap:16px}.u-btn{width:100%}.u-cascade-head{font-size:10.5px}.u-cas{gap:12px;padding:13px 14px;font-size:12px}.u-cas-status{width:86px;font-size:11px}.u-cas-credits{width:40px;font-size:11px}.u-returned-arrow{display:none}.u-returned{margin-left:0}.u-cov-row,.u-table-foot{flex-direction:column;align-items:flex-start;gap:10px}.u-table-foot{gap:8px}}.u-table-wrap--spaced{margin-top:42px}.u-table th.u-th-r{text-align:right}.u-table th.u-th-trend{width:76px}"}],"page":{"pagePath":"docs/platform/sandbox","slug":"/docs/platform/sandbox","pageMetadata":{"title":"Sandbox","description":"Building and testing without spending credits.","icon":"flask","href":"/docs/platform/sandbox"},"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: \"Building and testing without spending credits.\"\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={code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Table,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Every workspace has a sandbox. Use a test key and the API returns fixture data, charges nothing,\nand behaves identically in every other respect.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.unif.dev/v1/products/search`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer unif_sk_test_8f3c1a9e4b2d8065f1a3c7e9b5d2408f\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{ \"market\": \"US\", \"period\": { \"preset\": \"last_30d\" } }'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`There is no separate base URL. The key prefix — `,_jsx(_components.code,{children:`unif_sk_test_`}),` — decides the environment, so\nswitching is a matter of changing one environment variable.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-the-same`,children:`What is the same`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`The full schema`,icon:`code`,children:_jsx(_components.p,{children:`Same fields, same types, same envelope. A client written against the sandbox works unchanged\nagainst live data.`})}),_jsx(Card,{title:`Validation and errors`,icon:`triangle-exclamation`,children:_jsx(_components.p,{children:`Invalid parameters fail with the same codes. Coverage rules and filterability are enforced\nidentically.`})}),_jsx(Card,{title:`Pagination and jobs`,icon:`layer-group`,children:_jsx(_components.p,{children:`Cursors work, jobs run through their statuses, and webhooks deliver with real signatures.`})}),_jsx(Card,{title:`Rate limits`,icon:`gauge-high`,children:_jsx(_components.p,{children:`Enforced at the same thresholds, so you can exercise your backoff path.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-different`,children:`What is different`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Sandbox`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data`}),_jsx(_components.td,{children:`A fixed fixture set of about 500 shops, 5,000 products and 2,000 creators`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Credits`}),_jsxs(_components.td,{children:[`Never charged; `,_jsx(_components.code,{children:`GET /usage`}),` reports the live balance unchanged`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Freshness`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`meta.refreshed_at`}),` is fixed to the fixture’s build date`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Jobs`}),_jsx(_components.td,{children:`Complete in seconds regardless of size`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Coverage`}),_jsxs(_components.td,{children:[`Mirrors `,_jsx(_components.code,{children:`tiktok_shop`}),` / `,_jsx(_components.code,{children:`US`}),` for every requested market`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Fixture data is `,_jsx(_components.strong,{children:`stable, not realistic`}),`. It is built so that assertions do not break, which\nmeans it will not reproduce data-shaped problems — a market with weekly-only granularity, a\ncreator with a null `,_jsx(_components.code,{children:`agency`}),`, an ambiguous product. Test those against live data with a small\nbudget before you ship.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`deterministic-fixtures`,children:`Deterministic fixtures`}),`\n`,_jsx(_components.p,{children:`The same request returns the same rows every time, so you can assert on values:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_search_returns_expected_shape`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`():`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` resp `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.post(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/v1/products/search\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`json`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"market\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"US\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"period\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"preset\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"last_30d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"filters\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"revenue\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"gte\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`50000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sort\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"field\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"revenue\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"direction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"desc\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"limit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` resp.status_code `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 200`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` body `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` resp.json()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` body[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"object\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"list\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(body[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` body[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`].startswith(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"prd_\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` body[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"metrics\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"revenue\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 50000`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Known fixture IDs are listed in the dashboard under `,_jsx(_components.strong,{children:`Settings → Sandbox`}),`, so you can write tests\nagainst a specific shop or product rather than whatever happens to rank first.`]}),`\n`,_jsx(Heading,{level:`2`,id:`exercising-the-paths-that-are-hard-to-reach-live`,children:`Exercising the paths that are hard to reach live`}),`\n`,_jsx(_components.p,{children:`The fixture set includes entities that deliberately trigger each edge case.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`To test`}),_jsx(_components.th,{children:`Use`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`not_found`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://www.tiktok.com/shop/unif-fixture-missing`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ambiguous`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://www.tiktok.com/shop/unif-fixture-ambiguous`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`partial`}),` enrichment`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`shp_00000000000000000000partial`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`job.failed`})}),_jsxs(_components.td,{children:[`A job with `,_jsx(_components.code,{children:`\"input\": { \"force_failure\": true }`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`429`})}),_jsx(_components.td,{children:`Exceed the rate limit; it is enforced normally`})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_handles_not_found`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`():`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` resp `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.post(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/v1/resolve\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`json`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"inputs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"shop\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://www.tiktok.com/shop/unif-fixture-missing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ref\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]})`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` result `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` resp.json()[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` result[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"not_found\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` assert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` result[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Point CI at the sandbox and keep live keys out of it entirely. A test suite that spends credits\nwill eventually spend a lot of them on a branch nobody merged.`})}),`\n`,_jsx(Heading,{level:`2`,id:`webhooks-in-the-sandbox`,children:`Webhooks in the sandbox`}),`\n`,_jsx(_components.p,{children:`Sandbox webhooks deliver real signed requests with their own secret, so your verification code is\nexercised properly. Register an endpoint with a test key and it fires on sandbox jobs and trackers\nonly — sandbox events never reach a live endpoint, and vice versa.`})]})}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":{"config":{},"pageMetadata":{"title":"Sandbox","description":"Building and testing without spending credits.","icon":"flask","href":"/docs/platform/sandbox"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What is the same","slug":"what-is-the-same","depth":2,"children":[]},{"title":"What is different","slug":"what-is-different","depth":2,"children":[]},{"title":"Deterministic fixtures","slug":"deterministic-fixtures","depth":2,"children":[]},{"title":"Exercising the paths that are hard to reach live","slug":"exercising-the-paths-that-are-hard-to-reach-live","depth":2,"children":[]},{"title":"Webhooks in the sandbox","slug":"webhooks-in-the-sandbox","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"unifdev","siteName":"Unif","title":"Sandbox - Unif","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-16T01:48:42.725Z","originalFileLocation":"docs/platform/sandbox.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=\"Building and testing without spending credits.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Unif\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_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/unifdev/GKhCeLBOivsxdW2C/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Sandbox - Unif\">\u003cmeta data-mint-head property=\"og:description\" content=\"Building and testing without spending credits.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Unif\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://unif.dev/docs/platform/sandbox\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://unifdev.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=Sandbox\u0026amp;description=Building+and+testing+without+spending+credits.\u0026amp;theme=04dba3584e03642731bf176a\u0026amp;signature=878c02b5ea7caf5ef5177f62bac6935eca55c5eba9297dea978e880dcc772eb6\">\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=\"Sandbox - Unif\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Building and testing without spending credits.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://unifdev.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=Sandbox\u0026amp;description=Building+and+testing+without+spending+credits.\u0026amp;theme=04dba3584e03642731bf176a\u0026amp;signature=878c02b5ea7caf5ef5177f62bac6935eca55c5eba9297dea978e880dcc772eb6\">\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/unifdev/GKhCeLBOivsxdW2C/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Unif\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15803D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://unif.dev/docs/platform/sandbox\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/platform/sandbox.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://unif.dev/#organization\",\"name\":\"Unif\",\"url\":\"https://unif.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/unifdev/t6BPluVf4xKZ3_nf/logo/light.svg?fit=max\u0026auto=format\u0026n=t6BPluVf4xKZ3_nf\u0026q=85\u0026s=b9b4ff2d35ee8ff9cb9ccef766d4b839\"}},{\"@type\":\"WebSite\",\"@id\":\"https://unif.dev#website\",\"name\":\"Unif\",\"url\":\"https://unif.dev\",\"publisher\":{\"@id\":\"https://unif.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://unif.dev/docs/platform/sandbox#webpage\",\"url\":\"https://unif.dev/docs/platform/sandbox\",\"name\":\"Sandbox\",\"description\":\"Building and testing without spending credits.\",\"dateModified\":\"2026-09-16T01:48:42.725Z\",\"isPartOf\":{\"@id\":\"https://unif.dev#website\"},\"breadcrumb\":{\"@id\":\"https://unif.dev/docs/platform/sandbox#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://unif.dev/docs/platform/sandbox#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Platform\",\"item\":\"https://unif.dev/docs/platform/errors\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sandbox\",\"item\":\"https://unif.dev/docs/platform/sandbox\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://unif.dev/docs/platform/sandbox#article\",\"headline\":\"Sandbox\",\"name\":\"Sandbox\",\"description\":\"Building and testing without spending credits.\",\"url\":\"https://unif.dev/docs/platform/sandbox\",\"mainEntityOfPage\":{\"@id\":\"https://unif.dev/docs/platform/sandbox#webpage\"},\"dateModified\":\"2026-09-16T01:48:42.725Z\",\"publisher\":{\"@id\":\"https://unif.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://unif.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Unif\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Unif","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Documentation","icon":"book-open","groups":[{"group":"Getting started","pages":[{"title":"Introduction","icon":"book-open","href":"/docs/introduction"},{"title":"Quickstart","icon":"rocket","href":"/docs/quickstart"},{"title":"Authentication","icon":"key","href":"/docs/authentication"}]},{"group":"Core concepts","pages":[{"title":"The waterfall","icon":"layer-group","href":"/docs/concepts/waterfall"},{"title":"The unified model","icon":"diagram-project","href":"/docs/concepts/unified-model"},{"title":"Entities","icon":"cubes","href":"/docs/concepts/entities"},{"title":"Identifiers","icon":"fingerprint","href":"/docs/concepts/identifiers"},{"title":"Channels and markets","icon":"globe","href":"/docs/concepts/channels"},{"title":"Periods and currency","icon":"calendar","href":"/docs/concepts/periods"},{"title":"Metrics reference","icon":"chart-line","href":"/docs/concepts/metrics"},{"title":"Coverage and freshness","icon":"eye","href":"/docs/concepts/coverage"}]},{"group":"Workflows","pages":[{"title":"Search","icon":"magnifying-glass","href":"/docs/workflows/search"},{"title":"Enrichment","icon":"wand-magic-sparkles","href":"/docs/workflows/enrich"},{"title":"Lists","icon":"bookmark","href":"/docs/workflows/lists"},{"title":"Trackers","icon":"bell","href":"/docs/workflows/trackers"},{"title":"Jobs and exports","icon":"layer-group","href":"/docs/workflows/jobs"},{"title":"Webhooks","icon":"webhook","href":"/docs/workflows/webhooks"}]},{"group":"Guides","pages":[{"title":"Find products before they peak","icon":"arrow-trend-up","href":"/docs/guides/winning-products"},{"title":"Track a competitor set","icon":"binoculars","href":"/docs/guides/competitor-shops"},{"title":"Build a creator shortlist","icon":"users","href":"/docs/guides/creator-shortlist"},{"title":"Size and monitor a category","icon":"chart-pie","href":"/docs/guides/category-monitor"},{"title":"Sync Unif into your warehouse","icon":"database","href":"/docs/guides/warehouse-sync"}]},{"group":"Platform","pages":[{"title":"Errors","icon":"triangle-exclamation","href":"/docs/platform/errors"},{"title":"Rate limits","icon":"gauge-high","href":"/docs/platform/rate-limits"},{"title":"Pagination","icon":"list-ol","href":"/docs/platform/pagination"},{"title":"Idempotency","icon":"rotate","href":"/docs/platform/idempotency"},{"title":"Credits and usage","description":"What a call costs, and how to spend less.","icon":"coins","href":"/docs/platform/credits"},{"title":"Sandbox","icon":"flask","href":"/docs/platform/sandbox"},{"title":"Versioning","description":"What can change without warning, and what cannot.","icon":"code-branch","href":"/docs/platform/versioning"}]},{"group":"Release notes","pages":[{"title":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]}]},{"tab":"API reference","icon":"code","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Sandbox - Unif","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}