API keys are 40-character strings with a prefix that indicates how
they were issued:
fly_live_<40 chars> Production credentialsfly_test_<40 chars> Staging / dev credentials
fly_live_ keys are production keys; fly_test_ keys are staging/dev
keys. The environment binding is server-side: your key is scoped to
the DeveloperApp and environment it was minted under. Use the key you
received in your onboarding email for the environment you were
provisioned for.
From the kitchen - Discovery routes use the API key. Member-acting
routes use OAuth. The two do not substitute for each other.
Chef’s warning - API keys are server-side only. Every call
that carries an API key must originate from your backend, never
from a browser, mobile client, or any code shipped to users. Don’t
embed them in client-side bundles, public repos, screenshots, or
environment variables checked into source. A key visible in a
client is a key you have to assume is compromised. Treat them as
you would a password, and route Discovery calls through your own
backend rather than calling the API directly from the client.
Don’t reuse a key across environments. Your fly_test_ staging key
authenticates against the staging API; your fly_live_ production key
authenticates against the production API. They’re issued separately and
aren’t substitutes for each other.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Flynet Docs","colors":{"primary":"#0E0E0E","light":"#FFFFFF","dark":"#0E0E0E"},"logo":{"light":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/light.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=738e188897c678733a8ab596e302149a","dark":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/dark.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=219771c4a811c814269511fdc59e0634"},"favicon":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/favicon.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=98693d2c8a56a762e339c3811acb84e7","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","typescript"]},"mdx":{"server":"https://api.staging.blackbird.xyz/flynet/v1"}},"navbar":{"links":[{"href":"mailto:support@blackbird.xyz","label":"Support"}],"primary":{"type":"button","label":"Blackbird","href":"https://www.blackbird.xyz/"}},"footer":{"socials":{"x":"https://x.com/blackbird_xyz","instagram":"https://www.instagram.com/blackbird_xyz","linkedin":"https://www.linkedin.com/company/blackbirdlabsinc"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Build","icon":"hammer","href":"https://flynet.org/build"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"flynet-dev-portal","hasAudioNarration":false,"actualSubdomain":"flynet-dev-portal","customDomains":["docs.flynet.org"],"gitSource":{"type":"github","owner":"blackbird-labs-inc","repo":"flynet","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad8efaa67c9fc8d68603646","collectionId":"1ca46f76-0be1-40f9-bacc-1c99638b1f4a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad8efaa67c9fc8d68603646"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad8efaa67c9fc8d68603646","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API Reference","count":26},{"language":"default","tag":"Cookbook","count":16},{"language":"default","tag":"Concepts","count":9},{"language":"default","tag":"Quickstart","count":7},{"language":"default","tag":"Payments","count":6},{"language":"default","tag":"Mains","count":6},{"language":"default","tag":"Resources","count":6},{"language":"default","tag":"Specials","count":5},{"language":"default","tag":"Users","count":5},{"language":"default","tag":"Build with AI","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"concepts/api-keys","slug":"/concepts/api-keys","pageMetadata":{"title":"API keys","description":"Server-to-server credential for restaurant and location discovery routes.","href":"/concepts/api-keys"},"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: \"Server-to-server credential for restaurant and location discovery routes.\"\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,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`API keys authenticate your `,_jsx(_components.strong,{children:`app`}),`, not a member. Use them on\nrestaurant and location Discovery routes. They are the only\ncredential those routes accept.`]}),`\n`,_jsx(Heading,{level:`2`,id:`format`,children:`Format`}),`\n`,_jsx(_components.p,{children:`API keys are 40-character strings with a prefix that indicates how\nthey were issued:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`fly_live_\u003c40 chars> Production credentials`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`fly_test_\u003c40 chars> Staging / dev credentials`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`fly_live_`}),` keys are production keys; `,_jsx(_components.code,{children:`fly_test_`}),` keys are staging/dev\nkeys. The `,_jsx(_components.strong,{children:`environment binding is server-side`}),`: your key is scoped to\nthe DeveloperApp and environment it was minted under. Use the key you\nreceived in your onboarding email for the environment you were\nprovisioned for.`]}),`\n`,_jsx(Heading,{level:`2`,id:`header`,children:`Header`}),`\n`,_jsxs(_components.p,{children:[`Send the key in `,_jsx(_components.code,{children:`X-API-Key`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,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:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"X-API-Key: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.staging.blackbird.xyz/flynet/v1/restaurants`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`what-api-keys-cover`,children:`What API keys cover`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Route`}),_jsx(_components.th,{children:`API key`}),_jsx(_components.th,{children:`OAuth bearer`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/restaurants`}),` and `,_jsx(_components.code,{children:`/restaurants/{id}`})]}),_jsx(_components.td,{children:`Required`}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/restaurants/{id}/locations`})}),_jsx(_components.td,{children:`Required`}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/locations`}),` and `,_jsx(_components.code,{children:`/locations/{id}`})]}),_jsx(_components.td,{children:`Required`}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/locations/{id}/open_hours`})}),_jsx(_components.td,{children:`Required`}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/check_ins`}),` (venue feed) and `,_jsx(_components.code,{children:`/check_ins/{id}`})]}),_jsxs(_components.td,{children:[`Required (key minted with `,_jsx(_components.code,{children:`read:checkins`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/app`})}),_jsxs(_components.td,{children:[`Required (`,_jsx(_components.code,{children:`read:app`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/balance`})}),_jsxs(_components.td,{children:[`Required (`,_jsx(_components.code,{children:`read:balance`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/issue_reward`})}),_jsxs(_components.td,{children:[`Required (`,_jsx(_components.code,{children:`write:rewards`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/challenges`})}),_jsxs(_components.td,{children:[`Required (`,_jsx(_components.code,{children:`read:restaurant_challenges`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/specials`})}),_jsxs(_components.td,{children:[`Required (`,_jsx(_components.code,{children:`read:restaurant_specials`}),`)`]}),_jsx(_components.td,{children:`Returns 401 (empty body)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/users/me/*`}),`, `,_jsx(_components.code,{children:`/payment_intents/*`})]}),_jsx(_components.td,{children:`Returns 401 (empty body)`}),_jsx(_components.td,{children:`Required`})]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`From the kitchen`}),` - Discovery routes use the API key. Member-acting\nroutes use OAuth. The two do not substitute for each other.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Chef’s warning`}),` - API keys are `,_jsx(_components.strong,{children:`server-side only`}),`. Every call\nthat carries an API key must originate from your backend, never\nfrom a browser, mobile client, or any code shipped to users. Don’t\nembed them in client-side bundles, public repos, screenshots, or\nenvironment variables checked into source. A key visible in a\nclient is a key you have to assume is compromised. Treat them as\nyou would a password, and route Discovery calls through your own\nbackend rather than calling the API directly from the client.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`if-a-key-leaks`,children:`If a key leaks`}),`\n`,_jsx(_components.p,{children:`Contact Blackbird support to revoke and issue a new key. Old keys\nstop working immediately on revocation.`}),`\n`,_jsx(Heading,{level:`2`,id:`mixing-environments`,children:`Mixing environments`}),`\n`,_jsxs(_components.p,{children:[`Don’t reuse a key across environments. Your `,_jsx(_components.code,{children:`fly_test_`}),` staging key\nauthenticates against the staging API; your `,_jsx(_components.code,{children:`fly_live_`}),` production key\nauthenticates against the production API. They’re issued separately and\naren’t substitutes for each other.`]})]})}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":"API keys","description":"Server-to-server credential for restaurant and location discovery routes.","href":"/concepts/api-keys"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Format","slug":"format","depth":2,"children":[]},{"title":"Header","slug":"header","depth":2,"children":[]},{"title":"What API keys cover","slug":"what-api-keys-cover","depth":2,"children":[]},{"title":"If a key leaks","slug":"if-a-key-leaks","depth":2,"children":[]},{"title":"Mixing environments","slug":"mixing-environments","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"flynet-dev-portal","siteName":"Flynet Docs","title":"API keys - Flynet Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-24T01:47:59.947Z","originalFileLocation":"concepts/api-keys.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=\"Server-to-server credential for restaurant and location discovery routes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Flynet 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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"API keys - Flynet Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Server-to-server credential for restaurant and location discovery routes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Flynet Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.flynet.org/concepts/api-keys\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://flynet-dev-portal.mintlify.app/_mintlify/api/og/v2?division=+\u0026amp;title=API+keys\u0026amp;description=Server-to-server+credential+for+restaurant+and+location+discovery+routes.\u0026amp;theme=240223a0989a7b68c7879940\u0026amp;signature=38e76de58fa421049af304b923e8a730de7382ec783593fdcaa8790ffb8907c2\">\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=\"API keys - Flynet Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Server-to-server credential for restaurant and location discovery routes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://flynet-dev-portal.mintlify.app/_mintlify/api/og/v2?division=+\u0026amp;title=API+keys\u0026amp;description=Server-to-server+credential+for+restaurant+and+location+discovery+routes.\u0026amp;theme=240223a0989a7b68c7879940\u0026amp;signature=38e76de58fa421049af304b923e8a730de7382ec783593fdcaa8790ffb8907c2\">\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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Flynet Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E0E0E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.flynet.org/concepts/api-keys\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/api-keys.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.flynet.org/#organization\",\"name\":\"Flynet Docs\",\"url\":\"https://docs.flynet.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/light.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=738e188897c678733a8ab596e302149a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.flynet.org#website\",\"name\":\"Flynet Docs\",\"url\":\"https://docs.flynet.org\",\"publisher\":{\"@id\":\"https://docs.flynet.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.flynet.org/concepts/api-keys#webpage\",\"url\":\"https://docs.flynet.org/concepts/api-keys\",\"name\":\"API keys\",\"description\":\"Server-to-server credential for restaurant and location discovery routes.\",\"dateModified\":\"2026-06-24T01:47:59.947Z\",\"isPartOf\":{\"@id\":\"https://docs.flynet.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.flynet.org/concepts/api-keys#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.flynet.org/concepts/api-keys#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\" \",\"item\":\"https://docs.flynet.org/concepts/authentication\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API keys\",\"item\":\"https://docs.flynet.org/concepts/api-keys\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.flynet.org/concepts/api-keys#article\",\"headline\":\"API keys\",\"name\":\"API keys\",\"description\":\"Server-to-server credential for restaurant and location discovery routes.\",\"url\":\"https://docs.flynet.org/concepts/api-keys\",\"mainEntityOfPage\":{\"@id\":\"https://docs.flynet.org/concepts/api-keys#webpage\"},\"dateModified\":\"2026-06-24T01:47:59.947Z\",\"publisher\":{\"@id\":\"https://docs.flynet.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.flynet.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Flynet Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Flynet Docs","nav":{"global":{"anchors":[{"anchor":"Build","icon":"hammer","href":"https://flynet.org/build"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"Quickstart","pages":[{"title":"Quickstart","href":"/getting-started"}]},{"tab":"Concepts","groups":[{"group":" ","pages":[{"title":"Authentication","href":"/concepts/authentication"},{"title":"OAuth","description":"OAuth 2.0 + PKCE for acting on behalf of Blackbird members. About 10 minutes.","href":"/concepts/oauth"},{"title":"API keys","href":"/concepts/api-keys"},{"title":"TypeScript client","description":"A single typed file that handles both auth schemes and the API's error envelopes.","href":"/concepts/typescript-client"},{"title":"Data model","href":"/concepts/data-model"},{"title":"Money + tokens","href":"/concepts/money-and-tokens"},{"title":"Payments","href":"/concepts/payments"},{"title":"Pagination + errors","href":"/concepts/pagination-errors"},{"title":"Environments","href":"/concepts/environments"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Cookbook","pages":[{"title":"Cookbook","href":"/recipes"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/resources/changelog"}]}]},"title":"API keys - Flynet Docs","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}