Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.
Everything the public API does authenticates with one credential: an API key beginning
with cdojo_. Keys are created in the app, never through the API.
Prerequisites
The Integrate plan or above. The free tier is for interactive evaluation in the browser; it
cannot create API keys. See Plans and pricing.
Sign in as an Admin or Owner of the organisation that will own the key.
Choose Create key and give it a name that says where it will be used, such as
github-actions-roaming-ci. The name is how you will recognise it at revocation time.
Copy the key.
The plaintext key is shown once, at creation. It is not retrievable afterwards:
the app lists only the key’s name, prefix and metadata. If you lose it, revoke it and
create a new one.
Store it like a secret, because it is one
Put the key straight into a secret manager (GitHub Actions secrets, GitLab CI variables,
Vault, AWS Secrets Manager) and expose it to jobs as an environment variable:
export DOJO_KEY="(paste from your secret manager, not from a file in the repo)"
Then reference only the variable in scripts:Operation reference: GET /usage.
Never commit a key, paste it into a ticket, or hardcode it in a script.
Never echo the key or pass it as a command-line argument that lands in shell history
or CI logs. Read it from the environment.
Give each pipeline its own key, so revoking one does not break the others.
Rotate and revoke
Rotation is create-then-revoke:
Create a new key in Settings, then Credentials.
Update the secret in your CI store.
Revoke the old key from the same page.
Revocation is immediate: requests with a revoked key start returning 401. Revoke a key
the moment you suspect it leaked; creating its replacement takes seconds.Each organisation shares a cap of 10 active keys across its members. The cap is the
same on every plan, and revoking one frees its slot at once. Your organisation’s current count is in
GET /api/v1/usage alongside the cap.
There is no key-management API, deliberately
Creating, listing and revoking keys requires your signed-in browser identity. A
cdojo_ key cannot mint another key, list your keys, or revoke one. This keeps a leaked
CI key from quietly granting itself successors.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ChargerDojo","colors":{"primary":"#2e7d32","light":"#4caf50","dark":"#1b5e20"},"navbar":{"links":[{"href":"mailto:support@chargerdojo.com","label":"Support"}],"primary":{"type":"button","label":"Open the app","href":"https://chargerdojo.com"}},"footer":{"socials":{"website":"https://chargerdojo.com"}},"seo":{"metatags":{"og:image:alt":"ChargerDojo documentation with the page title and summary.","twitter:image:alt":"ChargerDojo documentation with the page title and summary."},"organization":{"id":"https://chargerdojo.com/#organization","name":"ChargerDojo","url":"https://chargerdojo.com","logo":"https://chargerdojo.com/icon-512x512.png","sameAs":["https://github.com/chargerdojo","https://www.linkedin.com/company/chargerdojo/"]}},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chargerdojo","hasAudioNarration":false,"actualSubdomain":"chargerdojo","customDomains":["docs.chargerdojo.com"],"gitSource":{"type":"github","owner":"chargerdojo","repo":"dojo","deployBranch":"main","contentDirectory":"docs/public","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af6f8c036896a78e7f545e7","clientVersion":"0.0.4138","searchFilterCounts":[{"language":"default","tag":"API reference","count":25},{"language":"default","tag":"Guides","count":16},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Get started","count":7},{"language":"default","tag":"Connections","count":7},{"language":"default","tag":"Reports","count":6},{"language":"default","tag":"Testing","count":3},{"language":"default","tag":"Changelog","count":1},{"language":"default","tag":"Usage","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}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guide/create-an-api-key","slug":"/guide/create-an-api-key","pageMetadata":{"title":"Create an API key","description":"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.","href":"/guide/create-an-api-key"},"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: \"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._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:[`Everything the public API does authenticates with one credential: an API key beginning\nwith `,_jsx(_components.code,{children:`cdojo_`}),`. Keys are created in the app, never through the API.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Integrate plan`}),` or above. The free tier is for interactive evaluation in the browser; it\ncannot create API keys. See `,_jsx(_components.a,{href:`/guide/plans`,children:`Plans and pricing`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Sign in as an `,_jsx(_components.strong,{children:`Admin`}),` or `,_jsx(_components.strong,{children:`Owner`}),` of the organisation that will own the key.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-the-key`,children:`Create the key`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Sign in at `,_jsx(_components.a,{href:`https://chargerdojo.com`,children:`chargerdojo.com`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Open the `,_jsx(_components.strong,{children:`Credentials`}),` tab of `,_jsx(_components.a,{href:`https://chargerdojo.com/settings?tab=credentials`,children:`Settings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Choose `,_jsx(_components.strong,{children:`Create key`}),` and give it a name that says where it will be used, such as\n`,_jsx(_components.code,{children:`github-actions-roaming-ci`}),`. The name is how you will recognise it at revocation time.`]}),`\n`,_jsx(_components.li,{children:`Copy the key.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The plaintext key is shown `,_jsx(_components.strong,{children:`once`}),`, at creation. It is not retrievable afterwards:\nthe app lists only the key’s name, prefix and metadata. If you lose it, revoke it and\ncreate a new one.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`store-it-like-a-secret-because-it-is-one`,children:`Store it like a secret, because it is one`}),`\n`,_jsx(_components.p,{children:`Put the key straight into a secret manager (GitHub Actions secrets, GitLab CI variables,\nVault, AWS Secrets Manager) and expose it to jobs as an environment variable:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DOJO_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"(paste from your secret manager, not from a file in the repo)\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then reference only the variable in scripts:`}),`\n`,_jsxs(_components.p,{children:[`Operation reference: `,_jsx(_components.a,{href:`/api-reference/usage/read-the-key-owners-plan-limits-and-current-usage`,children:_jsx(_components.code,{children:`GET /usage`})}),`.`]}),`\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:` -fsS`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://chargerdojo.com/api/v1/usage\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$DOJO_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Rules that prevent the common leaks:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Never commit a key, paste it into a ticket, or hardcode it in a script.`}),`\n`,_jsxs(_components.li,{children:[`Never `,_jsx(_components.code,{children:`echo`}),` the key or pass it as a command-line argument that lands in shell history\nor CI logs. Read it from the environment.`]}),`\n`,_jsx(_components.li,{children:`Give each pipeline its own key, so revoking one does not break the others.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`rotate-and-revoke`,children:`Rotate and revoke`}),`\n`,_jsx(_components.p,{children:`Rotation is create-then-revoke:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create a new key in `,_jsx(_components.strong,{children:`Settings`}),`, then `,_jsx(_components.strong,{children:`Credentials`}),`.`]}),`\n`,_jsx(_components.li,{children:`Update the secret in your CI store.`}),`\n`,_jsx(_components.li,{children:`Revoke the old key from the same page.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Revocation is immediate: requests with a revoked key start returning `,_jsx(_components.code,{children:`401`}),`. Revoke a key\nthe moment you suspect it leaked; creating its replacement takes seconds.`]}),`\n`,_jsxs(_components.p,{children:[`Each organisation shares a cap of `,_jsx(_components.strong,{children:`10 active keys`}),` across its members. The cap is the\nsame on every plan, and revoking one frees its slot at once. Your organisation’s current count is in\n`,_jsx(_components.a,{href:`/api#limits-and-usage`,children:_jsx(_components.code,{children:`GET /api/v1/usage`})}),` alongside the cap.`]}),`\n`,_jsx(Heading,{level:`2`,id:`there-is-no-key-management-api-deliberately`,children:`There is no key-management API, deliberately`}),`\n`,_jsxs(_components.p,{children:[`Creating, listing and revoking keys requires your signed-in browser identity. A\n`,_jsx(_components.code,{children:`cdojo_`}),` key cannot mint another key, list your keys, or revoke one. This keeps a leaked\nCI key from quietly granting itself successors.`]}),`\n`,_jsx(Heading,{level:`2`,id:`next`,children:`Next`}),`\n`,_jsxs(_components.p,{children:[`To fail a GitHub build on a broken OCPI rule, follow the four steps in\n`,_jsx(_components.a,{href:`/guide/run-a-suite#on-github-actions`,children:`On GitHub Actions`}),`. To try the API by hand first, run your\n`,_jsx(_components.a,{href:`/guide/quickstart`,children:`first conformance run from the command line`}),`.`]})]})}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":"Create an API key","description":"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.","href":"/guide/create-an-api-key"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Create the key","slug":"create-the-key","depth":2,"children":[]},{"title":"Store it like a secret, because it is one","slug":"store-it-like-a-secret-because-it-is-one","depth":2,"children":[]},{"title":"Rotate and revoke","slug":"rotate-and-revoke","depth":2,"children":[]},{"title":"There is no key-management API, deliberately","slug":"there-is-no-key-management-api-deliberately","depth":2,"children":[]},{"title":"Next","slug":"next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"chargerdojo","siteName":"ChargerDojo","title":"Create an API key - ChargerDojo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T11:01:32.655Z","originalFileLocation":"guide/create-an-api-key.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=\"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ChargerDojo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/chargerdojo/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/chargerdojo/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/chargerdojo/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/chargerdojo/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an API key - ChargerDojo\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ChargerDojo\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.chargerdojo.com/guide/create-an-api-key\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://chargerdojo.mintlify.site/_mintlify/api/og/v2?division=Get+started\u0026amp;title=Create+an+API+key\u0026amp;description=Create%2C+store%2C+rotate+and+revoke+the+cdojo_+API+key+that+authenticates+every+request+to+the+ChargerDojo+public+API+from+your+scripts+and+CI.\u0026amp;theme=6b21f350b3f8fda8293bb998\u0026amp;signature=7f28486a4b401a896e56e60f22de585bfb2c8d8580a1a9f8d4ca0729ed6102d4\">\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=\"Create an API key - ChargerDojo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://chargerdojo.mintlify.site/_mintlify/api/og/v2?division=Get+started\u0026amp;title=Create+an+API+key\u0026amp;description=Create%2C+store%2C+rotate+and+revoke+the+cdojo_+API+key+that+authenticates+every+request+to+the+ChargerDojo+public+API+from+your+scripts+and+CI.\u0026amp;theme=6b21f350b3f8fda8293bb998\u0026amp;signature=7f28486a4b401a896e56e60f22de585bfb2c8d8580a1a9f8d4ca0729ed6102d4\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/chargerdojo/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ChargerDojo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2e7d32\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"ChargerDojo documentation with the page title and summary.\">\u003cmeta data-mint-head name=\"twitter:image:alt\" content=\"ChargerDojo documentation with the page title and summary.\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.chargerdojo.com/guide/create-an-api-key\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guide/create-an-api-key.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://chargerdojo.com/#organization\",\"name\":\"ChargerDojo\",\"url\":\"https://chargerdojo.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://chargerdojo.com/icon-512x512.png\"},\"sameAs\":[\"https://github.com/chargerdojo\",\"https://www.linkedin.com/company/chargerdojo/\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.chargerdojo.com#website\",\"name\":\"ChargerDojo\",\"url\":\"https://docs.chargerdojo.com\",\"publisher\":{\"@id\":\"https://chargerdojo.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.chargerdojo.com/guide/create-an-api-key#webpage\",\"url\":\"https://docs.chargerdojo.com/guide/create-an-api-key\",\"name\":\"Create an API key\",\"description\":\"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\",\"dateModified\":\"2026-11-03T11:01:32.655Z\",\"isPartOf\":{\"@id\":\"https://docs.chargerdojo.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.chargerdojo.com/guide/create-an-api-key#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.chargerdojo.com/guide/create-an-api-key#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Get started\",\"item\":\"https://docs.chargerdojo.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create an API key\",\"item\":\"https://docs.chargerdojo.com/guide/create-an-api-key\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.chargerdojo.com/guide/create-an-api-key#article\",\"headline\":\"Create an API key\",\"name\":\"Create an API key\",\"description\":\"Create, store, rotate and revoke the cdojo_ API key that authenticates every request to the ChargerDojo public API from your scripts and CI.\",\"url\":\"https://docs.chargerdojo.com/guide/create-an-api-key\",\"mainEntityOfPage\":{\"@id\":\"https://docs.chargerdojo.com/guide/create-an-api-key#webpage\"},\"dateModified\":\"2026-11-03T11:01:32.655Z\",\"publisher\":{\"@id\":\"https://chargerdojo.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.chargerdojo.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ChargerDojo\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"ChargerDojo\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/guide/create-an-api-key.md","siteName":"ChargerDojo","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"API documentation","href":"/index"},{"title":"What you can do without paying","href":"/guide/what-is-free"},{"title":"Plans and pricing","href":"/guide/plans"},{"title":"Connect a coding agent","href":"/guide/connect-a-coding-agent"},{"title":"Quickstart: your first run from the command line","description":"Run a complete OCPI conformance run against the deployed service from the command line with curl, jq and a cdojo_ API key.","href":"/guide/quickstart"},{"title":"Create an API key","href":"/guide/create-an-api-key"},{"title":"API overview","description":"Automate ChargerDojo with an API key: partner endpoints, conformance runs, charging journeys, and the graded reports and usage they produce.","href":"/api/index"}]},{"group":"Guides","pages":[{"title":"Automate with the API","href":"/guide/index"},{"title":"Connect a partner endpoint","href":"/guide/connect-a-partner"},{"title":"Let a partner register with you","href":"/guide/let-a-partner-register"},{"title":"Connect a local endpoint","href":"/guide/connect-a-local-endpoint"},{"title":"Use the connector","href":"/guide/use-the-connector"},{"title":"Run a conformance suite","href":"/guide/run-a-suite"},{"title":"Read your report","href":"/guide/read-your-report"},{"title":"Check a payload","href":"/guide/check-a-payload"},{"title":"Share a report with your partner","href":"/guide/share-a-report"},{"title":"Work with a colleague","href":"/guide/work-with-a-colleague"},{"title":"Run a charging journey","href":"/guide/run-a-charging-journey"},{"title":"Author a custom journey","href":"/guide/author-a-scenario"},{"title":"Test a payment terminal","href":"/guide/test-a-payment-terminal"},{"title":"Test a roaming hub","href":"/guide/test-a-roaming-hub"},{"title":"Glossary","href":"/guide/glossary"},{"title":"Troubleshooting","href":"/guide/troubleshooting"}]},{"group":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"group":"API reference","pages":[{"group":"Connections","pages":[{"title":"List owned connections","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /connections","href":"/api-reference/connections/list-owned-connections"},{"title":"Create a partner endpoint","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /connections","href":"/api-reference/connections/create-a-partner-endpoint"},{"title":"Run the credentials handshake","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /connections/{id}/register","href":"/api-reference/connections/run-the-ocpi-credentials-handshake-for-an-owned-connection"},{"title":"Change test or production","deprecated":null,"version":null,"openapi":"/openapi/public-api.json put /connections/{id}/environment","href":"/api-reference/connections/mark-an-endpoint-as-a-test-system-or-production"},{"title":"Change a connection's address","deprecated":null,"version":null,"openapi":"/openapi/public-api.json put /connections/{id}/address","href":"/api-reference/connections/change-a-connections-address"},{"title":"Read one owned connection","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /connections/{id}","href":"/api-reference/connections/read-one-owned-connection"},{"title":"Read a connection schedule","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /connections/{id}/schedule","href":"/api-reference/connections/read-the-run-schedule-of-an-owned-connection"}]},{"group":"Testing","pages":[{"title":"List runnable conformance suites","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/suites","href":"/api-reference/testing/list-runnable-conformance-suites"},{"title":"Start a conformance run","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/runs","href":"/api-reference/testing/start-a-conformance-run-against-an-owned-connection"},{"title":"Send an OCPI command","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/command","href":"/api-reference/testing/send-one-bounded-ocpi-command-through-an-owned-registered-connection"}]},{"group":"Reports","pages":[{"title":"List run reports","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/runs","href":"/api-reference/reports/list-owned-run-reports-conformance-and-journeys"},{"title":"Read a run report","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/runs/{id}","href":"/api-reference/reports/read-one-owned-report-optionally-long-polling-an-active-run"},{"title":"Delete a report you own","deprecated":null,"version":null,"openapi":"/openapi/public-api.json delete /testing/runs/{id}","href":"/api-reference/reports/delete-a-report-you-own"},{"title":"Compare a run with the last one","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/runs/{id}/regression-diff","href":"/api-reference/reports/compare-an-owned-run-with-its-previous-comparable-run"},{"title":"Share a report","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/runs/{id}/share","href":"/api-reference/reports/issue-a-public-share-token-for-an-owned-report"},{"title":"Revoke a report share token","deprecated":null,"version":null,"openapi":"/openapi/public-api.json delete /testing/runs/{id}/share","href":"/api-reference/reports/revoke-the-public-share-token-of-an-owned-report"}]},{"group":"Usage","pages":[{"title":"Read plan limits and usage","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /usage","href":"/api-reference/usage/read-the-key-owners-plan-limits-and-current-usage"}]},{"group":"Journeys","pages":[{"title":"Browse the journey catalogue","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/journeys","href":"/api-reference/journeys/browse-the-journey-catalogue-for-a-target"},{"title":"Preview a journey plan","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/journeys/preview","href":"/api-reference/journeys/preview-a-journey-plan-before-running-it"},{"title":"Start a journey run","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/journey-runs","href":"/api-reference/journeys/start-a-journey-run-from-a-previewed-plan-idempotent"},{"title":"Read journey run status","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/journey-runs/{id}","href":"/api-reference/journeys/read-a-journey-runs-status-and-recovery-options"},{"title":"Cancel a journey run","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/journey-runs/{id}/cancel","href":"/api-reference/journeys/cancel-a-journey-run-you-own"},{"title":"Apply a server-offered recovery decision","deprecated":null,"version":null,"openapi":"/openapi/public-api.json post /testing/journey-runs/{id}/recovery","href":"/api-reference/journeys/apply-a-server-offered-recovery-decision"},{"title":"Page journey run events","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/journey-runs/{id}/events","href":"/api-reference/journeys/page-a-journey-runs-events-by-sequence"},{"title":"Replay then follow run events over SSE","deprecated":null,"version":null,"openapi":"/openapi/public-api.json get /testing/journey-runs/{id}/stream","href":"/api-reference/journeys/replay-then-follow-run-events-over-sse"}]}]}]},"basePath":"","title":"Create an API key - ChargerDojo","buildId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","deploymentId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","dynamics":[],"chunks":[]}