Starts the OAuth 2.0 authorization code grant flow. The merchant must be
signed in to their LaunchMyStore admin when this endpoint is hit — the
endpoint is protected by merchant auth and uses the merchant’s session to
resolve which storeId is granting consent. On success, the endpoint
returns a one-time code plus an opaque state your app must round-trip
to POST /apps/oauth/token to exchange for an access token.
Apps don’t call this API directly. To request authorization from a
merchant, redirect their browser to the admin consent page —
https://app.launchmystore.io/oauth/authorize — with the same query
parameters. The consent page authenticates the merchant, shows your app’s
name and requested scopes, and calls this API on Approve; the browser then
lands on your redirect_uri with ?code=&state= (plus client_state=
echoing your own nonce, if you sent one), or ?error=access_denied on
Cancel. See Authentication for the full
browser flow. Before rendering, the consent page validates your
client_id + redirect_uri via the public
GET /apps/oauth/client-info?client_id=&redirect_uri= endpoint, which
returns only your app’s public listing fields (name, developer, icon,
registered scopes).
The state parameter returned by this endpoint is server-generated
and bound to the authorization code server-side with a 10-minute TTL. You
must echo it back on the token exchange call. Your own anti-CSRF token,
if any, should be passed in the request as a separate value and is not
read by the server.
The callback URL where the merchant will be redirected after consent.
Must exactly match one of the URLs in app.redirectUrls. Mismatched URIs
return 400 Invalid redirect URI.
Comma-separated list of scopes being requested (e.g.
read_products,write_orders). Each scope must be a member of the app’s
registered scope set; otherwise the endpoint returns
400 Invalid scopes: <list>. See Scopes
for the 37 available scopes.
Optional client-side anti-CSRF nonce. The server stores this in
clientState against the issued code but does not echo it back in
the response — the response’s data.state is always the
server-generated token. Not used for server-side validation.
Your app should now redirect the merchant back to your redirect_uri with
code and state appended as query parameters, then immediately call
POST /apps/oauth/token server-side.
import crypto from 'crypto';// 1. Generate verifier + challengeconst codeVerifier = crypto.randomBytes(32).toString('base64url');const codeChallenge = crypto .createHash('sha256') .update(codeVerifier) .digest('base64url');// 2. Authorize with the challengeconst authUrl = new URL('https://api.launchmystore.io/apps/oauth/authorize');authUrl.searchParams.set('client_id', CLIENT_ID);authUrl.searchParams.set('redirect_uri', REDIRECT_URI);authUrl.searchParams.set('scope', 'read_products,write_metafields');authUrl.searchParams.set('response_type', 'code');authUrl.searchParams.set('code_challenge', codeChallenge);authUrl.searchParams.set('code_challenge_method', 'S256');// 3. On the callback, exchange code + verifier. NOTE: `client_secret`// is ALWAYS required at the token endpoint — PKCE is enforced in// addition to the secret, not instead of it, so the exchange must// run server-side. See: /api-reference/oauth/token
One or more requested scopes not registered on the app
400
Unsupported response_type
response_type is anything other than code
400
Invalid code_challenge_method
Not S256 or plain
400
code_challenge must be 43-128 characters
PKCE challenge length out of range
401
(auth guard)
No valid merchant session on the request
404
App not found or suspended
client_id unknown, or the app has been suspended by admin. Publish status does not gate authorization — draft/in-review apps can complete OAuth on the developer’s own store
Authorization codes expire after 10 minutes and are
single-use. Replays of an already-consumed code fail with
Invalid or expired authorization code on the token endpoint.
The server-generated state is bound to the code server-side. Both
are deleted atomically when the token is issued.
This endpoint is not rate-limited at the gateway — it
is already gated by merchant authentication.
For embedded apps, prefer PKCE + session tokens. See
Session Tokens.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LaunchMyStore Developers","colors":{"primary":"#3B82F6","light":"#60A5FA","dark":"#1E40AF"},"logo":{"light":"https://mintcdn.com/tradefusiontechnologiespvtltd/h0D_voj1Mzg300-x/logo/light.svg?fit=max\u0026auto=format\u0026n=h0D_voj1Mzg300-x\u0026q=85\u0026s=22ebdb2605f91ccf72f71097a82d6928","dark":"https://mintcdn.com/tradefusiontechnologiespvtltd/h0D_voj1Mzg300-x/logo/dark.svg?fit=max\u0026auto=format\u0026n=h0D_voj1Mzg300-x\u0026q=85\u0026s=d0bd7a151fcc8504ff88d67bdf086207"},"favicon":"https://mintcdn.com/tradefusiontechnologiespvtltd/GZ5CeZvKFUHoQpDN/favicon.svg?fit=max\u0026auto=format\u0026n=GZ5CeZvKFUHoQpDN\u0026q=85\u0026s=e74621046b0cb57582fc4ce3b5615df7","api":{"playground":{"display":"interactive"},"mdx":{"auth":{"method":"bearer"},"server":"https://api.launchmystore.io"}},"navbar":{"links":[{"href":"mailto:support@launchmystore.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.launchmystore.io"}},"footer":{"socials":{"twitter":"https://twitter.com/launchmystore","github":"https://github.com/launchmystore","linkedin":"https://linkedin.com/company/launchmystore"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/launchmystore"},{"anchor":"Community","icon":"discord","href":"https://discord.gg/launchmystore"},{"anchor":"App Store","icon":"grid-2","href":"https://app.launchmystore.io/marketplace"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tradefusiontechnologiespvtltd","hasAudioNarration":false,"actualSubdomain":"tradefusiontechnologiespvtltd","customDomains":["docs.launchmystore.io"],"gitSource":{"type":"github","owner":"launchmystore","repo":"lms-docs","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad5e02b03b76e0d8ece410d","collectionId":"112f590e-f500-486d-a909-11c0921ce922","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad5e02b03b76e0d8ece410d"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad5e02b03b76e0d8ece410d","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":146},{"language":"default","tag":"Documentation","count":64},{"language":"default","tag":"Extensions","count":18},{"language":"default","tag":"Metafields","count":13},{"language":"default","tag":"Theme Development","count":13},{"language":"default","tag":"Functions","count":13},{"language":"default","tag":"Aqua Basics","count":11},{"language":"default","tag":"Get Started","count":11},{"language":"default","tag":"Blogs","count":10},{"language":"default","tag":"App Bridge","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/oauth/authorize","slug":"/api-reference/oauth/authorize","pageMetadata":{"title":"Authorize","api":"GET https://api.launchmystore.io/apps/oauth/authorize","description":"Start the OAuth 2.0 authorization code flow for a merchant","href":"/api-reference/oauth/authorize"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Start the OAuth 2.0 authorization code flow for a merchant\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,Note,ParamField,ResponseField,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`authorize`,children:`Authorize`}),`\n`,_jsxs(_components.p,{children:[`Starts the OAuth 2.0 authorization code grant flow. The merchant must be\nsigned in to their LaunchMyStore admin when this endpoint is hit — the\nendpoint is protected by merchant auth and uses the merchant’s session to\nresolve which `,_jsx(_components.code,{children:`storeId`}),` is granting consent. On success, the endpoint\nreturns a one-time `,_jsx(_components.code,{children:`code`}),` plus an opaque `,_jsx(_components.code,{children:`state`}),` your app must round-trip\nto `,_jsx(_components.code,{children:`POST /apps/oauth/token`}),` to exchange for an access token.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Apps don’t call this API directly.`}),` To request authorization from a\nmerchant, redirect their browser to the admin `,_jsx(_components.strong,{children:`consent page`}),` —\n`,_jsx(_components.code,{children:`https://app.launchmystore.io/oauth/authorize`}),` — with the same query\nparameters. The consent page authenticates the merchant, shows your app’s\nname and requested scopes, and calls this API on Approve; the browser then\nlands on your `,_jsx(_components.code,{children:`redirect_uri`}),` with `,_jsx(_components.code,{children:`?code=\u0026state=`}),` (plus `,_jsx(_components.code,{children:`client_state=`}),`\nechoing your own nonce, if you sent one), or `,_jsx(_components.code,{children:`?error=access_denied`}),` on\nCancel. See `,_jsx(_components.a,{href:`/getting-started/authentication`,children:`Authentication`}),` for the full\nbrowser flow. Before rendering, the consent page validates your\n`,_jsx(_components.code,{children:`client_id`}),` + `,_jsx(_components.code,{children:`redirect_uri`}),` via the public\n`,_jsx(_components.code,{children:`GET /apps/oauth/client-info?client_id=\u0026redirect_uri=`}),` endpoint, which\nreturns only your app’s public listing fields (name, developer, icon,\nregistered scopes).`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`state`}),` parameter returned by this endpoint is `,_jsx(_components.strong,{children:`server-generated`}),`\nand bound to the authorization code server-side with a 10-minute TTL. You\nmust echo it back on the token exchange call. Your own anti-CSRF token,\nif any, should be passed in the request as a separate value and is not\nread by the server.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`request`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` GET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.launchmystore.io/apps/oauth/authorize?`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`client_id=lms_app_xxx\u0026`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`redirect_uri=https://your-app.com/oauth/callback\u0026`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`scope=read_products,write_products,read_orders\u0026`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`response_type=code\u0026`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`code_challenge=BASE64URL(SHA256(verifier))\u0026`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`code_challenge_method=S256\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer MERCHANT_JWT\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`query-parameters`,children:`Query Parameters`}),`\n`,_jsx(ParamField,{query:`client_id`,type:`string`,required:true,id:`param-client-id`,children:_jsxs(_components.p,{children:[`The app’s public client identifier. Issued when the developer registers\nthe app via `,_jsx(_components.code,{children:`POST /apps/developer/create`}),`.`]})}),`\n`,_jsx(ParamField,{query:`redirect_uri`,type:`string`,required:true,id:`param-redirect-uri`,children:_jsxs(_components.p,{children:[`The callback URL where the merchant will be redirected after consent.\nMust exactly match one of the URLs in `,_jsx(_components.code,{children:`app.redirectUrls`}),`. Mismatched URIs\nreturn `,_jsx(_components.code,{children:`400 Invalid redirect URI`}),`.`]})}),`\n`,_jsx(ParamField,{query:`scope`,type:`string`,required:true,id:`param-scope`,children:_jsxs(_components.p,{children:[`Comma-separated list of scopes being requested (e.g.\n`,_jsx(_components.code,{children:`read_products,write_orders`}),`). Each scope must be a member of the app’s\nregistered scope set; otherwise the endpoint returns\n`,_jsx(_components.code,{children:`400 Invalid scopes: \u003clist>`}),`. See `,_jsx(_components.a,{href:`/api-reference/oauth/scopes`,children:`Scopes`}),`\nfor the 37 available scopes.`]})}),`\n`,_jsx(ParamField,{query:`response_type`,type:`string`,default:`code`,id:`param-response-type`,children:_jsxs(_components.p,{children:[`Must be `,_jsx(_components.code,{children:`code`}),`. Any other value returns\n`,_jsx(_components.code,{children:`400 Unsupported response_type`}),`. Defaults to `,_jsx(_components.code,{children:`code`}),` when omitted for\nback-compat.`]})}),`\n`,_jsx(ParamField,{query:`state`,type:`string`,id:`param-state`,children:_jsxs(_components.p,{children:[`Optional client-side anti-CSRF nonce. The server stores this in\n`,_jsx(_components.code,{children:`clientState`}),` against the issued code but does `,_jsx(_components.strong,{children:`not`}),` echo it back in\nthe response — the response’s `,_jsx(_components.code,{children:`data.state`}),` is always the\nserver-generated token. Not used for server-side validation.`]})}),`\n`,_jsx(ParamField,{query:`code_challenge`,type:`string`,id:`param-code-challenge`,children:_jsxs(_components.p,{children:[`PKCE (RFC 7636) code challenge. When supplied, the matching\n`,_jsx(_components.code,{children:`code_verifier`}),` must be sent on the token exchange. Length must be\n43-128 characters.`]})}),`\n`,_jsx(ParamField,{query:`code_challenge_method`,type:`string`,default:`plain`,id:`param-code-challenge-method`,children:_jsxs(_components.p,{children:[`Either `,_jsx(_components.code,{children:`S256`}),` (strongly recommended) or `,_jsx(_components.code,{children:`plain`}),`. Any other value\nreturns `,_jsx(_components.code,{children:`400`}),`. Only meaningful when `,_jsx(_components.code,{children:`code_challenge`}),` is also sent.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(ResponseField,{name:`status`,type:`integer`,id:`param-status`,children:_jsx(_components.p,{children:`HTTP status code (200 on success).`})}),`\n`,_jsx(ResponseField,{name:`state`,type:`string`,id:`param-state-1`,children:_jsxs(_components.p,{children:[`Final response state: `,_jsx(_components.code,{children:`\"success\"`}),` or `,_jsx(_components.code,{children:`\"error\"`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`data`,type:`object`,id:`param-data`,children:_jsxs(Expandable,{title:`Data`,children:[_jsx(ResponseField,{name:`code`,type:`string`,id:`param-code`,children:_jsx(_components.p,{children:`Single-use authorization code. 64-character hex string. Expires in\n10 minutes.`})}),_jsx(ResponseField,{name:`state`,type:`string`,id:`param-state-2`,children:_jsx(_components.p,{children:`Server-generated state token. Must be echoed back to the token\nendpoint.`})}),_jsx(ResponseField,{name:`redirectUri`,type:`string`,id:`param-redirect-uri-1`,children:_jsx(_components.p,{children:`The validated redirect URI for this app.`})}),_jsx(ResponseField,{name:`app`,type:`object`,id:`param-app`,children:_jsx(_components.p,{children:`Public-safe metadata about the app being authorized (name,\ndescription, developer, iconUrl, requested scopes).`})})]})}),`\n`,_jsx(Heading,{level:`2`,id:`example-response`,children:`Example Response`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"state\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9fbb1c3e8d4a7b2e0a5d6f7c8b9e0d1c2a3b4c5d6e7f8091a2b3c4d5e6f70819\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"state\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5d6f7c8b9e0d1c2a3b4c5d6e7f80910a2b3c4d5e6f70819b8c4d5e6f7081923a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"redirectUri\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://your-app.com/oauth/callback\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"app\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Foundry Reviews\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Customer reviews with photos and Q\u0026A\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"developer\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Foundry Apps\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"iconUrl\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.launchmystore.io/apps/foundry-reviews/icon.png\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scopes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"read_products\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"write_metafields\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"read_orders\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Your app should now redirect the merchant back to your `,_jsx(_components.code,{children:`redirect_uri`}),` with\n`,_jsx(_components.code,{children:`code`}),` and `,_jsx(_components.code,{children:`state`}),` appended as query parameters, then immediately call\n`,_jsx(_components.code,{children:`POST /apps/oauth/token`}),` server-side.`]}),`\n`,_jsx(Heading,{level:`2`,id:`pkce-flow-recommended-for-public-clients`,children:`PKCE Flow (recommended for public clients)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`22`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`22`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'crypto'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 1. Generate verifier + challenge`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` codeVerifier`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`randomBytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`32`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`toString`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'base64url'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` codeChallenge`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createHash`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`codeVerifier`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`digest`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'base64url'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 2. Authorize with the challenge`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` authUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'https://api.launchmystore.io/apps/oauth/authorize'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'client_id'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`CLIENT_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'redirect_uri'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`REDIRECT_URI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'scope'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'read_products,write_metafields'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'response_type'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'code'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'code_challenge'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`codeChallenge`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searchParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'code_challenge_method'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'S256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\"// 3. On the callback, exchange code + verifier. NOTE: `client_secret`\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// is ALWAYS required at the token endpoint — PKCE is enforced in`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// addition to the secret, not instead of it, so the exchange must`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// run server-side. See: /api-reference/oauth/token`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`error-codes`,children:`Error Codes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:`Error message`}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid redirect URI`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`redirect_uri`}),` not in `,_jsx(_components.code,{children:`app.redirectUrls`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid scopes: \u003cnames>`})}),_jsx(_components.td,{children:`One or more requested scopes not registered on the app`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Unsupported response_type`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`response_type`}),` is anything other than `,_jsx(_components.code,{children:`code`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid code_challenge_method`})}),_jsxs(_components.td,{children:[`Not `,_jsx(_components.code,{children:`S256`}),` or `,_jsx(_components.code,{children:`plain`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`code_challenge must be 43-128 characters`})}),_jsx(_components.td,{children:`PKCE challenge length out of range`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`(auth guard)`}),_jsx(_components.td,{children:`No valid merchant session on the request`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`App not found or suspended`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`client_id`}),` unknown, or the app has been suspended by admin. Publish status does `,_jsx(_components.strong,{children:`not`}),` gate authorization — draft/in-review apps can complete OAuth on the developer’s own store`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`security-notes`,children:`Security Notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Authorization codes expire after `,_jsx(_components.strong,{children:`10 minutes`}),` and are\nsingle-use. Replays of an already-consumed code fail with\n`,_jsx(_components.code,{children:`Invalid or expired authorization code`}),` on the token endpoint.`]}),`\n`,_jsxs(_components.li,{children:[`The server-generated `,_jsx(_components.code,{children:`state`}),` is bound to the `,_jsx(_components.code,{children:`code`}),` server-side. Both\nare deleted atomically when the token is issued.`]}),`\n`,_jsx(_components.li,{children:`This endpoint is not rate-limited at the gateway — it\nis already gated by merchant authentication.`}),`\n`,_jsxs(_components.li,{children:[`For embedded apps, prefer PKCE + session tokens. See\n`,_jsx(_components.a,{href:`/api-reference/authentication#session-tokens`,children:`Session Tokens`}),`.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Authorize","api":"GET https://api.launchmystore.io/apps/oauth/authorize","description":"Start the OAuth 2.0 authorization code flow for a merchant","href":"/api-reference/oauth/authorize"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Authorize","slug":"authorize","depth":1,"children":[]},{"title":"Request","slug":"request","depth":2,"children":[]},{"title":"Query Parameters","slug":"query-parameters","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[]},{"title":"Example Response","slug":"example-response","depth":2,"children":[]},{"title":"PKCE Flow (recommended for public clients)","slug":"pkce-flow-recommended-for-public-clients","depth":2,"children":[]},{"title":"Error Codes","slug":"error-codes","depth":2,"children":[]},{"title":"Security Notes","slug":"security-notes","depth":2,"children":[]}],"codeExamples":{},"endpoint":{"title":"Authorize","path":"/apps/oauth/authorize","servers":[{"url":"https://api.launchmystore.io"}],"method":"get","request":{"security":[{"title":"Bearer Auth","parameters":{"header":{"Authorization":{"type":"http","scheme":"bearer","description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token."}},"query":{},"cookie":{}}}],"parameters":{"query":{"client_id":{"schema":[{"type":"string","description":"The app’s public client identifier. Issued when the developer registers the app via `POST /apps/developer/create` .","required":true}]},"redirect_uri":{"schema":[{"type":"string","description":"The callback URL where the merchant will be redirected after consent. Must exactly match one of the URLs in `app.redirectUrls` . Mismatched URIs return `400 Invalid redirect URI` .","required":true}]},"scope":{"schema":[{"type":"string","description":"Comma-separated list of scopes being requested (e.g. `read_products,write_orders` ). Each scope must be a member of the app’s registered scope set; otherwise the endpoint returns `400 Invalid scopes: \u003clist>` . See Scopes for the 37 available scopes.","required":true}]},"response_type":{"schema":[{"type":"string","description":"Must be `code` . Any other value returns `400 Unsupported response_type` . Defaults to `code` when omitted for back-compat."}]},"state":{"schema":[{"type":"string","description":"Optional client-side anti-CSRF nonce. The server stores this in `clientState` against the issued code but does not echo it back in the response — the response’s `data.state` is always the server-generated token. Not used for server-side validation."}]},"code_challenge":{"schema":[{"type":"string","description":"PKCE (RFC 7636) code challenge. When supplied, the matching `code_verifier` must be sent on the token exchange. Length must be 43-128 characters."}]},"code_challenge_method":{"schema":[{"type":"string","description":"Either `S256` (strongly recommended) or `plain` . Any other value returns `400` . Only meaningful when `code_challenge` is also sent."}]}},"header":{},"cookie":{},"path":{}},"body":{}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"status":[{"type":"integer","description":"HTTP status code (200 on success)."}],"state":[{"type":"string","description":"Final response state: `\"success\"` or `\"error\"` ."}],"data":[{"type":"object","properties":{"code":[{"type":"string","description":"Single-use authorization code. 64-character hex string. Expires in 10 minutes."}],"state":[{"type":"string","description":"Server-generated state token. Must be echoed back to the token endpoint."}],"redirectUri":[{"type":"string","description":"The validated redirect URI for this app."}],"app":[{"type":"object","properties":{},"description":"Public-safe metadata about the app being authorized (name, description, developer, iconUrl, requested scopes)."}]}}]}}],"examples":{"example":{"value":{"status":123,"state":"\u003cstring>","data":{"code":"\u003cstring>","state":"\u003cstring>","redirectUri":"\u003cstring>","app":{}}}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"tradefusiontechnologiespvtltd","siteName":"LaunchMyStore Developers","title":"Authorize - LaunchMyStore Developers","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-16T18:55:56.212Z","originalFileLocation":"api-reference/oauth/authorize.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=\"system\"}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=\"Start the OAuth 2.0 authorization code flow for a merchant\">\u003cmeta data-mint-head name=\"application-name\" content=\"LaunchMyStore Developers\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Authorize - LaunchMyStore Developers\">\u003cmeta data-mint-head property=\"og:description\" content=\"Start the OAuth 2.0 authorization code flow for a merchant\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LaunchMyStore Developers\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.launchmystore.io/api-reference/oauth/authorize\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tradefusiontechnologiespvtltd.mintlify.app/_mintlify/api/og/v2?division=OAuth\u0026amp;title=Authorize\u0026amp;description=Start+the+OAuth+2.0+authorization+code+flow+for+a+merchant\u0026amp;theme=7262308de22b2a4febf4ce58\u0026amp;signature=2e80443ab0fdbaebec28f3be616401f091daa6e20e0b2565df2152a473e63c2d\">\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=\"Authorize - LaunchMyStore Developers\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Start the OAuth 2.0 authorization code flow for a merchant\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tradefusiontechnologiespvtltd.mintlify.app/_mintlify/api/og/v2?division=OAuth\u0026amp;title=Authorize\u0026amp;description=Start+the+OAuth+2.0+authorization+code+flow+for+a+merchant\u0026amp;theme=7262308de22b2a4febf4ce58\u0026amp;signature=2e80443ab0fdbaebec28f3be616401f091daa6e20e0b2565df2152a473e63c2d\">\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/tradefusiontechnologiespvtltd/AxaKSy1cjHGQnY9E/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LaunchMyStore Developers\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B82F6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.launchmystore.io/api-reference/oauth/authorize\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/oauth/authorize.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.launchmystore.io/#organization\",\"name\":\"LaunchMyStore Developers\",\"url\":\"https://docs.launchmystore.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tradefusiontechnologiespvtltd/h0D_voj1Mzg300-x/logo/light.svg?fit=max\u0026auto=format\u0026n=h0D_voj1Mzg300-x\u0026q=85\u0026s=22ebdb2605f91ccf72f71097a82d6928\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.launchmystore.io#website\",\"name\":\"LaunchMyStore Developers\",\"url\":\"https://docs.launchmystore.io\",\"publisher\":{\"@id\":\"https://docs.launchmystore.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.launchmystore.io/api-reference/oauth/authorize#webpage\",\"url\":\"https://docs.launchmystore.io/api-reference/oauth/authorize\",\"name\":\"Authorize\",\"description\":\"Start the OAuth 2.0 authorization code flow for a merchant\",\"dateModified\":\"2026-07-16T18:55:56.212Z\",\"isPartOf\":{\"@id\":\"https://docs.launchmystore.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.launchmystore.io/api-reference/oauth/authorize#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.launchmystore.io/api-reference/oauth/authorize#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"LaunchMyStore Developers\",\"item\":\"https://docs.launchmystore.io\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authorize\",\"item\":\"https://docs.launchmystore.io/api-reference/oauth/authorize\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.launchmystore.io/api-reference/oauth/authorize#apireference\",\"headline\":\"Authorize\",\"name\":\"Authorize\",\"description\":\"Start the OAuth 2.0 authorization code flow for a merchant\",\"url\":\"https://docs.launchmystore.io/api-reference/oauth/authorize\",\"mainEntityOfPage\":{\"@id\":\"https://docs.launchmystore.io/api-reference/oauth/authorize#webpage\"},\"dateModified\":\"2026-07-16T18:55:56.212Z\",\"publisher\":{\"@id\":\"https://docs.launchmystore.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.launchmystore.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LaunchMyStore Developers\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LaunchMyStore Developers","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/launchmystore"},{"anchor":"Community","icon":"discord","href":"https://discord.gg/launchmystore"},{"anchor":"App Store","icon":"grid-2","href":"https://app.launchmystore.io/marketplace"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Theme Development","pages":[{"title":"Theme Development","href":"/aqua/overview"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API Overview","href":"/api-reference/overview"},{"title":"API Authentication","href":"/api-reference/authentication"},{"title":"API Rate Limits","description":"Per-app sliding-window rate limits, headers, and best practices","href":"/api-reference/rate-limits"}]},{"group":"OAuth","pages":[{"title":"Authorize","api":"GET https://api.launchmystore.io/apps/oauth/authorize","href":"/api-reference/oauth/authorize"},{"title":"Token Exchange","api":"POST https://api.launchmystore.io/apps/oauth/token","description":"Exchange an authorization code or refresh token for an access token","href":"/api-reference/oauth/token"},{"title":"Revoke Token","api":"POST https://api.launchmystore.io/apps/oauth/revoke","href":"/api-reference/oauth/revoke"},{"title":"Scopes","href":"/api-reference/oauth/scopes"}]},{"group":"Apps","pages":[{"title":"App Versions","api":"GET https://api.launchmystore.io/apps/developer/{appId}/versions","href":"/api-reference/apps/versions"},{"title":"Installation Rollback","api":"POST https://api.launchmystore.io/apps/store/installations/{installationId}/rollback","href":"/api-reference/apps/rollback"},{"title":"App Installations","api":"GET https://api.launchmystore.io/apps/store/installed","href":"/api-reference/apps/installations"},{"title":"Test a Function","api":"POST https://api.launchmystore.io/apps/functions/test","href":"/api-reference/apps/function-test"},{"title":"Function runs","href":"/api-reference/apps/function-runs"}]},{"group":"App Billing","pages":[{"title":"App Subscriptions","api":"POST https://api.launchmystore.io/apps/billing/subscribe","href":"/api-reference/app-billing/subscriptions"},{"title":"App Billing Transactions","api":"GET https://api.launchmystore.io/apps/billing/transactions","href":"/api-reference/app-billing/transactions"},{"title":"Usage Records","api":"POST https://api.launchmystore.io/api/v1/billing/usage","href":"/api-reference/app-billing/usage-records"}]},{"group":"App Analytics","pages":[{"title":"App Analytics","api":"GET https://api.launchmystore.io/apps/developer/analytics","href":"/api-reference/app-analytics/overview"}]},{"group":"App Settings","pages":[{"title":"Get App Settings","api":"GET https://api.launchmystore.io/apps/installations/{installationId}/settings","href":"/api-reference/app-settings/get"},{"title":"Update App Settings","api":"PUT https://api.launchmystore.io/apps/installations/{installationId}/settings","href":"/api-reference/app-settings/update"}]},{"group":"Developer","pages":[{"title":"Developer Payouts","api":"GET https://api.launchmystore.io/apps/developer/payouts","href":"/api-reference/developer/payouts"},{"title":"Payout Methods","api":"GET https://api.launchmystore.io/apps/developer/payout-method","href":"/api-reference/developer/payout-methods"}]},{"group":"Products","pages":[{"title":"List Products","api":"GET https://api.launchmystore.io/api/v1/products.json","href":"/api-reference/products/list"},{"title":"Get Product","api":"GET https://api.launchmystore.io/api/v1/products/:id.json","href":"/api-reference/products/get"},{"title":"Create Product","api":"POST https://api.launchmystore.io/api/v1/products.json","href":"/api-reference/products/create"},{"title":"Update Product","api":"PUT https://api.launchmystore.io/api/v1/products/:id.json","href":"/api-reference/products/update"},{"title":"Delete Product","api":"DELETE https://api.launchmystore.io/api/v1/products/:id.json","href":"/api-reference/products/delete"}]},{"group":"Orders","pages":[{"title":"List Orders","api":"GET https://api.launchmystore.io/api/v1/orders.json","href":"/api-reference/orders/list"},{"title":"Get Order","api":"GET https://api.launchmystore.io/api/v1/orders/:id.json","href":"/api-reference/orders/get"},{"title":"Create Order","api":"POST https://api.launchmystore.io/api/v1/orders.json","href":"/api-reference/orders/create"},{"title":"Update Order","api":"PUT https://api.launchmystore.io/orders/update/:orderId","href":"/api-reference/orders/update"},{"title":"Fulfill Order","api":"POST https://api.launchmystore.io/api/v1/orders/:orderId/fulfillments.json","href":"/api-reference/orders/fulfill"}]},{"group":"Customers","pages":[{"title":"List Customers","api":"GET https://api.launchmystore.io/api/v1/customers.json","href":"/api-reference/customers/list"},{"title":"Get Customer","api":"GET https://api.launchmystore.io/api/v1/customers/{id}.json","href":"/api-reference/customers/get"},{"title":"Create Customer","api":"POST https://api.launchmystore.io/api/v1/customers.json","href":"/api-reference/customers/create"},{"title":"Update Customer","api":"PUT https://api.launchmystore.io/api/v1/customers/{id}.json","href":"/api-reference/customers/update"}]},{"group":"Inventory","pages":[{"title":"List Inventory Levels","api":"GET https://api.launchmystore.io/api/v1/inventory_levels.json","href":"/api-reference/inventory/list"},{"title":"Adjust Inventory","api":"POST https://api.launchmystore.io/api/v1/inventory_levels/adjust.json","href":"/api-reference/inventory/adjust"},{"title":"Set Inventory Level","api":"POST https://api.launchmystore.io/api/v1/inventory_levels/set.json","href":"/api-reference/inventory/set"}]},{"group":"Webhooks","pages":[{"title":"Webhooks Overview","href":"/api-reference/webhooks/overview"},{"title":"Webhook Topics","href":"/api-reference/webhooks/topics"},{"title":"Webhook Verification","href":"/api-reference/webhooks/verification"},{"title":"GDPR Webhooks","href":"/api-reference/webhooks/gdpr"},{"title":"Webhook Delivery Logs","api":"GET https://api.launchmystore.io/apps/store/webhook-logs","href":"/api-reference/webhooks/delivery-logs"}]},{"group":"Collections","pages":[{"title":"List Collections","api":"GET https://api.launchmystore.io/api/v1/collections.json","href":"/api-reference/collections/list"},{"title":"Get Collection","api":"GET https://api.launchmystore.io/api/v1/collections/{id}.json","href":"/api-reference/collections/get"},{"title":"Create Collection","api":"POST https://api.launchmystore.io/api/v1/collections.json","href":"/api-reference/collections/create"},{"title":"Update Collection","api":"PUT https://api.launchmystore.io/api/v1/collections/{id}.json","href":"/api-reference/collections/update"},{"title":"Delete Collection","api":"DELETE https://api.launchmystore.io/api/v1/collections/{id}.json","href":"/api-reference/collections/delete"}]},{"group":"Blogs","pages":[{"title":"List Blogs","api":"GET https://api.launchmystore.io/api/v1/blogs.json","href":"/api-reference/blogs/list"},{"title":"Get Blog","api":"GET https://api.launchmystore.io/api/v1/blogs/:id.json","href":"/api-reference/blogs/get"},{"title":"Create Blog","api":"POST https://api.launchmystore.io/api/v1/blogs.json","href":"/api-reference/blogs/create"},{"title":"Update Blog","api":"PUT https://api.launchmystore.io/api/v1/blogs/:id.json","href":"/api-reference/blogs/update"},{"title":"Delete Blog","api":"DELETE https://api.launchmystore.io/api/v1/blogs/:id.json","href":"/api-reference/blogs/delete"},{"title":"List Articles","api":"GET https://api.launchmystore.io/api/v1/blogs/:blog_id/articles.json","href":"/api-reference/blogs/articles/list"},{"title":"Get Article","api":"GET https://api.launchmystore.io/api/v1/articles/:id.json","href":"/api-reference/blogs/articles/get"},{"title":"Create Article","api":"POST https://api.launchmystore.io/api/v1/blogs/:blog_id/articles.json","href":"/api-reference/blogs/articles/create"},{"title":"Update Article","api":"PUT https://api.launchmystore.io/api/v1/articles/:id.json","href":"/api-reference/blogs/articles/update"},{"title":"Delete Article","api":"DELETE https://api.launchmystore.io/api/v1/articles/:id.json","href":"/api-reference/blogs/articles/delete"}]},{"group":"Pages","pages":[{"title":"List Pages","api":"GET https://api.launchmystore.io/api/v1/pages.json","href":"/api-reference/pages/list"},{"title":"Get Page","api":"GET https://api.launchmystore.io/api/v1/pages/:id.json","href":"/api-reference/pages/get"},{"title":"Create Page","api":"POST https://api.launchmystore.io/api/v1/pages.json","href":"/api-reference/pages/create"},{"title":"Update Page","api":"PUT https://api.launchmystore.io/api/v1/pages/:id.json","href":"/api-reference/pages/update"},{"title":"Delete Page","api":"DELETE https://api.launchmystore.io/api/v1/pages/:id.json","href":"/api-reference/pages/delete"}]},{"group":"Menus","pages":[{"title":"List Menus","api":"GET https://api.launchmystore.io/api/v1/menus.json","href":"/api-reference/menus/list"},{"title":"Get Menu","api":"GET https://api.launchmystore.io/api/v1/menus/:id.json","href":"/api-reference/menus/get"},{"title":"Create Menu","api":"POST https://api.launchmystore.io/api/v1/menus.json","href":"/api-reference/menus/create"},{"title":"Update Menu","api":"PUT https://api.launchmystore.io/api/v1/menus/:id.json","href":"/api-reference/menus/update"},{"title":"Delete Menu","api":"DELETE https://api.launchmystore.io/api/v1/menus/:id.json","href":"/api-reference/menus/delete"}]},{"group":"Themes","pages":[{"title":"List Themes","api":"GET https://api.launchmystore.io/api/v1/themes.json","href":"/api-reference/themes/list"},{"title":"Get Theme","api":"GET https://api.launchmystore.io/api/v1/themes/{id}.json","href":"/api-reference/themes/get"},{"title":"List Theme Assets","api":"GET https://api.launchmystore.io/api/v1/themes/{theme_id}/assets.json","href":"/api-reference/themes/assets"},{"title":"Create / Update Theme Asset","api":"PUT https://api.launchmystore.io/api/v1/themes/{theme_id}/assets.json","href":"/api-reference/themes/asset-update"},{"title":"Delete Theme Asset","api":"DELETE https://api.launchmystore.io/api/v1/themes/{theme_id}/assets.json","href":"/api-reference/themes/asset-delete"},{"title":"Theme Settings","api":"GET https://api.launchmystore.io/api/v1/themes/{theme_id}/settings.json","href":"/api-reference/themes/settings"},{"title":"Template Sections","api":"GET https://api.launchmystore.io/api/v1/themes/{theme_id}/templates/{template}/sections.json","href":"/api-reference/themes/sections"}]},{"group":"Shipping Zones","pages":[{"title":"List Shipping Zones","api":"GET https://api.launchmystore.io/api/v1/shipping_zones.json","href":"/api-reference/shipping-zones/list"},{"title":"Create Shipping Zone","api":"POST https://api.launchmystore.io/api/v1/shipping_zones.json","href":"/api-reference/shipping-zones/create"},{"title":"Update Shipping Zone","api":"PUT https://api.launchmystore.io/api/v1/shipping_zones/{zone_id}.json","href":"/api-reference/shipping-zones/update"},{"title":"Delete Shipping Zone","api":"DELETE https://api.launchmystore.io/api/v1/shipping_zones/{zone_id}.json","href":"/api-reference/shipping-zones/delete"}]},{"group":"Gift Cards","pages":[{"title":"List Gift Cards","api":"GET https://api.launchmystore.io/api/v1/gift_cards.json","href":"/api-reference/gift-cards/list"},{"title":"Get Gift Card","api":"GET https://api.launchmystore.io/api/v1/gift_cards/{gift_card_id}.json","href":"/api-reference/gift-cards/get"},{"title":"Create Gift Card","api":"POST https://api.launchmystore.io/api/v1/gift_cards.json","href":"/api-reference/gift-cards/create"},{"title":"Disable Gift Card","api":"POST https://api.launchmystore.io/api/v1/gift_cards/{gift_card_id}/disable.json","href":"/api-reference/gift-cards/disable"}]},{"group":"Email Templates","pages":[{"title":"List Email Templates","api":"GET https://api.launchmystore.io/api/v1/email-templates.json","href":"/api-reference/email-templates/list"},{"title":"Create / Update Email Template","api":"POST https://api.launchmystore.io/api/v1/email-templates.json","href":"/api-reference/email-templates/create"},{"title":"Delete Email Template","api":"DELETE https://api.launchmystore.io/api/v1/email-templates/{id}.json","href":"/api-reference/email-templates/delete"}]},{"group":"Sales Channels","pages":[{"title":"Create Sales Channel","api":"POST https://api.launchmystore.io/api/v1/sales_channels.json","href":"/api-reference/sales-channels/create"},{"title":"List Product Listings","api":"GET https://api.launchmystore.io/api/v1/product_listings.json","href":"/api-reference/product-listings/list"},{"title":"Create Product Listing","api":"POST https://api.launchmystore.io/api/v1/product_listings.json","href":"/api-reference/product-listings/create"}]},{"group":"Discounts","pages":[{"title":"List Discounts","api":"GET https://api.launchmystore.io/api/v1/discounts.json","href":"/api-reference/discounts/list"},{"title":"Get Discount","api":"GET https://api.launchmystore.io/api/v1/discounts/{id}.json","href":"/api-reference/discounts/get"},{"title":"Create Discount","api":"POST https://api.launchmystore.io/api/v1/discounts.json","href":"/api-reference/discounts/create"},{"title":"Update Discount","api":"PUT https://api.launchmystore.io/api/v1/discounts/{id}.json","href":"/api-reference/discounts/update"},{"title":"Delete Discount","api":"DELETE https://api.launchmystore.io/api/v1/discounts/{id}.json","href":"/api-reference/discounts/delete"}]},{"group":"Metafields","pages":[{"title":"Metafields Overview","href":"/api-reference/metafields/overview"},{"title":"List Metafields","api":"GET https://api.launchmystore.io/api/v1/metafields.json","href":"/api-reference/metafields/list"},{"title":"Get Metafield by ID (Admin API only)","href":"/api-reference/metafields/get"},{"title":"Create or Upsert Metafield","api":"POST https://api.launchmystore.io/api/v1/metafields.json","href":"/api-reference/metafields/create"},{"title":"Update Metafield","api":"PUT https://api.launchmystore.io/api/v1/metafields/:id.json","href":"/api-reference/metafields/update"},{"title":"Delete Metafield","api":"DELETE https://api.launchmystore.io/api/v1/metafields/:id.json","href":"/api-reference/metafields/delete"},{"title":"Bulk Upsert Metafields (Admin API only)","href":"/api-reference/metafields/bulk"},{"group":"Definitions","pages":[{"title":"Metafield Definitions Overview","href":"/api-reference/metafields/definitions/overview"},{"title":"List Metafield Definitions","api":"GET https://api.launchmystore.io/metafield-definitions","href":"/api-reference/metafields/definitions/list"},{"title":"Get Metafield Definition","api":"GET https://api.launchmystore.io/metafield-definitions/:id","href":"/api-reference/metafields/definitions/get"},{"title":"Create Metafield Definition","api":"POST https://api.launchmystore.io/metafield-definitions","href":"/api-reference/metafields/definitions/create"},{"title":"Update Metafield Definition","api":"PUT https://api.launchmystore.io/metafield-definitions/:id","href":"/api-reference/metafields/definitions/update"},{"title":"Delete Metafield Definition","api":"DELETE https://api.launchmystore.io/metafield-definitions/:id","href":"/api-reference/metafields/definitions/delete"}]}]},{"group":"Fulfillments","pages":[{"title":"List Fulfillments","api":"GET https://api.launchmystore.io/api/v1/fulfillments.json","href":"/api-reference/fulfillments/list"},{"title":"Create Fulfillment","api":"POST https://api.launchmystore.io/api/v1/orders/{order_id}/fulfillments.json","href":"/api-reference/fulfillments/create"},{"title":"Update Fulfillment","api":"PUT https://api.launchmystore.io/api/v1/fulfillments/{fulfillment_id}.json","href":"/api-reference/fulfillments/update"},{"title":"Delete Fulfillment","api":"DELETE https://api.launchmystore.io/api/v1/fulfillments/{fulfillment_id}.json","href":"/api-reference/fulfillments/delete"},{"title":"Fulfillment Services","href":"/api-reference/fulfillments/services"}]},{"group":"Analytics","pages":[{"title":"Dashboard Summary","api":"GET https://api.launchmystore.io/api/v1/analytics/summary","href":"/api-reference/analytics/overview"},{"title":"Sales Analytics","api":"GET https://api.launchmystore.io/api/v1/analytics/sales","href":"/api-reference/analytics/sales"},{"title":"Top Products","api":"GET https://api.launchmystore.io/api/v1/analytics/products/top","href":"/api-reference/analytics/products"}]},{"group":"Billing","pages":[{"title":"Get Billing Summary","api":"GET https://api.launchmystore.io/api/v1/billing","href":"/api-reference/billing/summary"},{"title":"List Subscriptions","api":"GET https://api.launchmystore.io/api/v1/billing/subscriptions","href":"/api-reference/billing/subscriptions"},{"title":"List Invoices","api":"GET https://api.launchmystore.io/api/v1/billing/invoices","href":"/api-reference/billing/invoices"}]},{"group":"Settings","pages":[{"title":"Get Store Settings","api":"GET https://api.launchmystore.io/api/v1/settings","href":"/api-reference/settings/get"},{"title":"Update Store Settings","api":"PUT https://api.launchmystore.io/api/v1/settings","href":"/api-reference/settings/update"},{"title":"List Shipping Zones","api":"GET https://api.launchmystore.io/api/v1/settings/shipping","href":"/api-reference/settings/shipping"},{"title":"List Payment Providers","api":"GET https://api.launchmystore.io/api/v1/settings/payments","href":"/api-reference/settings/payments"},{"title":"List Tax Rules","api":"GET https://api.launchmystore.io/api/v1/settings/taxes","href":"/api-reference/settings/taxes"}]},{"group":"Cart","pages":[{"title":"Get Cart","api":"GET https://your-store.launchmystore.io/cart.js","href":"/api-reference/cart/get"},{"title":"Add to Cart","api":"POST https://your-store.launchmystore.io/cart/add.js","href":"/api-reference/cart/add"},{"title":"Update Cart","api":"POST https://your-store.launchmystore.io/cart/update.js","href":"/api-reference/cart/update"},{"title":"Remove from Cart","api":"POST https://your-store.launchmystore.io/cart/change.js","href":"/api-reference/cart/remove"},{"title":"Clear Cart","api":"POST https://{shop-domain}/cart/clear.js","href":"/api-reference/cart/clear"}]},{"group":"Variants","pages":[{"title":"List Variants","api":"GET https://api.launchmystore.io/api/v1/products/{id}.json","href":"/api-reference/variants/list"},{"title":"Get Variant","api":"GET https://api.launchmystore.io/variants/get-single-variant/{id}","href":"/api-reference/variants/get"},{"title":"Create Variant","api":"POST https://api.launchmystore.io/variants/bulk-add-variant/{product_id}","href":"/api-reference/variants/create"},{"title":"Update Variant","api":"PATCH https://api.launchmystore.io/variants/update-single-variant/{id}","href":"/api-reference/variants/update"},{"title":"Delete Variant","api":"DELETE https://api.launchmystore.io/variants/delete-single-variant/{id}","href":"/api-reference/variants/delete"}]},{"group":"Locations","pages":[{"title":"List Locations","api":"GET https://api.launchmystore.io/warehouse/get-all-warehouses","href":"/api-reference/locations/list"},{"title":"Create Location","api":"POST https://api.launchmystore.io/warehouse/add-warehouse","href":"/api-reference/locations/create"}]},{"group":"Shop","pages":[{"title":"Get Shop","api":"GET https://api.launchmystore.io/api/v1/shop.json","href":"/api-reference/shop/get"},{"title":"Update Shop","api":"PUT https://api.launchmystore.io/account/add-business-detail","href":"/api-reference/shop/update"}]},{"group":"Policies","pages":[{"title":"List Policies","api":"GET https://api.launchmystore.io/policies/get-all-policies","href":"/api-reference/policies/list"},{"title":"Update Policy","api":"PATCH https://api.launchmystore.io/policies/update-policies/{policyId}","href":"/api-reference/policies/update"}]},{"group":"Search","pages":[{"title":"Search Products","api":"GET https://api.launchmystore.io/search/suggest.json","href":"/api-reference/search/products"},{"title":"Search Collections","api":"GET https://{store-domain}/search/suggest.json","href":"/api-reference/search/collections"},{"title":"Search Autocomplete","api":"GET https://{store-domain}/search/suggest.json","href":"/api-reference/search/autocomplete"}]},{"group":"Files","pages":[{"title":"List Files","api":"GET https://api.launchmystore.io/api/v1/files.json","href":"/api-reference/files/list"},{"title":"Upload File","api":"POST https://api.launchmystore.io/api/v1/files.json","href":"/api-reference/files/upload"},{"title":"Delete File","api":"DELETE https://api.launchmystore.io/api/v1/files/{file_id}.json","href":"/api-reference/files/delete"}]}]}]},"basePath":"","title":"Authorize - LaunchMyStore Developers","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js"]}