Two ways a device proves who it is: a bearer API key, or a client certificate.
Every request to the Device API carries a device credential, except the two health probes. The credential identifies one device. Devices are claimed and keys are issued in the app.
The key is issued per device in the app and shown once. Issuing a new key revokes the previous one immediately. Keys are opaque secrets, not tokens you can decode.
Client Certificate
A device behind a TLS-terminating proxy can present a client certificate instead of a key. The proxy verifies the certificate and forwards its common name to the API as X-Client-Cert-CN, in the form device:<device-uuid>. The device never sets this header itself. Where both a certificate and a key are present, the certificate wins.
Failed Authentication
A missing or invalid credential returns 401 with a reason.
A 401 does not clear on retry. The key was revoked or rotated. Issue a new one in the app and update the device.
One Credential Per Device
Claim each physical sensor as its own device and give it its own key. A shared key removes per-device revocation and per-device rate limiting, and one lost key then exposes every device that used it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AgriHub360","description":"AgriHub360 documentation: what each feature does on the farm, the Sensor and Hub, the Device API, and the science behind every model.1. AgriHub360 documentation: what each feature does on the farm, the Sensor and Hub, the Device API, and the science behind every model.","colors":{"primary":"#146134","light":"#1F9A4D","dark":"#146134"},"logo":{"light":"https://mintcdn.com/agrihub360/wfAnTqlaZU94FIHH/logo/light.svg?fit=max\u0026auto=format\u0026n=wfAnTqlaZU94FIHH\u0026q=85\u0026s=cef992e338466069816ce0a6ae768d72","dark":"https://mintcdn.com/agrihub360/wfAnTqlaZU94FIHH/logo/dark.svg?fit=max\u0026auto=format\u0026n=wfAnTqlaZU94FIHH\u0026q=85\u0026s=9d9363bc6480f989f05d66d92458fc0e","href":"https://www.agrihub360.com"},"favicon":"https://mintcdn.com/agrihub360/wfAnTqlaZU94FIHH/favicon.svg?fit=max\u0026auto=format\u0026n=wfAnTqlaZU94FIHH\u0026q=85\u0026s=728cf3555768d236c7e49d6844c48c97","navbar":{"links":[{"href":"https://www.agrihub360.com/support","label":"Support"}],"primary":{"type":"button","label":"Open the app","href":"https://app.agrihub360.com/login"}},"fonts":{"family":"Inter"},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"agrihub360","hasAudioNarration":false,"actualSubdomain":"agrihub360","customDomains":["docs.agrihub360.com"],"gitSource":{"type":"github","owner":"ereynalabs","repo":"agrihub360-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ab144efa6f4f373365ca742","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"Guides","count":102},{"language":"default","tag":"How Do I","count":42},{"language":"default","tag":"Devices","count":12},{"language":"default","tag":"Field Monitoring","count":11},{"language":"default","tag":"Farm Management","count":10},{"language":"default","tag":"Models","count":10},{"language":"default","tag":"Decision Windows","count":9},{"language":"default","tag":"Map","count":9},{"language":"default","tag":"Compliance \u0026 Records","count":8},{"language":"default","tag":"API Reference","count":7}]},"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":[{"filePath":"style.css","content":"#content-area p,#content-area li,.prose p,.prose li{text-align:justify;text-justify:inter-word;hyphens:auto;-webkit-hyphens:auto}#content-area figcaption,#content-area table p,.prose figcaption,.prose table p{text-align:left}#content-area img,.prose img{display:block;margin-left:auto;margin-right:auto}#content-area .mermaid,#content-area .mermaid svg,.prose .mermaid,.prose .mermaid svg{display:block;margin-left:auto;margin-right:auto}#content-area figure,.prose figure{margin-top:2rem;margin-bottom:2.5rem}#content-area figure figcaption,.prose figure figcaption{margin-top:0.75rem}#content-area .refs,.prose .refs{font-size:0.8rem;line-height:1.5;color:var(--gray-600, #4b5563)}#content-area .refs p,#content-area .refs li,.prose .refs p,.prose .refs li{font-size:inherit;text-align:left;margin-top:0.25rem;margin-bottom:0.25rem}#content-area .refs a,.prose .refs a{font-weight:500}img[src^=\"/images/screens/\"]{border:9px solid #1A1714;border-radius:30px;box-shadow:0 10px 30px rgba(26, 23, 20, 0.18), 0 0 0 1px rgba(26, 23, 20, 0.35);background:#1A1714}"}],"page":{"pagePath":"api-reference/authentication","slug":"/api-reference/authentication","pageMetadata":{"title":"Authentication","description":"Two ways a device proves who it is: a bearer API key, or a client certificate.","href":"/api-reference/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: \"Two ways a device proves who it is: a bearer API key, or a client certificate.\"\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`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Every request to the Device API carries a device credential, except the two `,_jsx(_components.a,{href:`/api-reference/errors-and-limits#health-probes`,children:`health probes`}),`. The credential identifies one device. Devices are claimed and keys are issued in the app.`]}),`\n`,_jsx(Heading,{level:`2`,id:`bearer-api-key`,children:`Bearer API Key`}),`\n`,_jsxs(_components.p,{children:[`Send the key in the `,_jsx(_components.code,{children:`Authorization`}),` header.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` -X POST https://devices.agrihub360.example/api/metric-values \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` -H `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Authorization: Bearer $DEVICE_API_KEY\"`}),_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:` -H `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Content-Type: application/json'`}),_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:` -d `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{\"device_id\":\"\u003cdevice-uuid>\",\"metric_id\":220,\"value\":42.5}'`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The key is issued per device in the app and shown once. Issuing a new key revokes the previous one immediately. Keys are opaque secrets, not tokens you can decode.`}),`\n`,_jsx(Heading,{level:`2`,id:`client-certificate`,children:`Client Certificate`}),`\n`,_jsxs(_components.p,{children:[`A device behind a TLS-terminating proxy can present a client certificate instead of a key. The proxy verifies the certificate and forwards its common name to the API as `,_jsx(_components.code,{children:`X-Client-Cert-CN`}),`, in the form `,_jsx(_components.code,{children:`device:\u003cdevice-uuid>`}),`. The device never sets this header itself. Where both a certificate and a key are present, the certificate wins.`]}),`\n`,_jsx(Heading,{level:`2`,id:`failed-authentication`,children:`Failed Authentication`}),`\n`,_jsxs(_components.p,{children:[`A missing or invalid credential returns `,_jsx(_components.code,{children:`401`}),` with a reason.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"unauthorized\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"reason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"invalid device credential\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`401`}),` does not clear on retry. The key was revoked or rotated. Issue a new one in the app and update the device.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`one-credential-per-device`,children:`One Credential Per Device`}),`\n`,_jsx(_components.p,{children:`Claim each physical sensor as its own device and give it its own key. A shared key removes per-device revocation and per-device rate limiting, and one lost key then exposes every device that used it.`})]})}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":"Two ways a device proves who it is: a bearer API key, or a client certificate.","href":"/api-reference/authentication"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Bearer API Key","slug":"bearer-api-key","depth":2,"children":[]},{"title":"Client Certificate","slug":"client-certificate","depth":2,"children":[]},{"title":"Failed Authentication","slug":"failed-authentication","depth":2,"children":[]},{"title":"One Credential Per Device","slug":"one-credential-per-device","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"agrihub360","siteName":"AgriHub360","title":"Authentication - AgriHub360","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-16T15:18:57.788Z","originalFileLocation":"api-reference/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=\"Two ways a device proves who it is: a bearer API key, or a client certificate.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AgriHub360\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_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/agrihub360/YYgrarxlX8kO7l_F/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Authentication - AgriHub360\">\u003cmeta data-mint-head property=\"og:description\" content=\"Two ways a device proves who it is: a bearer API key, or a client certificate.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AgriHub360\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.agrihub360.com/api-reference/authentication\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://agrihub360.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Authentication\u0026amp;description=Two+ways+a+device+proves+who+it+is%3A+a+bearer+API+key%2C+or+a+client+certificate.\u0026amp;theme=ab602d2acfc87f7680331717\u0026amp;signature=2e017c99d3d63577097628f17158daa34831ebc1cd4605d037d5c8064da4efef\">\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 - AgriHub360\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Two ways a device proves who it is: a bearer API key, or a client certificate.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://agrihub360.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Authentication\u0026amp;description=Two+ways+a+device+proves+who+it+is%3A+a+bearer+API+key%2C+or+a+client+certificate.\u0026amp;theme=ab602d2acfc87f7680331717\u0026amp;signature=2e017c99d3d63577097628f17158daa34831ebc1cd4605d037d5c8064da4efef\">\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/agrihub360/YYgrarxlX8kO7l_F/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AgriHub360\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#146134\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.agrihub360.com/api-reference/authentication\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/authentication.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.agrihub360.com/#organization\",\"name\":\"AgriHub360\",\"url\":\"https://docs.agrihub360.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/agrihub360/wfAnTqlaZU94FIHH/logo/light.svg?fit=max\u0026auto=format\u0026n=wfAnTqlaZU94FIHH\u0026q=85\u0026s=cef992e338466069816ce0a6ae768d72\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.agrihub360.com#website\",\"name\":\"AgriHub360\",\"url\":\"https://docs.agrihub360.com\",\"publisher\":{\"@id\":\"https://docs.agrihub360.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.agrihub360.com/api-reference/authentication#webpage\",\"url\":\"https://docs.agrihub360.com/api-reference/authentication\",\"name\":\"Authentication\",\"description\":\"Two ways a device proves who it is: a bearer API key, or a client certificate.\",\"dateModified\":\"2026-09-16T15:18:57.788Z\",\"isPartOf\":{\"@id\":\"https://docs.agrihub360.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.agrihub360.com/api-reference/authentication#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.agrihub360.com/api-reference/authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting Started\",\"item\":\"https://docs.agrihub360.com/quickstart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authentication\",\"item\":\"https://docs.agrihub360.com/api-reference/authentication\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.agrihub360.com/api-reference/authentication#article\",\"headline\":\"Authentication\",\"name\":\"Authentication\",\"description\":\"Two ways a device proves who it is: a bearer API key, or a client certificate.\",\"url\":\"https://docs.agrihub360.com/api-reference/authentication\",\"mainEntityOfPage\":{\"@id\":\"https://docs.agrihub360.com/api-reference/authentication#webpage\"},\"dateModified\":\"2026-09-16T15:18:57.788Z\",\"publisher\":{\"@id\":\"https://docs.agrihub360.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.agrihub360.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AgriHub360\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"AgriHub360\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/authentication.md","siteName":"AgriHub360","nav":{"global":null,"tabs":[{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":""}]},{"tab":"Devices","icon":"microchip","pages":[{"title":"Devices","href":"/devices/overview"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Getting Started","pages":[{"title":"Quickstart","description":"Send your first reading to AgriHub360 with curl.","href":"/quickstart"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"Errors and Limits","description":"Status codes, the rate limit, the rules every reading follows, and the health probes.","href":"/api-reference/errors-and-limits"}]},{"group":"Telemetry API","pages":[{"title":"Post a reading","deprecated":null,"version":null,"openapi":"/api-reference/device-api.yaml post /api/metric-values","href":"/api-reference/telemetry/post-a-reading"},{"title":"Live Updates","asyncapi":"api-reference/api-reference/messagebus.yaml metricValues","href":"/api-reference/live-updates"}]},{"group":"Platform Health","pages":[{"title":"Liveness probe","deprecated":null,"version":null,"openapi":"/api-reference/device-api.yaml get /healthz","href":"/api-reference/health/liveness-probe"},{"title":"Readiness probe","deprecated":null,"version":null,"openapi":"/api-reference/device-api.yaml get /readyz","href":"/api-reference/health/readiness-probe"}]}]},{"tab":"Models","icon":"chart-line","pages":[{"title":"Models","href":"/models/overview"}]}]},"basePath":"","title":"Authentication - AgriHub360","buildId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","deploymentId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","dynamics":[],"chunks":[]}