Get the current credit balance of the account that pays for this credential’s usage.
A Voyager sign-in in a workspace billed on Voyager reads the workspace’s Voyager credits and
plan (billing_product: "voyager"), its auto-reload (auto_reload) and its agent chat gate
(chat);
every other credential reads Moda’s. upgrade_url is where that payer manages billing.
A balance that cannot be read answers 200 with plan: "unknown" and the payer’s
billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer
itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a
retryable 503 billing_unavailable: a Stripe blip is never read as “billed by Moda”.
model_access is the workspace’s access to each media model that needs approval, by access key, on
every answer.
Calendar-dated API version pin. New integrations should pin 2026-05-01 to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: 2026-04-12); that default advances on each sunset date. Any unsupported value returns 400 unsupported_version.
Current billing plan identifier (e.g. 'free', 'paid', 'ultra', 'enterprise'). Returns 'unlimited' when billing is not enabled. For a Voyager-billed workspace (billing_product 'voyager'), 'free', 'starter', 'creator', 'ultra' or 'gigamax', or null when it has no Voyager plan; its credits are Voyager credits (1 credit = 1 cent of provider cost).
The least a provider-proxy generation holds before it runs, in this payer's credits: 1 for a Voyager-billed workspace, whose every hold is the job's expected cost (its request-sized price, else its model's fallback rate: estimate_basisfallback on a credit check), and Moda's floor (300) otherwise (an unpriced Moda video holds 750, capped at five times its dearest settled charge when it has one to four).
Credits this payer is charged per dollar of provider cost, as settlement converts it: 100 for a Voyager-billed workspace, and for Moda the plan's rate (100 for a paid plan in the credit-discount experiment whose subscription started paying before the discount's cutoff, 300 otherwise). Null when the payer or plan could not be read.
Estimated user USD per credit for billing_product/billing_org_id, distinct from provider accounting credits_per_usd. While plan/bonus credits remain, selected per-seat list price divided by monthly included credits (annual price / 12 first); otherwise pack price $0.011. Discounts, coupons and comps are not applied. Voyager Free uses $0.01 by convention; Moda uses its configured purchase rate. Null when unavailable: consumers must not infer zero cost or bypass spend confirmation. Advisory base rate, not a blended quote across grant boundaries.
Maximum configured Individual/Team monthly and annual-per-month credit purchase rate, including packs. Present only with configured_tariff proof and an unavailable actual rate. An upper estimate, never the actual rate or a commercial ceiling; actual effective_dollars_per_credit remains authoritative when known.
True only when this payer's selected immutable plan price ID, USD amount, currency and interval match the canonical purchasable catalogue. When the actual effective rate is unavailable, this proof permits a catalogue-derived maximum estimate. False or absent is no proof; plan names, offline state and missing rates cannot establish it. A known effective rate remains authoritative.
Voyager-billed only (null otherwise, or when unreadable): the workspace's plan is a comped internal one (100% off, overage and chat included), as on the dashboard's billing status, and the caller holds a seat on it: false for a member without one (refused no_voyager_seat; chat.seated is false).
Voyager-billed only (null otherwise). Voyager credits are prepaid, with no overage: false for every paying workspace. True only for a comped internal plan, which may run its internal allowance below zero. Kept for older desktop builds.
Voyager-billed only: 0 for every paying workspace (prepaid, no overage); a comped internal plan's remaining internal allowance. Null for a Moda-billed workspace or when unreadable.
Voyager-billed only (null otherwise, or when unreadable): the workspace's auto-reload, so a client can word an out-of-credits refusal: reloading (a charge in flight now), paused (and paused_reason), cap_reached, or off.
Voyager-billed only (omitted otherwise): agent chat's persistent gates, as chat admission would decide them now (read-only: nothing is reserved). Null as well when they could not be read.
Voyager-billed only (null otherwise): 'active' when the workspace has a Voyager plan, 'none' when Stripe answered that it has none, 'unavailable' when the plan could not be read right now (never reported as no plan). With 'unavailable', plan is 'unknown' and the plan-derived fields are null; credits_remaining is still the balance when the credit ledger keeps it.
Voyager-billed with no plan only (null otherwise, or when unreadable): true when this workspace would be refused the Free plan now because its creator (or this person) already has Free in another workspace, so a client says it has no plan instead of 'setting up your free plan'; false otherwise.
Voyager-billed with no plan only (null otherwise, with the Free plan off, or when unreadable): whether the Free plan is still coming. 'refused' when it will not: the case free_plan_refused names, or a recorded denial or revocation that is not due for a recheck (it was decided, or re-judged and denied again, within the hour); a client says the workspace has no plan. 'pending' when it may: undecided, or a recheck is due.
The workspace's access to each gated media model, by access key (wan-spicy: every Wan Spicy model): 'granted', 'requested' (waiting for review), 'denied', or 'none' (never asked, or revoked). A grant counts only on a plan that reaches the model (Creator and up), so a client combines it with plan. Ask with POST /v1/model-access/{access_key}/request. Null when it could not be read.
Voyager-billed only (null otherwise, with no plan, or when unreadable): the workspace's Voyager plan is in its trial, so a client can say so before the first paid generation.
Voyager-billed only: the plan's spend limits (monthly for every plan; window, the Free plan's rolling 5 hours, null on a paid plan). Null with no plan, for a Moda-billed workspace, or when unreadable.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Moda","description":"Guides, API reference, and MCP server docs for Moda — the AI design tool for social posts, slide decks, and visual content.","colors":{"primary":"#850AC2","light":"#C155F6","dark":"#420561"},"logo":{"light":"https://mintcdn.com/moda-997c0526/_eKavTfp2ZbkSuMz/images/chameleon.svg?fit=max\u0026auto=format\u0026n=_eKavTfp2ZbkSuMz\u0026q=85\u0026s=d0de9a6ddda2829d62cfe525fbb38722","dark":"https://mintcdn.com/moda-997c0526/_eKavTfp2ZbkSuMz/images/chameleon.svg?fit=max\u0026auto=format\u0026n=_eKavTfp2ZbkSuMz\u0026q=85\u0026s=d0de9a6ddda2829d62cfe525fbb38722","href":"https://moda.app"},"favicon":"https://mintcdn.com/moda-997c0526/_eKavTfp2ZbkSuMz/images/chameleon.svg?fit=max\u0026auto=format\u0026n=_eKavTfp2ZbkSuMz\u0026q=85\u0026s=d0de9a6ddda2829d62cfe525fbb38722","appearance":{"default":"light"},"footer":{"socials":{"x":"https://x.com/trymoda","linkedin":"https://www.linkedin.com/company/trymoda","instagram":"https://www.instagram.com/modacanvas"}},"search":{"prompt":"Search Moda docs"},"seo":{"indexing":"all"},"fonts":{"family":"Inter","weight":400},"integrations":{"posthog":{"apiKey":"phc_5H829H6PUnXGRYUhogPS4rBboCirSiz0SqaEvB5OUco","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Moda app","icon":"arrow-up-right-from-square","href":"https://moda.app"},{"anchor":"Support","icon":"life-ring","href":"mailto:support@moda.app"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"moda-997c0526","hasAudioNarration":false,"actualSubdomain":"moda-997c0526","customDomains":["docs.moda.app"],"gitSource":{"type":"github","owner":"nullframe","repo":"studio","deployBranch":"main","contentDirectory":"mintlify","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6000d2cb39c06ba022de9","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"API Reference","count":183},{"language":"default","tag":"Help Center","count":28},{"language":"default","tag":"canvas-actions","count":28},{"language":"default","tag":"cloud-computers","count":24},{"language":"default","tag":"media","count":22},{"language":"default","tag":"websites","count":12},{"language":"default","tag":"MCP Server (Legacy)","count":11},{"language":"default","tag":"canvases","count":11},{"language":"default","tag":"drive","count":10},{"language":"default","tag":"voices","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/credits/get-credits","slug":"/api-reference/credits/get-credits","pageMetadata":{"title":"Get Credits","description":"Get the current credit balance of the account that pays for this credential's usage.\n\nA Voyager sign-in in a workspace billed on Voyager reads the workspace's Voyager credits and\nplan (``billing_product: \"voyager\"``), its auto-reload (``auto_reload``) and its agent chat gate\n(``chat``);\nevery other credential reads Moda's. ``upgrade_url`` is where that payer manages billing.\n\nA balance that cannot be read answers 200 with ``plan: \"unknown\"`` and the payer's\n``billing_product`` (unchanged for Moda clients, which always bill Moda). Only when the payer\nitself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a\nretryable 503 ``billing_unavailable``: a Stripe blip is never read as \"billed by Moda\".\n\n``model_access`` is the workspace's access to each media model that needs approval, by access key, on\nevery answer.","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /credits","href":"/api-reference/credits/get-credits","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Get the current credit balance of the account that pays for this credential’s usage.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A Voyager sign-in in a workspace billed on Voyager reads the workspace’s Voyager credits and\\nplan (\", _jsx(_components.code, {\n children: \"billing_product: \\\"voyager\\\"\"\n }), \"), its auto-reload (\", _jsx(_components.code, {\n children: \"auto_reload\"\n }), \") and its agent chat gate\\n(\", _jsx(_components.code, {\n children: \"chat\"\n }), \");\\nevery other credential reads Moda’s. \", _jsx(_components.code, {\n children: \"upgrade_url\"\n }), \" is where that payer manages billing.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A balance that cannot be read answers 200 with \", _jsx(_components.code, {\n children: \"plan: \\\"unknown\\\"\"\n }), \" and the payer’s\\n\", _jsx(_components.code, {\n children: \"billing_product\"\n }), \" (unchanged for Moda clients, which always bill Moda). Only when the payer\\nitself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a\\nretryable 503 \", _jsx(_components.code, {\n children: \"billing_unavailable\"\n }), \": a Stripe blip is never read as “billed by Moda”.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"model_access\"\n }), \" is the workspace’s access to each media model that needs approval, by access key, on\\nevery answer.\"]\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get Credits","description":"Get the current credit balance of the account that pays for this credential's usage.\n\nA Voyager sign-in in a workspace billed on Voyager reads the workspace's Voyager credits and\nplan (``billing_product: \"voyager\"``), its auto-reload (``auto_reload``) and its agent chat gate\n(``chat``);\nevery other credential reads Moda's. ``upgrade_url`` is where that payer manages billing.\n\nA balance that cannot be read answers 200 with ``plan: \"unknown\"`` and the payer's\n``billing_product`` (unchanged for Moda clients, which always bill Moda). Only when the payer\nitself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a\nretryable 503 ``billing_unavailable``: a Stripe blip is never read as \"billed by Moda\".\n\n``model_access`` is the workspace's access to each media model that needs approval, by access key, on\nevery answer.","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /credits","href":"/api-reference/credits/get-credits","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["credits"],"summary":"Get Credits","description":"Get the current credit balance of the account that pays for this credential's usage.\n\nA Voyager sign-in in a workspace billed on Voyager reads the workspace's Voyager credits and\nplan (``billing_product: \"voyager\"``), its auto-reload (``auto_reload``) and its agent chat gate\n(``chat``);\nevery other credential reads Moda's. ``upgrade_url`` is where that payer manages billing.\n\nA balance that cannot be read answers 200 with ``plan: \"unknown\"`` and the payer's\n``billing_product`` (unchanged for Moda clients, which always bill Moda). Only when the payer\nitself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a\nretryable 503 ``billing_unavailable``: a Stripe blip is never read as \"billed by Moda\".\n\n``model_access`` is the workspace's access to each media model that needs approval, by access key, on\nevery answer.","operationId":"getCredits","responses":{"200":"b11a8d60-a535-4689-92b3-28f9ccae5f48","401":"edb27066-2f8e-4cab-9ca1-4e173852a537","402":"df60145b-3bcc-422b-b64a-e3d6d2141de8","403":"99c627fe-57be-46b9-8140-c827afaabd9d","404":"a1c49d42-5a60-401e-8edf-c19002674942","409":"76af89de-ba35-4325-910b-a6f955fae438","422":"d74359bf-5d15-4bd0-9be1-194d5642100b","429":"d80677f7-90e1-4664-97b9-0d5b705f922b","500":"41c0a09a-c98d-42ad-9f48-33fedeba6685"},"security":["0d8d0d6b-2ab8-4a45-a155-8a8823eae46b"],"parameters":["889e7e3d-7e8f-4596-8f19-fb070f7cbceb"],"method":"get","type":"path","servers":["900bd1dd-1657-41cc-9e95-57b7af147e04"],"path":"/credits","baseUrlOptions":["https://api.moda.app/v1"],"title":"Get Credits","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"889e7e3d-7e8f-4596-8f19-fb070f7cbceb":{"name":"Moda-Version","in":"header","required":false,"description":"Calendar-dated API version pin. New integrations should pin `2026-05-01` to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: `2026-04-12`); that default advances on each [sunset date](/api-reference/versioning). Any unsupported value returns 400 `unsupported_version`.","example":"2026-05-01","schema":{"type":"string","enum":["2026-04-12","2026-05-01"],"default":"2026-05-01","example":"2026-05-01","isRequired":false,"description":"Calendar-dated API version pin. New integrations should pin `2026-05-01` to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: `2026-04-12`); that default advances on each [sunset date](/api-reference/versioning). Any unsupported value returns 400 `unsupported_version`.","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"b11a8d60-a535-4689-92b3-28f9ccae5f48":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"plan":{"oneOf":[{"type":"string","title":"Plan","description":"Current billing plan identifier (e.g. 'free', 'paid', 'ultra', 'enterprise'). Returns 'unlimited' when billing is not enabled. For a Voyager-billed workspace (billing_product 'voyager'), 'free', 'starter', 'creator', 'ultra' or 'gigamax', or null when it has no Voyager plan; its credits are Voyager credits (1 credit = 1 cent of provider cost).","isRequired":true,"uniqueKey":"plan.oneOf.0","typeLabel":"string"},{"type":"null","title":"Plan","description":"Current billing plan identifier (e.g. 'free', 'paid', 'ultra', 'enterprise'). Returns 'unlimited' when billing is not enabled. For a Voyager-billed workspace (billing_product 'voyager'), 'free', 'starter', 'creator', 'ultra' or 'gigamax', or null when it has no Voyager plan; its credits are Voyager credits (1 credit = 1 cent of provider cost).","isRequired":true,"uniqueKey":"plan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan","typeLabel":"string | null"},"credits_remaining":{"oneOf":[{"type":"integer","title":"Credits Remaining","description":"Current credit balance. Null if the billing service is unavailable or billing is not enabled for this account.","uniqueKey":"credits_remaining.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Credits Remaining","description":"Current credit balance. Null if the billing service is unavailable or billing is not enabled for this account.","uniqueKey":"credits_remaining.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_remaining","typeLabel":"integer | null"},"credits_limit":{"oneOf":[{"type":"integer","title":"Credits Limit","description":"Total credit allowance for the current billing period. Null if billing is not enabled.","uniqueKey":"credits_limit.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Credits Limit","description":"Total credit allowance for the current billing period. Null if billing is not enabled.","uniqueKey":"credits_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_limit","typeLabel":"integer | null"},"credits_reset_date":{"oneOf":[{"type":"string","title":"Credits Reset Date","description":"ISO 8601 date when credits reset for the current billing period. Null if billing is not enabled or reset date is unavailable.","uniqueKey":"credits_reset_date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Credits Reset Date","description":"ISO 8601 date when credits reset for the current billing period. Null if billing is not enabled or reset date is unavailable.","uniqueKey":"credits_reset_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_reset_date","typeLabel":"string | null"},"billing_product":{"oneOf":[{"type":"string","title":"Billing Product","description":"Whose credits these are: 'voyager' when this credential bills the workspace's Voyager account, otherwise 'moda'. Remedies (upgrade_url) follow it.","enum":["moda","voyager"],"uniqueKey":"billing_product.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Billing Product","description":"Whose credits these are: 'voyager' when this credential bills the workspace's Voyager account, otherwise 'moda'. Remedies (upgrade_url) follow it.","uniqueKey":"billing_product.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_product","typeLabel":"enum\u003cstring> | null"},"billing_org_id":{"oneOf":[{"type":"string","title":"Billing Org Id","description":"The organization that pays.","uniqueKey":"billing_org_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Billing Org Id","description":"The organization that pays.","uniqueKey":"billing_org_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_org_id","typeLabel":"string | null"},"upgrade_url":{"oneOf":[{"type":"string","title":"Upgrade Url","description":"Where the payer manages billing.","uniqueKey":"upgrade_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Upgrade Url","description":"Where the payer manages billing.","uniqueKey":"upgrade_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"upgrade_url","typeLabel":"string | null"},"min_hold_credits":{"oneOf":[{"type":"integer","title":"Min Hold Credits","description":"The least a provider-proxy generation holds before it runs, in this payer's credits: 1 for a Voyager-billed workspace, whose every hold is the job's expected cost (its request-sized price, else its model's fallback rate: ``estimate_basis`` ``fallback`` on a credit check), and Moda's floor (300) otherwise (an unpriced Moda video holds 750, capped at five times its dearest settled charge when it has one to four).","uniqueKey":"min_hold_credits.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Min Hold Credits","description":"The least a provider-proxy generation holds before it runs, in this payer's credits: 1 for a Voyager-billed workspace, whose every hold is the job's expected cost (its request-sized price, else its model's fallback rate: ``estimate_basis`` ``fallback`` on a credit check), and Moda's floor (300) otherwise (an unpriced Moda video holds 750, capped at five times its dearest settled charge when it has one to four).","uniqueKey":"min_hold_credits.oneOf.1","typeLabel":"null"}],"uniqueKey":"min_hold_credits","typeLabel":"integer | null"},"credits_per_usd":{"oneOf":[{"type":"integer","title":"Credits Per Usd","description":"Credits this payer is charged per dollar of provider cost, as settlement converts it: 100 for a Voyager-billed workspace, and for Moda the plan's rate (100 for a paid plan in the credit-discount experiment whose subscription started paying before the discount's cutoff, 300 otherwise). Null when the payer or plan could not be read.","uniqueKey":"credits_per_usd.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Credits Per Usd","description":"Credits this payer is charged per dollar of provider cost, as settlement converts it: 100 for a Voyager-billed workspace, and for Moda the plan's rate (100 for a paid plan in the credit-discount experiment whose subscription started paying before the discount's cutoff, 300 otherwise). Null when the payer or plan could not be read.","uniqueKey":"credits_per_usd.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_per_usd","typeLabel":"integer | null"},"effective_dollars_per_credit":{"oneOf":[{"type":"number","title":"Effective Dollars Per Credit","description":"Estimated user USD per credit for billing_product/billing_org_id, distinct from provider accounting credits_per_usd. While plan/bonus credits remain, selected per-seat list price divided by monthly included credits (annual price / 12 first); otherwise pack price $0.011. Discounts, coupons and comps are not applied. Voyager Free uses $0.01 by convention; Moda uses its configured purchase rate. Null when unavailable: consumers must not infer zero cost or bypass spend confirmation. Advisory base rate, not a blended quote across grant boundaries.","minimum":0,"exclusiveMinimum":true,"uniqueKey":"effective_dollars_per_credit.oneOf.0","typeLabel":"number"},{"type":"null","title":"Effective Dollars Per Credit","description":"Estimated user USD per credit for billing_product/billing_org_id, distinct from provider accounting credits_per_usd. While plan/bonus credits remain, selected per-seat list price divided by monthly included credits (annual price / 12 first); otherwise pack price $0.011. Discounts, coupons and comps are not applied. Voyager Free uses $0.01 by convention; Moda uses its configured purchase rate. Null when unavailable: consumers must not infer zero cost or bypass spend confirmation. Advisory base rate, not a blended quote across grant boundaries.","uniqueKey":"effective_dollars_per_credit.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_dollars_per_credit","typeLabel":"number | null"},"effective_dollars_per_credit_source":{"type":"string","enum":["plan","pack","free","moda","unknown"],"title":"Effective Dollars Per Credit Source","description":"Source of the effective user purchase rate; unknown when unavailable.","default":"unknown","uniqueKey":"effective_dollars_per_credit_source","typeLabel":"enum\u003cstring>"},"effective_dollars_per_credit_upper_bound":{"oneOf":[{"type":"number","title":"Effective Dollars Per Credit Upper Bound","description":"Maximum configured Individual/Team monthly and annual-per-month credit purchase rate, including packs. Present only with configured_tariff proof and an unavailable actual rate. An upper estimate, never the actual rate or a commercial ceiling; actual effective_dollars_per_credit remains authoritative when known.","minimum":0,"exclusiveMinimum":true,"uniqueKey":"effective_dollars_per_credit_upper_bound.oneOf.0","typeLabel":"number"},{"type":"null","title":"Effective Dollars Per Credit Upper Bound","description":"Maximum configured Individual/Team monthly and annual-per-month credit purchase rate, including packs. Present only with configured_tariff proof and an unavailable actual rate. An upper estimate, never the actual rate or a commercial ceiling; actual effective_dollars_per_credit remains authoritative when known.","uniqueKey":"effective_dollars_per_credit_upper_bound.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_dollars_per_credit_upper_bound","typeLabel":"number | null"},"effective_dollars_per_credit_upper_bound_source":{"oneOf":[{"type":"string","title":"Effective Dollars Per Credit Upper Bound Source","description":"Provenance of the validated upper estimate; null without configured tariff proof.","const":"voyager_catalog_max","uniqueKey":"effective_dollars_per_credit_upper_bound_source.oneOf.0","typeLabel":"string"},{"type":"null","title":"Effective Dollars Per Credit Upper Bound Source","description":"Provenance of the validated upper estimate; null without configured tariff proof.","uniqueKey":"effective_dollars_per_credit_upper_bound_source.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_dollars_per_credit_upper_bound_source","typeLabel":"string | null"},"configured_tariff":{"type":"boolean","title":"Configured Tariff","description":"True only when this payer's selected immutable plan price ID, USD amount, currency and interval match the canonical purchasable catalogue. When the actual effective rate is unavailable, this proof permits a catalogue-derived maximum estimate. False or absent is no proof; plan names, offline state and missing rates cannot establish it. A known effective rate remains authoritative.","default":false,"uniqueKey":"configured_tariff","typeLabel":"boolean"},"internal":{"oneOf":[{"type":"boolean","title":"Internal","description":"Voyager-billed only (null otherwise, or when unreadable): the workspace's plan is a comped internal one (100% off, overage and chat included), as on the dashboard's billing status, and the caller holds a seat on it: false for a member without one (refused no_voyager_seat; chat.seated is false).","uniqueKey":"internal.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Internal","description":"Voyager-billed only (null otherwise, or when unreadable): the workspace's plan is a comped internal one (100% off, overage and chat included), as on the dashboard's billing status, and the caller holds a seat on it: false for a member without one (refused no_voyager_seat; chat.seated is false).","uniqueKey":"internal.oneOf.1","typeLabel":"null"}],"uniqueKey":"internal","typeLabel":"boolean | null"},"overage_enabled":{"oneOf":[{"type":"boolean","title":"Overage Enabled","description":"Voyager-billed only (null otherwise). Voyager credits are prepaid, with no overage: false for every paying workspace. True only for a comped internal plan, which may run its internal allowance below zero. Kept for older desktop builds.","uniqueKey":"overage_enabled.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Overage Enabled","description":"Voyager-billed only (null otherwise). Voyager credits are prepaid, with no overage: false for every paying workspace. True only for a comped internal plan, which may run its internal allowance below zero. Kept for older desktop builds.","uniqueKey":"overage_enabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"overage_enabled","typeLabel":"boolean | null"},"overage_remaining_credits":{"oneOf":[{"type":"integer","title":"Overage Remaining Credits","description":"Voyager-billed only: 0 for every paying workspace (prepaid, no overage); a comped internal plan's remaining internal allowance. Null for a Moda-billed workspace or when unreadable.","uniqueKey":"overage_remaining_credits.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Overage Remaining Credits","description":"Voyager-billed only: 0 for every paying workspace (prepaid, no overage); a comped internal plan's remaining internal allowance. Null for a Moda-billed workspace or when unreadable.","uniqueKey":"overage_remaining_credits.oneOf.1","typeLabel":"null"}],"uniqueKey":"overage_remaining_credits","typeLabel":"integer | null"},"auto_reload":{"oneOf":[{"type":"object","title":"CreditAutoReloadState","description":"Voyager-billed only (null otherwise, or when unreadable): the workspace's auto-reload, so a client can word an out-of-credits refusal: ``reloading`` (a charge in flight now), ``paused`` (and ``paused_reason``), ``cap_reached``, or off.","required":["enabled","paused","cap_reached","threshold_credits"],"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"An admin turned auto-reload on (the stored setting).","isRequired":true,"uniqueKey":"auto_reload.oneOf.0.enabled","typeLabel":"boolean"},"paused":{"type":"boolean","title":"Paused","description":"A reload charge was declined or needs authentication; an admin re-enables it.","isRequired":true,"uniqueKey":"auto_reload.oneOf.0.paused","typeLabel":"boolean"},"cap_reached":{"type":"boolean","title":"Cap Reached","description":"The next pack would pass the monthly cap: no reload until next month.","isRequired":true,"uniqueKey":"auto_reload.oneOf.0.cap_reached","typeLabel":"boolean"},"threshold_credits":{"type":"integer","title":"Threshold Credits","description":"A reload starts when the available credits fall below this.","isRequired":true,"uniqueKey":"auto_reload.oneOf.0.threshold_credits","typeLabel":"integer"},"armed":{"type":"boolean","title":"Armed","description":"Auto-reload will actually buy: on, not paused, under its monthly cap, on a paid plan (not a trial, not a comp) and not switched off by Voyager. Read this, not ``enabled``.","default":false,"uniqueKey":"auto_reload.oneOf.0.armed","typeLabel":"boolean"},"paused_reason":{"oneOf":[{"type":"string","title":"Paused Reason","description":"card_declined | requires_action | no_payment_method | payment_canceled | dispute | inquiry, or null. ``inquiry``: the card's bank asked about a payment; the pause lifts by itself if the bank closes the question. ``dispute``: a chargeback; an operator lifts it.","uniqueKey":"auto_reload.oneOf.0.paused_reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Paused Reason","description":"card_declined | requires_action | no_payment_method | payment_canceled | dispute | inquiry, or null. ``inquiry``: the card's bank asked about a payment; the pause lifts by itself if the bank closes the question. ``dispute``: a chargeback; an operator lifts it.","uniqueKey":"auto_reload.oneOf.0.paused_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_reload.oneOf.0.paused_reason","typeLabel":"string | null"},"cap_unlimited":{"type":"boolean","title":"Cap Unlimited","description":"An admin removed the monthly cap (never cap_reached).","default":false,"uniqueKey":"auto_reload.oneOf.0.cap_unlimited","typeLabel":"boolean"},"reloading":{"type":"boolean","title":"Reloading","description":"A reload's charge is in flight right now: credits are on their way.","default":false,"uniqueKey":"auto_reload.oneOf.0.reloading","typeLabel":"boolean"}},"uniqueKey":"auto_reload.oneOf.0","typeLabel":"CreditAutoReloadState · object"},{"type":"null","description":"Voyager-billed only (null otherwise, or when unreadable): the workspace's auto-reload, so a client can word an out-of-credits refusal: ``reloading`` (a charge in flight now), ``paused`` (and ``paused_reason``), ``cap_reached``, or off.","uniqueKey":"auto_reload.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_reload","typeLabel":"CreditAutoReloadState · object | null"},"chat":{"oneOf":[{"type":"object","title":"CreditChatState","description":"Voyager-billed only (omitted otherwise): agent chat's persistent gates, as chat admission would decide them now (read-only: nothing is reserved). Null as well when they could not be read.","required":["enabled","month_to_date_credits","past_due","seated"],"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"A workspace admin has not turned chat off.","isRequired":true,"uniqueKey":"chat.oneOf.0.enabled","typeLabel":"boolean"},"month_to_date_credits":{"type":"integer","title":"Month To Date Credits","description":"Credits chat used this calendar month (UTC), for display. Chat has no separate spending limit; the auto-reload monthly cap is the only one.","isRequired":true,"uniqueKey":"chat.oneOf.0.month_to_date_credits","typeLabel":"integer"},"past_due":{"type":"boolean","title":"Past Due","description":"The Voyager plan's last payment failed (chat keeps drawing credits, as media does).","isRequired":true,"uniqueKey":"chat.oneOf.0.past_due","typeLabel":"boolean"},"seated":{"type":"boolean","title":"Seated","description":"This user holds a seat on the workspace's Voyager plan (always true on Free, which has no seats).","isRequired":true,"uniqueKey":"chat.oneOf.0.seated","typeLabel":"boolean"},"refusal_code":{"oneOf":[{"type":"string","title":"Refusal Code","description":"The persistent gate chat admission would answer now (plan, seat on a paid plan, chat off), in admission's order, or null. Not predicted: the balance (insufficient_credits), a model locked to a higher plan (model_not_in_plan) and the in-flight limit (429 concurrency_limit).","enum":["paid_plan_required","no_voyager_seat","chat_not_enabled"],"uniqueKey":"chat.oneOf.0.refusal_code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Refusal Code","description":"The persistent gate chat admission would answer now (plan, seat on a paid plan, chat off), in admission's order, or null. Not predicted: the balance (insufficient_credits), a model locked to a higher plan (model_not_in_plan) and the in-flight limit (429 concurrency_limit).","uniqueKey":"chat.oneOf.0.refusal_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"chat.oneOf.0.refusal_code","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"chat.oneOf.0","typeLabel":"CreditChatState · object"},{"type":"null","description":"Voyager-billed only (omitted otherwise): agent chat's persistent gates, as chat admission would decide them now (read-only: nothing is reserved). Null as well when they could not be read.","uniqueKey":"chat.oneOf.1","typeLabel":"null"}],"uniqueKey":"chat","typeLabel":"CreditChatState · object | null"},"plan_status":{"oneOf":[{"type":"string","title":"Plan Status","description":"Voyager-billed only (null otherwise): 'active' when the workspace has a Voyager plan, 'none' when Stripe answered that it has none, 'unavailable' when the plan could not be read right now (never reported as no plan). With 'unavailable', plan is 'unknown' and the plan-derived fields are null; credits_remaining is still the balance when the credit ledger keeps it.","enum":["active","none","unavailable"],"uniqueKey":"plan_status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Plan Status","description":"Voyager-billed only (null otherwise): 'active' when the workspace has a Voyager plan, 'none' when Stripe answered that it has none, 'unavailable' when the plan could not be read right now (never reported as no plan). With 'unavailable', plan is 'unknown' and the plan-derived fields are null; credits_remaining is still the balance when the credit ledger keeps it.","uniqueKey":"plan_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"plan_status","typeLabel":"enum\u003cstring> | null"},"free_plan_refused":{"oneOf":[{"type":"boolean","title":"Free Plan Refused","description":"Voyager-billed with no plan only (null otherwise, or when unreadable): true when this workspace would be refused the Free plan now because its creator (or this person) already has Free in another workspace, so a client says it has no plan instead of 'setting up your free plan'; false otherwise.","uniqueKey":"free_plan_refused.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Free Plan Refused","description":"Voyager-billed with no plan only (null otherwise, or when unreadable): true when this workspace would be refused the Free plan now because its creator (or this person) already has Free in another workspace, so a client says it has no plan instead of 'setting up your free plan'; false otherwise.","uniqueKey":"free_plan_refused.oneOf.1","typeLabel":"null"}],"uniqueKey":"free_plan_refused","typeLabel":"boolean | null"},"free_plan":{"oneOf":[{"type":"string","title":"Free Plan","description":"Voyager-billed with no plan only (null otherwise, with the Free plan off, or when unreadable): whether the Free plan is still coming. 'refused' when it will not: the case free_plan_refused names, or a recorded denial or revocation that is not due for a recheck (it was decided, or re-judged and denied again, within the hour); a client says the workspace has no plan. 'pending' when it may: undecided, or a recheck is due.","enum":["pending","refused"],"uniqueKey":"free_plan.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Free Plan","description":"Voyager-billed with no plan only (null otherwise, with the Free plan off, or when unreadable): whether the Free plan is still coming. 'refused' when it will not: the case free_plan_refused names, or a recorded denial or revocation that is not due for a recheck (it was decided, or re-judged and denied again, within the hour); a client says the workspace has no plan. 'pending' when it may: undecided, or a recheck is due.","uniqueKey":"free_plan.oneOf.1","typeLabel":"null"}],"uniqueKey":"free_plan","typeLabel":"enum\u003cstring> | null"},"model_access":{"oneOf":[{"type":"object","title":"Model Access","description":"The workspace's access to each gated media model, by access key (``wan-spicy``: every Wan Spicy model): 'granted', 'requested' (waiting for review), 'denied', or 'none' (never asked, or revoked). A grant counts only on a plan that reaches the model (Creator and up), so a client combines it with plan. Ask with POST /v1/model-access/{access_key}/request. Null when it could not be read.","additionalProperties":{"type":"string","enum":["granted","requested","denied","none"],"uniqueKey":"model_access.oneOf.0.additionalProperties","typeLabel":"enum\u003cstring>"},"uniqueKey":"model_access.oneOf.0","typeLabel":"Model Access · object"},{"type":"null","title":"Model Access","description":"The workspace's access to each gated media model, by access key (``wan-spicy``: every Wan Spicy model): 'granted', 'requested' (waiting for review), 'denied', or 'none' (never asked, or revoked). A grant counts only on a plan that reaches the model (Creator and up), so a client combines it with plan. Ask with POST /v1/model-access/{access_key}/request. Null when it could not be read.","uniqueKey":"model_access.oneOf.1","typeLabel":"null"}],"uniqueKey":"model_access","typeLabel":"Model Access · object | null"},"trialing":{"oneOf":[{"type":"boolean","title":"Trialing","description":"Voyager-billed only (null otherwise, with no plan, or when unreadable): the workspace's Voyager plan is in its trial, so a client can say so before the first paid generation.","uniqueKey":"trialing.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Trialing","description":"Voyager-billed only (null otherwise, with no plan, or when unreadable): the workspace's Voyager plan is in its trial, so a client can say so before the first paid generation.","uniqueKey":"trialing.oneOf.1","typeLabel":"null"}],"uniqueKey":"trialing","typeLabel":"boolean | null"},"trial_ends_at":{"oneOf":[{"type":"string","title":"Trial Ends At","description":"ISO 8601 end of the Voyager plan's trial while ``trialing``; null otherwise.","uniqueKey":"trial_ends_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Trial Ends At","description":"ISO 8601 end of the Voyager plan's trial while ``trialing``; null otherwise.","uniqueKey":"trial_ends_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"trial_ends_at","typeLabel":"string | null"},"limits":{"oneOf":[{"type":"object","title":"CreditLimits","description":"Voyager-billed only: the plan's spend limits (``monthly`` for every plan; ``window``, the Free plan's rolling 5 hours, null on a paid plan). Null with no plan, for a Moda-billed workspace, or when unreadable.","required":["monthly","window"],"properties":{"monthly":{"properties":{"limit_credits":{"oneOf":[{"type":"integer","title":"Limit Credits","description":"The plan's monthly credits: per seat times the seats on a paid plan, 1,000 for the workspace on Free. Packs and bonuses are not part of it. Null for a plan the server does not know.","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.limit_credits.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Limit Credits","description":"The plan's monthly credits: per seat times the seats on a paid plan, 1,000 for the workspace on Free. Packs and bonuses are not part of it. Null for a plan the server does not know.","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.limit_credits.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.limit_credits","typeLabel":"integer | null"},"used_credits":{"oneOf":[{"type":"integer","title":"Used Credits","description":"Voyager credits used since the credit period started (null when the period could not be read).","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.used_credits.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Used Credits","description":"Voyager credits used since the credit period started (null when the period could not be read).","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.used_credits.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.used_credits","typeLabel":"integer | null"},"resets_at":{"oneOf":[{"type":"string","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the next monthly grant lands (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.resets_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the next monthly grant lands (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.resets_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.monthly.resets_at","typeLabel":"string | null"}},"type":"object","required":["limit_credits","used_credits","resets_at"],"title":"CreditMonthlyLimit","description":"The plan's monthly credits; present for every plan.","isRequired":true,"uniqueKey":"limits.oneOf.0.monthly","typeLabel":"CreditMonthlyLimit · object"},"window":{"oneOf":[{"type":"object","title":"CreditWindowLimit","description":"The Free plan's 5-hour window; null on a paid plan, which has no window.","required":["limit_credits","used_credits","window_hours","resets_at"],"properties":{"limit_credits":{"type":"integer","title":"Limit Credits","description":"Credits the window allows (500).","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.limit_credits","typeLabel":"integer"},"used_credits":{"type":"integer","title":"Used Credits","description":"Credits billed inside the window plus the holds of work still in flight, as admission counts them.","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.used_credits","typeLabel":"integer"},"window_hours":{"type":"integer","title":"Window Hours","description":"The window's length in hours (5).","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.window_hours","typeLabel":"integer"},"resets_at":{"oneOf":[{"type":"string","title":"Resets At","description":"ISO 8601 moment the oldest spend in the window leaves it; null when nothing was billed in it.","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.resets_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Resets At","description":"ISO 8601 moment the oldest spend in the window leaves it; null when nothing was billed in it.","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.resets_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0.resets_at","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.0","typeLabel":"CreditWindowLimit · object"},{"type":"null","description":"The Free plan's 5-hour window; null on a paid plan, which has no window.","isRequired":true,"uniqueKey":"limits.oneOf.0.window.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.window","typeLabel":"CreditWindowLimit · object | null"},"media":{"oneOf":[{"type":"object","title":"CreditMediaLimits","description":"The Free plan's monthly images and voice generations; null on a paid plan, which counts none.","required":["image","voice"],"properties":{"image":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Generations the month allows (images: 25; voice: 3).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.limit","typeLabel":"integer"},"used":{"oneOf":[{"type":"integer","title":"Used","description":"What this period's work in flight and delivered work uses (failed or refused jobs give theirs back), as admission counts it; null when the period could not be read.","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.used.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Used","description":"What this period's work in flight and delivered work uses (failed or refused jobs give theirs back), as admission counts it; null when the period could not be read.","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.used.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.used","typeLabel":"integer | null"},"resets_at":{"oneOf":[{"type":"string","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the allowance renews (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.resets_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the allowance renews (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.resets_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image.resets_at","typeLabel":"string | null"}},"type":"object","required":["limit","used","resets_at"],"title":"CreditMediaLimit","description":"Images (an image request uses as many as it asks for).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.image","typeLabel":"CreditMediaLimit · object"},"voice":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Generations the month allows (images: 25; voice: 3).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.limit","typeLabel":"integer"},"used":{"oneOf":[{"type":"integer","title":"Used","description":"What this period's work in flight and delivered work uses (failed or refused jobs give theirs back), as admission counts it; null when the period could not be read.","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.used.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Used","description":"What this period's work in flight and delivered work uses (failed or refused jobs give theirs back), as admission counts it; null when the period could not be read.","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.used.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.used","typeLabel":"integer | null"},"resets_at":{"oneOf":[{"type":"string","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the allowance renews (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.resets_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Resets At","description":"ISO 8601 end of the Voyager credit period, when the allowance renews (null if unreadable).","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.resets_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice.resets_at","typeLabel":"string | null"}},"type":"object","required":["limit","used","resets_at"],"title":"CreditMediaLimit","description":"Text-to-speech generations.","isRequired":true,"uniqueKey":"limits.oneOf.0.media.oneOf.0.voice","typeLabel":"CreditMediaLimit · object"}},"uniqueKey":"limits.oneOf.0.media.oneOf.0","typeLabel":"CreditMediaLimits · object"},{"type":"null","description":"The Free plan's monthly images and voice generations; null on a paid plan, which counts none.","uniqueKey":"limits.oneOf.0.media.oneOf.1","typeLabel":"null"}],"uniqueKey":"limits.oneOf.0.media","typeLabel":"CreditMediaLimits · object | null"}},"uniqueKey":"limits.oneOf.0","typeLabel":"CreditLimits · object"},{"type":"null","description":"Voyager-billed only: the plan's spend limits (``monthly`` for every plan; ``window``, the Free plan's rolling 5 hours, null on a paid plan). Null with no plan, for a Moda-billed workspace, or when unreadable.","uniqueKey":"limits.oneOf.1","typeLabel":"null"}],"uniqueKey":"limits","typeLabel":"CreditLimits · object | null"}},"type":"object","required":["plan"],"title":"CreditBalanceResponse","uniqueKey":"","typeLabel":"CreditBalanceResponse · object"},"examples":{"Example":{"title":"Example","value":{"plan":"\u003cstring>","credits_remaining":123,"credits_limit":123,"credits_reset_date":"\u003cstring>","billing_product":"moda","billing_org_id":"\u003cstring>","upgrade_url":"\u003cstring>","min_hold_credits":123,"credits_per_usd":123,"effective_dollars_per_credit":1,"effective_dollars_per_credit_source":"unknown","effective_dollars_per_credit_upper_bound":1,"effective_dollars_per_credit_upper_bound_source":"voyager_catalog_max","configured_tariff":false,"internal":true,"overage_enabled":true,"overage_remaining_credits":123,"auto_reload":{"enabled":true,"paused":true,"cap_reached":true,"threshold_credits":123,"armed":false,"paused_reason":"\u003cstring>","cap_unlimited":false,"reloading":false},"chat":{"enabled":true,"month_to_date_credits":123,"past_due":true,"seated":true,"refusal_code":"paid_plan_required"},"plan_status":"active","free_plan_refused":true,"free_plan":"pending","model_access":{},"trialing":true,"trial_ends_at":"\u003cstring>","limits":{"monthly":{"limit_credits":123,"used_credits":123,"resets_at":"\u003cstring>"},"window":{"limit_credits":123,"used_credits":123,"window_hours":123,"resets_at":"\u003cstring>"},"media":{"image":{"limit":123,"used":123,"resets_at":"\u003cstring>"},"voice":{"limit":123,"used":123,"resets_at":"\u003cstring>"}}}}}},"exampleType":"generated"}},"exampleType":"generated"},"edb27066-2f8e-4cab-9ca1-4e173852a537":{"description":"Authentication required.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"df60145b-3bcc-422b-b64a-e3d6d2141de8":{"description":"Insufficient credits for a metered operation.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"99c627fe-57be-46b9-8140-c827afaabd9d":{"description":"Permission denied for this scope.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"a1c49d42-5a60-401e-8edf-c19002674942":{"description":"Resource not found.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"76af89de-ba35-4325-910b-a6f955fae438":{"description":"Conflict (idempotency / resource state).","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"d74359bf-5d15-4bd0-9be1-194d5642100b":{"description":"Request validation failed.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"d80677f7-90e1-4664-97b9-0d5b705f922b":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"},"41c0a09a-c98d-42ad-9f48-33fedeba6685":{"description":"Internal error.","content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","idempotency_conflict","unprocessable","upstream_error","internal_error"],"title":"ErrorType","description":"Closed set of high-level categories SDKs branch on.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","title":"Code","description":"Stable machine string keyed to doc_url. Never changes once published.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable message, for developers. Not localized, not user-facing.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"doc_url":{"type":"string","title":"Doc Url","description":"Permalink to the docs page for this code.","isRequired":true,"uniqueKey":"doc_url","typeLabel":"string"},"request_id":{"oneOf":[{"type":"string","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Request Id","description":"Correlator for logs/Sentry/audit.","uniqueKey":"request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_id","typeLabel":"string | null"},"causes":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"causes.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Causes","description":"Aggregated upstream failures (e.g. per-page export errors).","uniqueKey":"causes.oneOf.1","typeLabel":"null"}],"uniqueKey":"causes","typeLabel":"any[] | null"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Code-specific detail payload (e.g. validation field list). Callers should pass ``None`` rather than ``{}`` to omit the key from the response.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"},"retry_after_ms":{"oneOf":[{"type":"integer","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After Ms","description":"Hint for rate-limited or transient errors.","uniqueKey":"retry_after_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after_ms","typeLabel":"integer | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"Explicit retryability for this code, from the error-code registry: ``false`` means retrying the same request cannot succeed (fix the input / resource first); ``true`` means the condition is transient and a retry (with backoff / after the blocker clears) can succeed. For a code whose retryability is context-dependent (the registry declares none), the raising site sets it per response when it knows the cause (e.g. ``source_url_unreachable``: a timeout is retryable, a 404 is not) and omits it otherwise — do not derive it from ``type`` or the HTTP status when this field is present.","uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"}},"type":"object","required":["type","code","message","doc_url"],"title":"ErrorEnvelope","description":"Canonical error payload, nested under the top-level ``{\"error\": ...}`` key.","uniqueKey":"","typeLabel":"ErrorEnvelope · object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request","code":"\u003cstring>","message":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>","causes":["\u003cunknown>"],"details":{},"retry_after_ms":123,"retryable":true}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"0d8d0d6b-2ab8-4a45-a155-8a8823eae46b":{"API Key":{"type":"http","description":"API key from Settings > Developer > REST API","scheme":"bearer","scopes":[],"schemeName":"API Key"}}},"servers":{"900bd1dd-1657-41cc-9e95-57b7af147e04":{"url":"https://api.moda.app/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"API key from Settings > Developer > REST API","scheme":"bearer","scopes":[],"schemeName":"API Key"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key from Settings > Developer > REST API","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"API Key","name":"Authorization"}],"title":"API Key"}]},"originalFileLocation":"openapi/moda-public-api.yaml"},"subdomain":"moda-997c0526","siteName":"Moda","title":"Get Credits - Moda","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T18:06:14.995Z","originalFileLocation":"api-reference/credits/get-credits.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=\"light\"}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=\"Get the current credit balance of the account that pays for this credential\u0026#x27;s usage. A Voyager sign-in in a workspace billed on Voyager reads the workspace\u0026#x27;s Voyager credits and plan (billing_product: \u0026quot;voyager\u0026quot;), its auto-reload (auto_reload) and its agent chat gate (chat); every other credential reads Moda\u0026#x27;s. upgrade_url is where that payer manages billing. A balance that cannot be read answers 200 with plan: \u0026quot;unknown\u0026quot; and the payer\u0026#x27;s billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a retryable 503 billing_unavailable: a Stripe blip is never read as \u0026quot;billed by Moda\u0026quot;. model_access is the workspace\u0026#x27;s access to each media model that needs approval, by access key, on every answer.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Moda\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_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/moda-997c0526/hX3OHBAQBvwpegoX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get Credits - Moda\">\u003cmeta data-mint-head property=\"og:description\" content=\"Get the current credit balance of the account that pays for this credential\u0026#x27;s usage. A Voyager sign-in in a workspace billed on Voyager reads the workspace\u0026#x27;s Voyager credits and plan (billing_product: \u0026quot;voyager\u0026quot;), its auto-reload (auto_reload) and its agent chat gate (chat); every other credential reads Moda\u0026#x27;s. upgrade_url is where that payer manages billing. A balance that cannot be read answers 200 with plan: \u0026quot;unknown\u0026quot; and the payer\u0026#x27;s billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a retryable 503 billing_unavailable: a Stripe blip is never read as \u0026quot;billed by Moda\u0026quot;. model_access is the workspace\u0026#x27;s access to each media model that needs approval, by access key, on every answer.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Moda\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.moda.app/api-reference/credits/get-credits\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://moda-997c0526.mintlify.site/_mintlify/api/og/v2?division=credits\u0026amp;title=Get+Credits\u0026amp;description=Get+the+current+credit+balance+of+the+account+that+pays+for+this+credential%27s+usage.%0A%0AA+Voyager+sign-in+in+a+workspace+billed+on+Voyager+reads+the+workspace%27s+V\u0026amp;theme=b22501ae2719082997928ddd\u0026amp;signature=6e2167eaa014ef1416f390cd407ab3823526570dc0e01b36804a790d05bf2e1d\">\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=\"Get Credits - Moda\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Get the current credit balance of the account that pays for this credential\u0026#x27;s usage. A Voyager sign-in in a workspace billed on Voyager reads the workspace\u0026#x27;s Voyager credits and plan (billing_product: \u0026quot;voyager\u0026quot;), its auto-reload (auto_reload) and its agent chat gate (chat); every other credential reads Moda\u0026#x27;s. upgrade_url is where that payer manages billing. A balance that cannot be read answers 200 with plan: \u0026quot;unknown\u0026quot; and the payer\u0026#x27;s billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a retryable 503 billing_unavailable: a Stripe blip is never read as \u0026quot;billed by Moda\u0026quot;. model_access is the workspace\u0026#x27;s access to each media model that needs approval, by access key, on every answer.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moda-997c0526.mintlify.site/_mintlify/api/og/v2?division=credits\u0026amp;title=Get+Credits\u0026amp;description=Get+the+current+credit+balance+of+the+account+that+pays+for+this+credential%27s+usage.%0A%0AA+Voyager+sign-in+in+a+workspace+billed+on+Voyager+reads+the+workspace%27s+V\u0026amp;theme=b22501ae2719082997928ddd\u0026amp;signature=6e2167eaa014ef1416f390cd407ab3823526570dc0e01b36804a790d05bf2e1d\">\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/moda-997c0526/hX3OHBAQBvwpegoX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Moda\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#850AC2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.moda.app/api-reference/credits/get-credits\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/credits/get-credits.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.moda.app/#organization\",\"name\":\"Moda\",\"url\":\"https://docs.moda.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/moda-997c0526/_eKavTfp2ZbkSuMz/images/chameleon.svg?fit=max\u0026auto=format\u0026n=_eKavTfp2ZbkSuMz\u0026q=85\u0026s=d0de9a6ddda2829d62cfe525fbb38722\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.moda.app#website\",\"name\":\"Moda\",\"url\":\"https://docs.moda.app\",\"publisher\":{\"@id\":\"https://docs.moda.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.moda.app/api-reference/credits/get-credits#webpage\",\"url\":\"https://docs.moda.app/api-reference/credits/get-credits\",\"name\":\"Get Credits\",\"description\":\"Get the current credit balance of the account that pays for this credential's usage. A Voyager sign-in in a workspace billed on Voyager reads the workspace's Voyager credits and plan (billing_product: \\\"voyager\\\"), its auto-reload (auto_reload) and its agent chat gate (chat); every other credential reads Moda's. upgrade_url is where that payer manages billing. A balance that cannot be read answers 200 with plan: \\\"unknown\\\" and the payer's billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a retryable 503 billing_unavailable: a Stripe blip is never read as \\\"billed by Moda\\\". model_access is the workspace's access to each media model that needs approval, by access key, on every answer.\",\"dateModified\":\"2026-11-12T18:06:14.995Z\",\"isPartOf\":{\"@id\":\"https://docs.moda.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.moda.app/api-reference/credits/get-credits#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.moda.app/api-reference/credits/get-credits#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Moda\",\"item\":\"https://docs.moda.app\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Credits\",\"item\":\"https://docs.moda.app/api-reference/credits/get-credits\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.moda.app/api-reference/credits/get-credits#apireference\",\"headline\":\"Get Credits\",\"name\":\"Get Credits\",\"description\":\"Get the current credit balance of the account that pays for this credential's usage. A Voyager sign-in in a workspace billed on Voyager reads the workspace's Voyager credits and plan (billing_product: \\\"voyager\\\"), its auto-reload (auto_reload) and its agent chat gate (chat); every other credential reads Moda's. upgrade_url is where that payer manages billing. A balance that cannot be read answers 200 with plan: \\\"unknown\\\" and the payer's billing_product (unchanged for Moda clients, which always bill Moda). Only when the payer itself cannot be decided (a Voyager credential whose workspace switch is unreadable) is it a retryable 503 billing_unavailable: a Stripe blip is never read as \\\"billed by Moda\\\". model_access is the workspace's access to each media model that needs approval, by access key, on every answer.\",\"url\":\"https://docs.moda.app/api-reference/credits/get-credits\",\"mainEntityOfPage\":{\"@id\":\"https://docs.moda.app/api-reference/credits/get-credits#webpage\"},\"dateModified\":\"2026-11-12T18:06:14.995Z\",\"publisher\":{\"@id\":\"https://docs.moda.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.moda.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Moda\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Moda\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/credits/get-credits.md","siteName":"Moda","nav":{"global":{"anchors":[{"anchor":"Moda app","icon":"arrow-up-right-from-square","href":"https://moda.app"},{"anchor":"Support","icon":"life-ring","href":"mailto:support@moda.app"}]},"tabs":[{"tab":"Help Center","icon":"circle-question","pages":[{"title":"Help Center","href":"/help"}]},{"tab":"Moda for Agents","icon":"robot","pages":[{"title":"Moda for Agents","href":"/agents/setup"}]},{"tab":"MCP Server (Legacy)","icon":"box-archive","pages":[{"title":"MCP Server (Legacy)","href":"/mcp/getting-started"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Overview","icon":"book-open","pages":[{"title":"Getting Started","href":"/api-reference"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"Versioning","href":"/api-reference/versioning"},{"title":"Usage Limits","href":"/api-reference/usage-limits"},{"title":"Design Task Recipes","href":"/api-reference/design-task-recipes"},{"title":"Large file uploads","href":"/api-reference/large-file-uploads"},{"title":"Webhooks","href":"/api-reference/webhooks"},{"title":"Error codes","href":"/api-reference/errors"},{"title":"Layerize images","href":"/api-reference/layerize"}]},{"group":"canvases","pages":[{"title":"List Canvases","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases","href":"/api-reference/canvases/list-canvases"},{"title":"Search Canvases","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/search","href":"/api-reference/canvases/search-canvases"},{"title":"Get Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_id}","href":"/api-reference/canvases/get-canvas"},{"title":"Update Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml patch /canvases/{canvas_id}","href":"/api-reference/canvases/update-canvas"},{"title":"Get Canvas Tokens","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_id}/tokens","href":"/api-reference/canvases/get-canvas-tokens"},{"title":"List Canvas Pages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_id}/pages","href":"/api-reference/canvases/list-canvas-pages"},{"title":"Export Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_id}/export","href":"/api-reference/canvases/export-canvas"},{"title":"Get Export Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_id}/export-status","href":"/api-reference/canvases/get-export-status"},{"title":"Make a canvas public","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_id}/share","href":"/api-reference/canvases/make-a-canvas-public"},{"title":"Import Pptx","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/import-pptx","href":"/api-reference/canvases/import-pptx"},{"title":"Get Import Pptx Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/import-pptx/{job_id}","href":"/api-reference/canvases/get-import-pptx-status"}]},{"group":"canvas-actions","pages":[{"title":"Create Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases","href":"/api-reference/canvas-actions/create-canvas"},{"title":"Delete Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /canvases/{canvas_ref}","href":"/api-reference/canvas-actions/delete-canvas"},{"title":"Read Canvas State","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/state","href":"/api-reference/canvas-actions/read-canvas-state"},{"title":"Read Canvas State Summary","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/state/summary","href":"/api-reference/canvas-actions/read-canvas-state-summary"},{"title":"Screenshot Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/screenshot","href":"/api-reference/canvas-actions/screenshot-canvas"},{"title":"Create From Markup","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/markup","href":"/api-reference/canvas-actions/create-from-markup"},{"title":"Read Canvas Edit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/edit","href":"/api-reference/canvas-actions/read-canvas-edit"},{"title":"Edit Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/edit","href":"/api-reference/canvas-actions/edit-canvas"},{"title":"Delete Canvas Items","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/delete-items","href":"/api-reference/canvas-actions/delete-canvas-items"},{"title":"Create Canvas Pages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/pages","href":"/api-reference/canvas-actions/create-canvas-pages"},{"title":"Validate Canvas Edit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/edit/validate","href":"/api-reference/canvas-actions/validate-canvas-edit"},{"title":"Apply Canvas Edit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/edit/apply","href":"/api-reference/canvas-actions/apply-canvas-edit"},{"title":"Export Canvas Edit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/edit/export","href":"/api-reference/canvas-actions/export-canvas-edit"},{"title":"Import Canvas Edit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/edit/import","href":"/api-reference/canvas-actions/import-canvas-edit"},{"title":"List Canvas Animations","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/animations","href":"/api-reference/canvas-actions/list-canvas-animations"},{"title":"Add Canvas Animations","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/animations","href":"/api-reference/canvas-actions/add-canvas-animations"},{"title":"Update Canvas Animations","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/animations/update","href":"/api-reference/canvas-actions/update-canvas-animations"},{"title":"Remove Canvas Animations","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/animations/remove","href":"/api-reference/canvas-actions/remove-canvas-animations"},{"title":"Import Canvas Pages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /canvases/{canvas_ref}/import-pages","href":"/api-reference/canvas-actions/import-canvas-pages"},{"title":"Read Canvas Instructions","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/instructions","href":"/api-reference/canvas-actions/read-canvas-instructions"},{"title":"Read Canvas Comments","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /canvases/{canvas_ref}/comments","href":"/api-reference/canvas-actions/read-canvas-comments"},{"title":"Whoami","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /whoami","href":"/api-reference/canvas-actions/whoami"},{"title":"Get Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits/{brand_kit_ref}","href":"/api-reference/canvas-actions/get-brand-kit"},{"title":"List Brand Kit Guides","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits/{brand_kit_ref}/guides","href":"/api-reference/canvas-actions/list-brand-kit-guides"},{"title":"Get Brand Kit Guide","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits/{brand_kit_ref}/guides/{guide_id}","href":"/api-reference/canvas-actions/get-brand-kit-guide"},{"title":"List Templates","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /templates","href":"/api-reference/canvas-actions/list-templates"},{"title":"Search Template Pages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /templates/pages","href":"/api-reference/canvas-actions/search-template-pages"},{"title":"Search Assets","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /assets/search","href":"/api-reference/canvas-actions/search-assets"}]},{"group":"tasks","pages":[{"title":"List Tasks","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Start Design Task","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /tasks","href":"/api-reference/tasks/start-design-task"},{"title":"Get Task Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /tasks/{task_id}","href":"/api-reference/tasks/get-task-status"},{"title":"Cancel Task","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /tasks/{task_id}/cancel","href":"/api-reference/tasks/cancel-task"}]},{"group":"organizations","pages":[{"title":"List Organizations","description":"List organizations and teams accessible to the API key owner (cursor-paginated).\n\nReturns at most ``limit`` organizations per page (default 20, cap 100).\n``total`` is the true membership count; iterate ``next_cursor`` while\n``has_more`` is ``true``.","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /organizations","href":"/api-reference/organizations/list-organizations"}]},{"group":"credits","pages":[{"title":"Get Credits","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /credits","href":"/api-reference/credits/get-credits"},{"title":"Check Media Credits","description":"Read media entitlement and net credit balance without admitting, holding or submitting a job.\n\nUses the provider proxy's model policy, including what Free includes (``catalog.voyager_free_media_refusal``);\nFree's monthly media counts are in ``balance.limits.media``.\nNull availability means the plan or model eligibility could not be verified. ``hold_credits`` is what the\nprovider proxy's admission would hold for one job of this exact request (its duration, resolution and\nroute), so a batch of N needs N times it free; ``admission_credits``, where present, is the least one job\nstarts with free (less than the hold only where the hold is a raised estimate). Balance, limits and the hold remain\nadvisory: admission rechecks them, and no credits are reserved by this request.\n\nA ``meshy`` check (``endpoint`` the 3D operation, ``input`` Meshy's request body) uses\n``POST /v1/media/generate-3d``'s plan gate and hold instead: one task's hold, at the payer's rate.","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /credits/check","href":"/api-reference/credits/check-media-credits"}]},{"group":"model-access","pages":[{"title":"Request Model Access","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /model-access/{access_key}/request","href":"/api-reference/model-access/request-model-access"}]},{"group":"brand-kits","pages":[{"title":"List Brand Kits","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits","href":"/api-reference/brand-kits/list-brand-kits"},{"title":"Create Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /brand-kits","href":"/api-reference/brand-kits/create-brand-kit"},{"title":"Start Brand Extraction","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /brand-kits/extractions","href":"/api-reference/brand-kits/start-brand-extraction"},{"title":"Get Brand Extraction","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits/extractions/{job_id}","href":"/api-reference/brand-kits/get-brand-extraction"},{"title":"List Brand Kit Images","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /brand-kits/{brand_kit_id}/images","href":"/api-reference/brand-kits/list-brand-kit-images"},{"title":"Add Brand Kit Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /brand-kits/{brand_kit_id}/images","href":"/api-reference/brand-kits/add-brand-kit-image"},{"title":"Remove Brand Kit Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /brand-kits/{brand_kit_id}/images/{image_id}","href":"/api-reference/brand-kits/remove-brand-kit-image"},{"title":"Delete Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /brand-kits/{brand_kit_id}","href":"/api-reference/brand-kits/delete-brand-kit"},{"title":"Update Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml patch /brand-kits/{brand_kit_id}","href":"/api-reference/brand-kits/update-brand-kit"}]},{"group":"remix","pages":[{"title":"Remix Canvas","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /remix","href":"/api-reference/remix/remix-canvas"}]},{"group":"share-links","pages":[{"title":"Resolve Share Link","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /share_links/resolve","href":"/api-reference/share-links/resolve-share-link"}]},{"group":"uploads","pages":[{"title":"Get Upload Limits","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /uploads/limits","href":"/api-reference/uploads/get-upload-limits"},{"title":"Upload File","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /uploads","href":"/api-reference/uploads/upload-file"},{"title":"Create Upload Url","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /uploads/url","href":"/api-reference/uploads/create-upload-url"},{"title":"Register Upload","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /uploads/register","href":"/api-reference/uploads/register-upload"},{"title":"Upload From Url","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /uploads/from-url","href":"/api-reference/uploads/upload-from-url"}]},{"group":"voices","pages":[{"title":"Get Voice Capabilities","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voices/capabilities","href":"/api-reference/voices/get-voice-capabilities"},{"title":"List Voices","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voices","href":"/api-reference/voices/list-voices"},{"title":"Find Similar Voices","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voices/similar","href":"/api-reference/voices/find-similar-voices"},{"title":"Get Voice","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voices/{voice_id}","href":"/api-reference/voices/get-voice"},{"title":"List Voice Favorites","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voice-favorites","href":"/api-reference/voices/list-voice-favorites"},{"title":"Put Voice Favorite","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml put /voice-favorites","href":"/api-reference/voices/put-voice-favorite"},{"title":"List Pronunciation Dictionaries","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /pronunciation-dictionaries","href":"/api-reference/voices/list-pronunciation-dictionaries"},{"title":"Create Pronunciation Dictionary","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /pronunciation-dictionaries","href":"/api-reference/voices/create-pronunciation-dictionary"},{"title":"Get Pronunciation Dictionary","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /pronunciation-dictionaries/{dictionary_id}","href":"/api-reference/voices/get-pronunciation-dictionary"},{"title":"Create Pronunciation Dictionary Revision","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /pronunciation-dictionaries/{dictionary_id}/revisions","href":"/api-reference/voices/create-pronunciation-dictionary-revision"}]},{"group":"usage","pages":[{"title":"Get Api Usage","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /usage","href":"/api-reference/usage/get-api-usage"},{"title":"List Api Events","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /events","href":"/api-reference/usage/list-api-events"}]},{"group":"webhooks","pages":[{"title":"List Deliveries","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /webhook_deliveries","href":"/api-reference/webhooks/list-deliveries"},{"title":"Redeliver Webhook","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /webhook_deliveries/{delivery_id}/redeliver","href":"/api-reference/webhooks/redeliver-webhook"}]},{"group":"feedback","pages":[{"title":"Submit Feedback","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /feedback","href":"/api-reference/feedback/submit-feedback"},{"title":"Submit Feedback Bundle","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /feedback/bundle","href":"/api-reference/feedback/submit-feedback-bundle"}]},{"group":"voyager","pages":[{"title":"Notify Review Ready","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/review-ready","href":"/api-reference/voyager/notify-review-ready"},{"title":"Notify Conversation Alert","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/conversation-alert","href":"/api-reference/voyager/notify-conversation-alert"},{"title":"Voyager Auth Config","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voyager/auth/config","href":"/api-reference/voyager/voyager-auth-config"},{"title":"Voyager Auth Register","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/auth/register","href":"/api-reference/voyager/voyager-auth-register"},{"title":"Voyager Auth Revoke","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/auth/revoke","href":"/api-reference/voyager/voyager-auth-revoke"},{"title":"Voyager Me","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voyager/me","href":"/api-reference/voyager/voyager-me"},{"title":"Voyager Save Onboarding Survey","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml put /voyager/me/onboarding-survey","href":"/api-reference/voyager/voyager-save-onboarding-survey"},{"title":"Voyager List Devices","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voyager/devices","href":"/api-reference/voyager/voyager-list-devices"},{"title":"Voyager Revoke Device","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /voyager/devices/{device_ref}","href":"/api-reference/voyager/voyager-revoke-device"},{"title":"Voyager Redeem Promo","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/promo/redeem","href":"/api-reference/voyager/voyager-redeem-promo"}]},{"group":"voyager-games","pages":[{"title":"List Games","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voyager/games","href":"/api-reference/voyager-games/list-games"},{"title":"Create Game","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/games","href":"/api-reference/voyager-games/create-game"},{"title":"Get Game","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /voyager/games/{game_id}","href":"/api-reference/voyager-games/get-game"},{"title":"Rename Game","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml patch /voyager/games/{game_id}","href":"/api-reference/voyager-games/rename-game"},{"title":"Unpublish Game","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/games/{game_id}/unpublish","href":"/api-reference/voyager-games/unpublish-game"},{"title":"Publish Game","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /voyager/games/{game_id}/publish","href":"/api-reference/voyager-games/publish-game"}]},{"group":"media","pages":[{"title":"Layerize Assets","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/layerize-assets","href":"/api-reference/media/layerize-assets"},{"title":"List Models","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /media/models","href":"/api-reference/media/list-models"},{"title":"Generate Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/generate-image","href":"/api-reference/media/generate-image"},{"title":"Edit Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/edit-image","href":"/api-reference/media/edit-image"},{"title":"Generate Audio","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/generate-audio","href":"/api-reference/media/generate-audio"},{"title":"Get Audio Generation Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /media/generate-audio/{task_id}","href":"/api-reference/media/get-audio-generation-status"},{"title":"Cancel Audio Generation","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/generate-audio/{task_id}/cancel","href":"/api-reference/media/cancel-audio-generation"},{"title":"Generate 3D","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/generate-3d","href":"/api-reference/media/generate-3d"},{"title":"Get 3D Generation Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /media/generate-3d/{task_id}","href":"/api-reference/media/get-3d-generation-status"},{"title":"Generate Video","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/generate-video","href":"/api-reference/media/generate-video"},{"title":"Get Video Generation Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /media/generate-video/{task_id}","href":"/api-reference/media/get-video-generation-status"},{"title":"Upscale Video","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/upscale-video","href":"/api-reference/media/upscale-video"},{"title":"Reframe Video","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/reframe-video","href":"/api-reference/media/reframe-video"},{"title":"Video Frames","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/video-frames","href":"/api-reference/media/video-frames"},{"title":"Upscale Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/upscale","href":"/api-reference/media/upscale-image"},{"title":"Vectorize Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/vectorize","href":"/api-reference/media/vectorize-image"},{"title":"Precise Edit Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/precise-edit","href":"/api-reference/media/precise-edit-image"},{"title":"Remove Background","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/remove-background","href":"/api-reference/media/remove-background"},{"title":"Outpaint Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/outpaint","href":"/api-reference/media/outpaint-image"},{"title":"Fetch Logo","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/fetch-logo","href":"/api-reference/media/fetch-logo"},{"title":"Layerize Image","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /media/layerize","href":"/api-reference/media/layerize-image"},{"title":"Get Layerize Status","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /media/layerize/{task_id}","href":"/api-reference/media/get-layerize-status"}]},{"group":"provider-proxy","pages":[{"title":"Provider Proxy","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /provider-proxy","href":"/api-reference/provider-proxy/provider-proxy"},{"title":"Provider Proxy Lookup","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /provider-proxy/lookup","href":"/api-reference/provider-proxy/provider-proxy-lookup"}]},{"group":"inference","pages":[{"title":"Models","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /inference/models","href":"/api-reference/inference/models"},{"title":"Openai Responses","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /inference/openai/responses","href":"/api-reference/inference/openai-responses"},{"title":"Anthropic Messages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /inference/anthropic/messages","href":"/api-reference/inference/anthropic-messages"},{"title":"Openrouter Chat Completions","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /inference/openrouter/chat/completions","href":"/api-reference/inference/openrouter-chat-completions"},{"title":"Voyager Chat Completions","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /inference/voyager/chat/completions","href":"/api-reference/inference/voyager-chat-completions"},{"title":"Typesafe Systemone","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /inference/typesafe/systemone","href":"/api-reference/inference/typesafe-systemone"}]},{"group":"cloud-computers","pages":[{"title":"List Computers","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/","href":"/api-reference/cloud-computers/list-computers"},{"title":"Create","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/","href":"/api-reference/cloud-computers/create"},{"title":"List Computers","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers","href":"/api-reference/cloud-computers/list-computers-1"},{"title":"Create","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers","href":"/api-reference/cloud-computers/create-1"},{"title":"Offers","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/offers","href":"/api-reference/cloud-computers/offers"},{"title":"Relay List","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/relay/","href":"/api-reference/cloud-computers/relay-list"},{"title":"Relay List","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/relay","href":"/api-reference/cloud-computers/relay-list-1"},{"title":"Verify Host","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/relay/verify-host","href":"/api-reference/cloud-computers/verify-host"},{"title":"Relay Get","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/relay/{computer_id}","href":"/api-reference/cloud-computers/relay-get"},{"title":"Relay Wake","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/relay/{computer_id}/wake","href":"/api-reference/cloud-computers/relay-wake"},{"title":"Relay Update","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/relay/{computer_id}/update","href":"/api-reference/cloud-computers/relay-update"},{"title":"Host Credentials","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/host/{computer_id}/credentials","href":"/api-reference/cloud-computers/host-credentials"},{"title":"Host Heartbeat","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/host/{computer_id}/heartbeat","href":"/api-reference/cloud-computers/host-heartbeat"},{"title":"Host Admit Work","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/host/{computer_id}/admit-work","href":"/api-reference/cloud-computers/host-admit-work"},{"title":"Get Computer","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/{computer_id}","href":"/api-reference/cloud-computers/get-computer"},{"title":"Delete","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /cloud-computers/{computer_id}","href":"/api-reference/cloud-computers/delete"},{"title":"Update","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml patch /cloud-computers/{computer_id}","href":"/api-reference/cloud-computers/update"},{"title":"Wake","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/{computer_id}/wake","href":"/api-reference/cloud-computers/wake"},{"title":"Apply Update","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/{computer_id}/update","href":"/api-reference/cloud-computers/apply-update"},{"title":"Sleep","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/{computer_id}/sleep","href":"/api-reference/cloud-computers/sleep"},{"title":"Resize","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/{computer_id}/resize","href":"/api-reference/cloud-computers/resize"},{"title":"Usage","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/{computer_id}/usage","href":"/api-reference/cloud-computers/usage"},{"title":"Files","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /cloud-computers/{computer_id}/files","href":"/api-reference/cloud-computers/files"},{"title":"Download","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /cloud-computers/{computer_id}/downloads","href":"/api-reference/cloud-computers/download"}]},{"group":"drive","pages":[{"title":"List Folders","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/folders","href":"/api-reference/drive/list-folders"},{"title":"Create Folder","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /drive/folders","href":"/api-reference/drive/create-folder"},{"title":"Get Tree","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/tree","href":"/api-reference/drive/get-tree"},{"title":"List Files","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/files","href":"/api-reference/drive/list-files"},{"title":"List Items","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/items","href":"/api-reference/drive/list-items"},{"title":"Get File","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/files/{file_id}","href":"/api-reference/drive/get-file"},{"title":"Download File","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /drive/files/{file_id}/download","href":"/api-reference/drive/download-file"},{"title":"Move Item","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /drive/items/{item_ref}/move","href":"/api-reference/drive/move-item"},{"title":"Delete Item","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /drive/items/{item_ref}","href":"/api-reference/drive/delete-item"},{"title":"Update Item","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml patch /drive/items/{item_ref}","href":"/api-reference/drive/update-item"}]},{"group":"web","pages":[{"title":"Web Search","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /web/search","href":"/api-reference/web/web-search"},{"title":"Web Read","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /web/read","href":"/api-reference/web/web-read"}]},{"group":"websites","pages":[{"title":"List Websites","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /websites","href":"/api-reference/websites/list-websites"},{"title":"Create Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /websites","href":"/api-reference/websites/create-website"},{"title":"Get Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /websites/{website_id}","href":"/api-reference/websites/get-website"},{"title":"Delete Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /websites/{website_id}","href":"/api-reference/websites/delete-website"},{"title":"Update Website Content","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml put /websites/{website_id}/content","href":"/api-reference/websites/update-website-content"},{"title":"List Website Pages","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml get /websites/{website_id}/pages","href":"/api-reference/websites/list-website-pages"},{"title":"Add Website Page","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /websites/{website_id}/pages","href":"/api-reference/websites/add-website-page"},{"title":"Delete Website Page","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml delete /websites/{website_id}/pages","href":"/api-reference/websites/delete-website-page"},{"title":"Update Website Page Content","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml put /websites/{website_id}/pages/content","href":"/api-reference/websites/update-website-page-content"},{"title":"Screenshot Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /websites/{website_id}/screenshot","href":"/api-reference/websites/screenshot-website"},{"title":"Publish Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /websites/{website_id}/publish","href":"/api-reference/websites/publish-website"},{"title":"Unpublish Website","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /websites/{website_id}/unpublish","href":"/api-reference/websites/unpublish-website"}]},{"group":"ask-expert","pages":[{"title":"Ask Expert","deprecated":null,"version":null,"openapi":"/openapi/moda-public-api.yaml post /ask","href":"/api-reference/ask-expert/ask-expert"}]}]},{"tab":"Canvas Embed SDK","icon":"window","hidden":true,"pages":[{"title":"Canvas Embed SDK","href":"/canvas-embed/overview"}]}]},"basePath":"","title":"Get Credits - Moda","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CDiBsYGW.js","utils-KF9rPlmF.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C26urKTX.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BdjmJAC1.js","snippetPresets-3IpDBjt3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-D4x_2vvo.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BIWdc5Pa.js","shallow-LQqfiMNd.js","getApiPlaygroundDisplay-DryzlOZG.js","CodeSnippet-tcJujU4r.js","CodeSnippets-BHp0nVLL.js","Page-1CZdsdAn.js","getPastedJson-DU-1ayUv.js","icon-CZK2hPr4.js","MethodPill-DOaqmTFC.js","DuplicateIcon-B5-nUxxl.js","createIcon-CDP_U77G.js","DynamicMarkdown-GHvayGOn.js","SectionHeading-BYvpkmUD.js","axios-vUo_bRtp.js","Markdown-uxhlayGT.js","clsx-B35qUV0p.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BvrGG8gU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CAf0yVYe.js"]}