How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.
Gomry Cloud authenticates machines with API keys, sent as a bearer token. There is no session, no OAuth flow and no browser-facing credential — a Cloud key is a server-side secret.
Sending a key
POST /v1/scrape HTTP/1.1Host: api.cloud.gomry.comAuthorization: Bearer gck_live_...Content-Type: application/json
Never put a Cloud key in browser JavaScript, a mobile app, or anything else you ship to a user. The data plane sends no CORS headers, deliberately — a key that a browser can read is a key anyone can spend.
Key format
A key is the gck_live_ prefix plus 32 random bytes. There is one kind of key: it does the work and bills for it. Spend is bounded by the project’s monthly budget cap, not by the credential.
gck_test_ keys are retired. They ran the real request against the real upstream and were simply not invoiced, which made “test” a promise of a sandbox that never existed. Existing ones no longer authenticate — mint a replacement in the console.
We store only a SHA-256 hash of the key. The plaintext is returned once, at mint time, and cannot be recovered — if it is lost, revoke it and mint another. The console shows a key by its prefix and last four characters, which is enough to tell two keys apart and useless to anyone who steals the display.
Scopes
A scope names exactly one operation a key may perform, in the form service:action. A key carries the scopes you grant it and nothing else.
Field
Description
scrape:run
Call POST /v1/scrape — render a page and extract structured data from it.
scrape:fetch
Call POST /v1/fetch — render a page and return its HTML and metadata.
toolsapi:read
Search and inspect the tool catalogue — POST /v1/toolsapi/discover, POST /v1/toolsapi/inspect, and polling a run with GET /v1/toolsapi/runs/{runId}. Reads only; it cannot execute anything.
toolsapi:run
Call POST /v1/toolsapi/run — execute a tool and pay its upstream cost. This is the scope that spends: grant it separately from toolsapi:read.
tasks:run
Call POST /v1/superagent — start a research task. This is the scope that spends, and it commits to work that continues after the request returns.
tasks:read
Poll a task with GET /v1/superagent/{taskId} and stop one with DELETE. Neither is billed, so a worker that only collects results needs nothing more than this.
inference:run
Call POST /v1/inference — one model call, billed per input and output token at the capability you asked for. Nothing implies it: it is the only scope whose cost per call is set by how much you send rather than by the operation, so a key that may run a task must still be granted this to call the model directly.
Scopes are flat: there are no wildcards, and scrape:run does not imply scrape:fetch. They are separately priced operations, so they are separately granted — a key minted for a cheap fetch loop must not be able to spend four times the rate on extractions.
Two independent checks
A request is authorized by two separate facts, and both must hold. They fail with different codes so you can tell them apart without guessing.
Check
Failure
Fix
The key carries the scope for this operation
403 forbidden
Mint a key with the scope, or grant it.
The project has this API enabled
403 api_not_enabled
Turn the API on for the project in the console.
Keeping them separate is what stops each from silently widening the other: enabling an API must not grant new power to keys that already exist, and a broadly scoped key must not reach an API the project never turned on.
Rotation and revocation
Revocation takes effect on the next request — there is no cache of authorization decisions to wait out. To rotate without downtime, mint the new key, deploy it, then revoke the old one. A key can also be given an expiry at mint time, which is the better default for anything handed to a third party.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Gomry Cloud docs","description":"Developer APIs from Gomry. Metered per request, priced per unit, billed monthly — no plans, no seats, no free tier to outgrow.","colors":{"primary":"#242424","light":"#F0EFE6","dark":"#242424"},"logo":{"light":"https://mintcdn.com/gomry-cloud-services/SacFyndYg2F1rf9S/assets/logo-light.png?fit=max\u0026auto=format\u0026n=SacFyndYg2F1rf9S\u0026q=85\u0026s=42e226ab6766876a3efb67ba99d3bbad","dark":"https://mintcdn.com/gomry-cloud-services/SacFyndYg2F1rf9S/assets/logo-dark.png?fit=max\u0026auto=format\u0026n=SacFyndYg2F1rf9S\u0026q=85\u0026s=4609213baa1c2c46c365e698693a13cd","href":"https://cloud.gomry.com"},"favicon":"https://mintcdn.com/gomry-cloud-services/SacFyndYg2F1rf9S/assets/favicon.ico?fit=max\u0026auto=format\u0026n=SacFyndYg2F1rf9S\u0026q=85\u0026s=c589db00f1ae0de07c203bbbe74fe762","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"]}},"appearance":{"default":"system"},"footer":{"links":[{"header":"Gomry Cloud","items":[{"label":"Console","href":"https://cloud.gomry.com/sign-in"},{"label":"About","href":"https://cloud.gomry.com/about"},{"label":"Contact","href":"https://cloud.gomry.com/contact"},{"label":"Privacy","href":"https://cloud.gomry.com/privacy"}]},{"header":"For agents","items":[{"label":"Agent guide","href":"https://cloud.gomry.com/agents.md"},{"label":"llms.txt","href":"https://cloud.gomry.com/llms.txt"},{"label":"OpenAPI","href":"https://cloud.gomry.com/openapi.json"}]}]},"seo":{"indexing":"all"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Console","icon":"square-terminal","href":"https://cloud.gomry.com/sign-in"},{"anchor":"Status","icon":"signal","href":"https://gomry.com/status"},{"anchor":"Support","icon":"envelope","href":"https://cloud.gomry.com/contact"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"gomry-cloud-services","hasAudioNarration":false,"actualSubdomain":"gomry-cloud-services","customDomains":["docs.cloud.gomry.com"],"gitSource":{"type":"github","owner":"gomryhq","repo":"gomry-cloud-services","deployBranch":"feat/mintlify-docs","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ab29881d73065b63adb3ceb","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API reference","count":20},{"language":"default","tag":"ToolsAPI","count":8},{"language":"default","tag":"Documentation","count":8},{"language":"default","tag":"Superagent","count":6},{"language":"default","tag":"Guides","count":6},{"language":"default","tag":"Services","count":5},{"language":"default","tag":"Catalog","count":5},{"language":"default","tag":"Scrape","count":4},{"language":"default","tag":"Ember","count":2},{"language":"default","tag":"Overview","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"authentication","slug":"/authentication","pageMetadata":{"title":"Authentication","description":"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.","canonical":"https://docs.cloud.gomry.com/authentication","href":"/authentication"},"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: \"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Gomry Cloud authenticates machines with API keys, sent as a bearer token. There is no session, no OAuth flow and no browser-facing credential — a Cloud key is a server-side secret.`}),`\n`,_jsx(Heading,{level:`2`,id:`sending-a-key`,children:`Sending a key`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`http`,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:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /v1/scrape `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`HTTP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` api.cloud.gomry.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Bearer gck_live_...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` application/json`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Never put a Cloud key in browser JavaScript, a mobile app, or anything else you ship to a user. The data plane sends no CORS headers, deliberately — a key that a browser can read is a key anyone can spend.`})}),`\n`,_jsx(Heading,{level:`2`,id:`key-format`,children:`Key format`}),`\n`,_jsxs(_components.p,{children:[`A key is the `,_jsx(_components.code,{children:`gck_live_`}),` prefix plus 32 random bytes. There is one kind of key: it does the work and bills for it. Spend is bounded by the project’s monthly budget cap, not by the credential.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`gck_test_`}),` keys are retired. They ran the real request against the real upstream and were simply not invoiced, which made “test” a promise of a sandbox that never existed. Existing ones no longer authenticate — mint a replacement in the console.`]})}),`\n`,_jsx(_components.p,{children:`We store only a SHA-256 hash of the key. The plaintext is returned once, at mint time, and cannot be recovered — if it is lost, revoke it and mint another. The console shows a key by its prefix and last four characters, which is enough to tell two keys apart and useless to anyone who steals the display.`}),`\n`,_jsx(Heading,{level:`2`,id:`scopes`,children:`Scopes`}),`\n`,_jsxs(_components.p,{children:[`A scope names exactly one operation a key may perform, in the form `,_jsx(_components.code,{children:`service:action`}),`. A key carries the scopes you grant it and nothing else.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`scrape:run`})}),_jsx(_components.td,{children:`Call POST /v1/scrape — render a page and extract structured data from it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`scrape:fetch`})}),_jsx(_components.td,{children:`Call POST /v1/fetch — render a page and return its HTML and metadata.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`toolsapi:read`})}),_jsx(_components.td,{children:`Search and inspect the tool catalogue — POST /v1/toolsapi/discover, POST /v1/toolsapi/inspect, and polling a run with GET /v1/toolsapi/runs/{runId}. Reads only; it cannot execute anything.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`toolsapi:run`})}),_jsx(_components.td,{children:`Call POST /v1/toolsapi/run — execute a tool and pay its upstream cost. This is the scope that spends: grant it separately from toolsapi:read.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tasks:run`})}),_jsx(_components.td,{children:`Call POST /v1/superagent — start a research task. This is the scope that spends, and it commits to work that continues after the request returns.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tasks:read`})}),_jsx(_components.td,{children:`Poll a task with GET /v1/superagent/{taskId} and stop one with DELETE. Neither is billed, so a worker that only collects results needs nothing more than this.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`inference:run`})}),_jsx(_components.td,{children:`Call POST /v1/inference — one model call, billed per input and output token at the capability you asked for. Nothing implies it: it is the only scope whose cost per call is set by how much you send rather than by the operation, so a key that may run a task must still be granted this to call the model directly.`})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Scopes are flat: there are no wildcards, and `,_jsx(_components.code,{children:`scrape:run`}),` does `,_jsx(_components.strong,{children:`not`}),` imply `,_jsx(_components.code,{children:`scrape:fetch`}),`. They are separately priced operations, so they are separately granted — a key minted for a cheap fetch loop must not be able to spend four times the rate on extractions.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`two-checks`,children:`Two independent checks`}),`\n`,_jsx(_components.p,{children:`A request is authorized by two separate facts, and both must hold. They fail with different codes so you can tell them apart without guessing.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Check`}),_jsx(_components.th,{children:`Failure`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The key carries the scope for this operation`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`403 forbidden`})}),_jsx(_components.td,{children:`Mint a key with the scope, or grant it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The project has this API enabled`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`403 api_not_enabled`})}),_jsx(_components.td,{children:`Turn the API on for the project in the console.`})]})]})]}),`\n`,_jsx(_components.p,{children:`Keeping them separate is what stops each from silently widening the other: enabling an API must not grant new power to keys that already exist, and a broadly scoped key must not reach an API the project never turned on.`}),`\n`,_jsx(Heading,{level:`2`,id:`rotation`,children:`Rotation and revocation`}),`\n`,_jsx(_components.p,{children:`Revocation takes effect on the next request — there is no cache of authorization decisions to wait out. To rotate without downtime, mint the new key, deploy it, then revoke the old one. A key can also be given an expiry at mint time, which is the better default for anything handed to a third party.`})]})}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":"Authentication","description":"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.","canonical":"https://docs.cloud.gomry.com/authentication","href":"/authentication"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Sending a key","slug":"sending-a-key","depth":2,"children":[]},{"title":"Key format","slug":"key-format","depth":2,"children":[]},{"title":"Scopes","slug":"scopes","depth":2,"children":[]},{"title":"Two independent checks","slug":"two-checks","depth":2,"children":[]},{"title":"Rotation and revocation","slug":"rotation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"gomry-cloud-services","siteName":"Gomry Cloud docs","title":"Authentication - Gomry Cloud docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-22T15:02:38.654Z","originalFileLocation":"authentication.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=\"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Gomry Cloud docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Authentication - Gomry Cloud docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Gomry Cloud docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cloud.gomry.com/authentication\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://gomry-cloud-services.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Authentication\u0026amp;description=How+Gomry+Cloud+API+keys+work%3A+the+gck_live_+format%2C+scopes+per+operation%2C+and+the+two+independent+checks+every+request+passes.\u0026amp;theme=d93bcc3fbbc74075a21be958\u0026amp;signature=36a5a847be230054db972337768dc1ddb67a397de979bafebd6c875ef799474f\">\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=\"Authentication - Gomry Cloud docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://gomry-cloud-services.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Authentication\u0026amp;description=How+Gomry+Cloud+API+keys+work%3A+the+gck_live_+format%2C+scopes+per+operation%2C+and+the+two+independent+checks+every+request+passes.\u0026amp;theme=d93bcc3fbbc74075a21be958\u0026amp;signature=36a5a847be230054db972337768dc1ddb67a397de979bafebd6c875ef799474f\">\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/gomry-cloud-services/t1Lhh4WUhbV71E5Z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Gomry Cloud docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#242424\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cloud.gomry.com/authentication\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/authentication.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cloud.gomry.com/#organization\",\"name\":\"Gomry Cloud docs\",\"url\":\"https://docs.cloud.gomry.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/gomry-cloud-services/SacFyndYg2F1rf9S/assets/logo-light.png?fit=max\u0026auto=format\u0026n=SacFyndYg2F1rf9S\u0026q=85\u0026s=42e226ab6766876a3efb67ba99d3bbad\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cloud.gomry.com#website\",\"name\":\"Gomry Cloud docs\",\"url\":\"https://docs.cloud.gomry.com\",\"publisher\":{\"@id\":\"https://docs.cloud.gomry.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cloud.gomry.com/authentication#webpage\",\"url\":\"https://docs.cloud.gomry.com/authentication\",\"name\":\"Authentication\",\"description\":\"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\",\"dateModified\":\"2026-09-22T15:02:38.654Z\",\"isPartOf\":{\"@id\":\"https://docs.cloud.gomry.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cloud.gomry.com/authentication#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cloud.gomry.com/authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.cloud.gomry.com/quickstart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authentication\",\"item\":\"https://docs.cloud.gomry.com/authentication\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cloud.gomry.com/authentication#article\",\"headline\":\"Authentication\",\"name\":\"Authentication\",\"description\":\"How Gomry Cloud API keys work: the gck_live_ format, scopes per operation, and the two independent checks every request passes.\",\"url\":\"https://docs.cloud.gomry.com/authentication\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cloud.gomry.com/authentication#webpage\"},\"dateModified\":\"2026-09-22T15:02:38.654Z\",\"publisher\":{\"@id\":\"https://docs.cloud.gomry.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cloud.gomry.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Gomry Cloud docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Gomry Cloud docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/authentication.md","siteName":"Gomry Cloud docs","nav":{"global":{"anchors":[{"anchor":"Console","icon":"square-terminal","href":"https://cloud.gomry.com/sign-in"},{"anchor":"Status","icon":"signal","href":"https://gomry.com/status"},{"anchor":"Support","icon":"envelope","href":"https://cloud.gomry.com/contact"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Overview","pages":[{"title":"Documentation","href":""}]},{"group":"Guides","pages":[{"title":"Quickstart","description":"Create a project, enable an API, mint a key and make your first billable Gomry Cloud request in about two minutes.","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"title":"Errors","description":"Every error code the Gomry Cloud API returns, what causes it, whether it is retryable, and whether the failed request was billed.","href":"/errors"},{"title":"Rate limits","href":"/rate-limits"},{"title":"Versioning and deprecation","href":"/versioning"},{"title":"Billing","href":"/billing"}]},{"group":"Billing","pages":[{"title":"Pricing","href":"/pricing"}]}]},{"tab":"Services","pages":[{"title":"Services","href":"/services"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/scrape"}]}]},"basePath":"","title":"Authentication - Gomry Cloud docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}