Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[<index>].<field>). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Spirii","description":"Documentation for the Spirii EV charging platform — product docs, developer guides, and API reference.","colors":{"primary":"#5E6AD2","light":"#9CA3F3","dark":"#4754B5"},"logo":{"light":"https://mintcdn.com/spirii-7457b714/_U1YTeti8CD0DPkl/logo/light.svg?fit=max\u0026auto=format\u0026n=_U1YTeti8CD0DPkl\u0026q=85\u0026s=8a06c70d4c9f9f7e620168a5e1d38ddb","dark":"https://mintcdn.com/spirii-7457b714/_U1YTeti8CD0DPkl/logo/dark.svg?fit=max\u0026auto=format\u0026n=_U1YTeti8CD0DPkl\u0026q=85\u0026s=b65b1a12ffe085367b6de617c6b00613"},"favicon":"https://mintcdn.com/spirii-7457b714/vUO0tTKnBY8vN5if/favicon.png?fit=max\u0026auto=format\u0026n=vUO0tTKnBY8vN5if\u0026q=85\u0026s=fea32db6574b18b20124841bce3a4189","navbar":{"links":[{"href":"https://connect.spirii.com/","label":"Login"},{"href":"https://www.spirii.com/en/contact","label":"Get started"}]},"footer":{"socials":{"linkedin":"https://linkedin.com/company/spirii"}},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"contextual":{"options":["copy","view","assistant","mcp","add-mcp"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"circle-check","href":"https://status.spirii.com/"},{"anchor":"Support","icon":"life-buoy","href":"mailto:support@spirii.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"spirii-7457b714","hasAudioNarration":false,"actualSubdomain":"spirii-7457b714","customDomains":["docs.spirii.com"],"gitSource":{"type":"github","owner":"spiriidk","repo":"public-api-mintlify","deployBranch":"trunk","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1cdc766d9dbd001dad8d3","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":185},{"language":"default","tag":"Spirii API (v2, CPO)","count":79},{"language":"default","tag":"Documentation","count":71},{"language":"default","tag":"EMSP API (BETA)","count":66},{"language":"default","tag":"Capabilities","count":48},{"language":"default","tag":"Tokens","count":40},{"language":"default","tag":"Networks","count":26},{"language":"default","tag":"Token Groups","count":26},{"language":"default","tag":"Legacy API","count":19},{"language":"default","tag":"Webhooks","count":18}],"searchSettings":{"showContentSnippets":true,"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@spirii.com"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"llms-txt-v2","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":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"#navbar a[href=\"https://connect.spirii.com/\"],#navbar a[href=\"https://www.spirii.com/en/contact\"]{border-radius:9999px!important}#navbar a[href=\"https://www.spirii.com/en/contact\"]{background-color:#5e6ad2!important;color:#ffffff!important}#navbar a[href=\"https://www.spirii.com/en/contact\"]:hover{background-color:#4754b5!important;color:#ffffff!important}"}],"page":{"pagePath":"api-reference/tokens/bulk-provision-tokens","slug":"/api-reference/tokens/bulk-provision-tokens","pageMetadata":{"title":"Bulk provision tokens","description":"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in `errors` names the item by index (`body.tokens[\u003cindex>].\u003cfield>`). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own `idempotency_key`. Bulk import is not available yet: a batch that passes validation is answered 501 (`NOT_IMPLEMENTED`), and retrying will not help.\n\nRequires the `emsp:tokens:write` scope.","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/bulk","href":"/api-reference/tokens/bulk-provision-tokens","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in \", _jsx(_components.code, {\n children: \"errors\"\n }), \" names the item by index (\", _jsx(_components.code, {\n children: \"body.tokens[\u003cindex>].\u003cfield>\"\n }), \"). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own \", _jsx(_components.code, {\n children: \"idempotency_key\"\n }), \". Bulk import is not available yet: a batch that passes validation is answered 501 (\", _jsx(_components.code, {\n children: \"NOT_IMPLEMENTED\"\n }), \"), and retrying will not help.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Requires the \", _jsx(_components.code, {\n children: \"emsp:tokens:write\"\n }), \" scope.\"]\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Bulk provision tokens","description":"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in `errors` names the item by index (`body.tokens[\u003cindex>].\u003cfield>`). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own `idempotency_key`. Bulk import is not available yet: a batch that passes validation is answered 501 (`NOT_IMPLEMENTED`), and retrying will not help.\n\nRequires the `emsp:tokens:write` scope.","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/bulk","href":"/api-reference/tokens/bulk-provision-tokens","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in `errors` names the item by index (`body.tokens[\u003cindex>].\u003cfield>`). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own `idempotency_key`. Bulk import is not available yet: a batch that passes validation is answered 501 (`NOT_IMPLEMENTED`), and retrying will not help.\n\nRequires the `emsp:tokens:write` scope.","operationId":"tokens_bulk_import","parameters":[],"requestBody":"c5272ff9-963f-4a05-a23f-8e6bc7214251","responses":{"400":"04603019-2e2f-4325-8efb-6c549d4c19d2","401":"7859e0a2-94bf-4782-a84d-353e8e155214","403":"de899c95-e392-466e-8b26-7411de268020","422":"eaa25677-4662-4077-a075-ce6a7ab469cc","429":"85668a6e-01f6-49a2-95e8-cf0843ccd849","500":"d1468cfb-e366-4175-bd74-92f67ae40646","501":"55ee49f3-2b80-4101-b01b-59ade3dd73dc"},"summary":"Bulk provision tokens","tags":["Tokens"],"method":"post","type":"path","servers":["4ba0a21a-d2a8-441d-bcf1-c5af13086f68"],"security":["0333369f-a130-4c73-a5b7-e7be9382ae13"],"path":"/emsp/v1/tokens/bulk","baseUrlOptions":["https://api.spirii.com"],"title":"Bulk provision tokens","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["RFID","APP_USER","AD_HOC_USER","EMAID","OTHER"],"isRequired":true,"uniqueKey":"tokens.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"uid":{"type":"string","minLength":1,"maxLength":50,"description":"Caller-supplied, unique across every tenant on the platform","isRequired":true,"uniqueKey":"tokens.items.[INDEX].uid","typeLabel":"string"},"contract_id":{"type":"string","minLength":1,"maxLength":50,"description":"Contract or credential identity, e.g. an eMAID","isRequired":true,"uniqueKey":"tokens.items.[INDEX].contract_id","typeLabel":"string"},"issuer":{"type":"string","minLength":1,"maxLength":100,"description":"Issuer name associated with the credential","isRequired":true,"uniqueKey":"tokens.items.[INDEX].issuer","typeLabel":"string"},"whitelist":{"type":"string","enum":["ALWAYS","ALLOWED","ALLOWED_OFFLINE","NEVER"],"description":"OCPI whitelist policy. Required, no default","isRequired":true,"uniqueKey":"tokens.items.[INDEX].whitelist","typeLabel":"enum\u003cstring>"},"idempotency_key":{"type":"string","format":"uuid","description":"Client-generated UUID for this token. Resubmitting an item with the same key in a later batch does not provision it a second time, so a failed batch can be retried as a whole","isRequired":true,"uniqueKey":"tokens.items.[INDEX].idempotency_key","typeLabel":"string\u003cuuid>"},"visual_number":{"type":"string","minLength":1,"maxLength":64,"uniqueKey":"tokens.items.[INDEX].visual_number","typeLabel":"string"},"language":{"type":"string","minLength":2,"maxLength":10,"description":"Preferred language, e.g. en or da","uniqueKey":"tokens.items.[INDEX].language","typeLabel":"string"},"valid_from":{"type":"string","format":"date-time","description":"Defaults to the creation time","uniqueKey":"tokens.items.[INDEX].valid_from","typeLabel":"string\u003cdate-time>"},"valid_until":{"type":"string","format":"date-time","description":"Omit for no expiry","uniqueKey":"tokens.items.[INDEX].valid_until","typeLabel":"string\u003cdate-time>"},"metadata":{"type":"object","additionalProperties":true,"description":"Name/value pairs validated against the tenant's active TOKEN metadata schema. A tenant without a TOKEN metadata schema cannot store metadata: any non-empty map is a 422","uniqueKey":"tokens.items.[INDEX].metadata","typeLabel":"object"},"emsp_group_ids":{"maxItems":100,"description":"Spirii EMSP token groups to join at provision time, each one of the tenant's own group ids","type":"array","items":{"type":"string","format":"uuid","uniqueKey":"tokens.items.[INDEX].emsp_group_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"tokens.items.[INDEX].emsp_group_ids","typeLabel":"string\u003cuuid>[]"},"group_id":{"type":"string","minLength":1,"maxLength":50,"description":"OCPI token group id used in roaming payloads. Unrelated to Spirii EMSP token groups","uniqueKey":"tokens.items.[INDEX].group_id","typeLabel":"string"},"auto_activate":{"type":"boolean","default":false,"description":"Provision straight into ACTIVE. Whitelist distribution to CPO networks starts in the background, and `whitelist_distributed` turns true once it completes","uniqueKey":"tokens.items.[INDEX].auto_activate","typeLabel":"boolean"}},"required":["type","uid","contract_id","issuer","whitelist","idempotency_key"],"uniqueKey":"tokens.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"tokens","typeLabel":"object[]"}},"required":["tokens"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"tokens":[{"uid":"\u003cstring>","contract_id":"\u003cstring>","issuer":"\u003cstring>","idempotency_key":"3c90c3cc-0d44-4b50-8888-8dd25736052a","visual_number":"\u003cstring>","language":"\u003cstring>","valid_from":"2023-11-07T05:31:56Z","valid_until":"2023-11-07T05:31:56Z","metadata":{},"emsp_group_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"group_id":"\u003cstring>","auto_activate":false}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"04603019-2e2f-4325-8efb-6c549d4c19d2":{"description":"The body is not valid JSON (`INVALID_REQUEST_BODY`)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"/errors/validation-failed","description":"Error type URI","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","example":"Validation Failed","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error cause. The Errors section of the API description says when each is returned","enum":["INVALID_REQUEST_BODY","INVALID_PATH_ID","INVALID_IDEMPOTENCY_KEY","INVALID_CURSOR","AUTH_CONTEXT_INVALID","INSUFFICIENT_SCOPE","RESOURCE_NOT_FOUND","UID_ALREADY_REGISTERED","IDEMPOTENCY_KEY_REUSED","REQUEST_IN_PROGRESS","RESOURCE_CONFLICT","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","VALIDATION_FAILED","RATE_LIMIT_EXCEEDED","INTERNAL_SERVER_ERROR","NOT_IMPLEMENTED"],"example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"correlation_id":{"type":"string","format":"uuid","description":"Matches X-Request-Id header","isRequired":true,"uniqueKey":"correlation_id","typeLabel":"string\u003cuuid>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry_after_seconds":{"type":"integer","minimum":1,"uniqueKey":"retry_after_seconds","typeLabel":"integer"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The input that failed, as a JSON-path style location: `body.type`, `body.tokens[3].uid`, `query.limit`, `path.tokenId`, `header.Idempotency-Key`, or `body` when the body is not valid JSON","example":"body.tokens[3].uid","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","enum":["INVALID_ENUM","INVALID_FORMAT","MISSING_REQUIRED","CONSTRAINT_VIOLATION"],"description":"Machine-readable validation error code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","error_code","correlation_id","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"/errors/validation-failed","title":"Validation Failed","status":422,"detail":"\u003cstring>","error_code":"RESOURCE_NOT_FOUND","correlation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","retryable":true,"retry_after_seconds":2,"errors":[{"field":"body.tokens[3].uid","code":"INVALID_ENUM","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"7859e0a2-94bf-4782-a84d-353e8e155214":{"description":"The access token is missing, invalid or expired, rejected by the API gateway with a plain JSON body","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"de899c95-e392-466e-8b26-7411de268020":{"description":"The access token does not carry the scope this operation requires (`INSUFFICIENT_SCOPE`)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"/errors/validation-failed","description":"Error type URI","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","example":"Validation Failed","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error cause. The Errors section of the API description says when each is returned","enum":["INVALID_REQUEST_BODY","INVALID_PATH_ID","INVALID_IDEMPOTENCY_KEY","INVALID_CURSOR","AUTH_CONTEXT_INVALID","INSUFFICIENT_SCOPE","RESOURCE_NOT_FOUND","UID_ALREADY_REGISTERED","IDEMPOTENCY_KEY_REUSED","REQUEST_IN_PROGRESS","RESOURCE_CONFLICT","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","VALIDATION_FAILED","RATE_LIMIT_EXCEEDED","INTERNAL_SERVER_ERROR","NOT_IMPLEMENTED"],"example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"correlation_id":{"type":"string","format":"uuid","description":"Matches X-Request-Id header","isRequired":true,"uniqueKey":"correlation_id","typeLabel":"string\u003cuuid>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry_after_seconds":{"type":"integer","minimum":1,"uniqueKey":"retry_after_seconds","typeLabel":"integer"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The input that failed, as a JSON-path style location: `body.type`, `body.tokens[3].uid`, `query.limit`, `path.tokenId`, `header.Idempotency-Key`, or `body` when the body is not valid JSON","example":"body.tokens[3].uid","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","enum":["INVALID_ENUM","INVALID_FORMAT","MISSING_REQUIRED","CONSTRAINT_VIOLATION"],"description":"Machine-readable validation error code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","error_code","correlation_id","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"/errors/validation-failed","title":"Validation Failed","status":422,"detail":"\u003cstring>","error_code":"RESOURCE_NOT_FOUND","correlation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","retryable":true,"retry_after_seconds":2,"errors":[{"field":"body.tokens[3].uid","code":"INVALID_ENUM","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"eaa25677-4662-4077-a075-ce6a7ab469cc":{"description":"The request body failed validation (`VALIDATION_FAILED`). `errors` lists each failed rule","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"/errors/validation-failed","description":"Error type URI","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","example":"Validation Failed","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error cause. The Errors section of the API description says when each is returned","enum":["INVALID_REQUEST_BODY","INVALID_PATH_ID","INVALID_IDEMPOTENCY_KEY","INVALID_CURSOR","AUTH_CONTEXT_INVALID","INSUFFICIENT_SCOPE","RESOURCE_NOT_FOUND","UID_ALREADY_REGISTERED","IDEMPOTENCY_KEY_REUSED","REQUEST_IN_PROGRESS","RESOURCE_CONFLICT","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","VALIDATION_FAILED","RATE_LIMIT_EXCEEDED","INTERNAL_SERVER_ERROR","NOT_IMPLEMENTED"],"example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"correlation_id":{"type":"string","format":"uuid","description":"Matches X-Request-Id header","isRequired":true,"uniqueKey":"correlation_id","typeLabel":"string\u003cuuid>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry_after_seconds":{"type":"integer","minimum":1,"uniqueKey":"retry_after_seconds","typeLabel":"integer"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The input that failed, as a JSON-path style location: `body.type`, `body.tokens[3].uid`, `query.limit`, `path.tokenId`, `header.Idempotency-Key`, or `body` when the body is not valid JSON","example":"body.tokens[3].uid","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","enum":["INVALID_ENUM","INVALID_FORMAT","MISSING_REQUIRED","CONSTRAINT_VIOLATION"],"description":"Machine-readable validation error code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","error_code","correlation_id","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"/errors/validation-failed","title":"Validation Failed","status":422,"detail":"\u003cstring>","error_code":"RESOURCE_NOT_FOUND","correlation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","retryable":true,"retry_after_seconds":2,"errors":[{"field":"body.tokens[3].uid","code":"INVALID_ENUM","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"85668a6e-01f6-49a2-95e8-cf0843ccd849":{"description":"Too many requests, rejected by the API gateway with a plain JSON body","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"d1468cfb-e366-4175-bd74-92f67ae40646":{"description":"Unexpected server error. When `retryable` is true, retry after `retry_after_seconds`. Where the operation takes an Idempotency-Key, reuse the same key; a retry within about a minute may return 409 while it is still reserved","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"/errors/validation-failed","description":"Error type URI","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","example":"Validation Failed","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error cause. The Errors section of the API description says when each is returned","enum":["INVALID_REQUEST_BODY","INVALID_PATH_ID","INVALID_IDEMPOTENCY_KEY","INVALID_CURSOR","AUTH_CONTEXT_INVALID","INSUFFICIENT_SCOPE","RESOURCE_NOT_FOUND","UID_ALREADY_REGISTERED","IDEMPOTENCY_KEY_REUSED","REQUEST_IN_PROGRESS","RESOURCE_CONFLICT","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","VALIDATION_FAILED","RATE_LIMIT_EXCEEDED","INTERNAL_SERVER_ERROR","NOT_IMPLEMENTED"],"example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"correlation_id":{"type":"string","format":"uuid","description":"Matches X-Request-Id header","isRequired":true,"uniqueKey":"correlation_id","typeLabel":"string\u003cuuid>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry_after_seconds":{"type":"integer","minimum":1,"uniqueKey":"retry_after_seconds","typeLabel":"integer"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The input that failed, as a JSON-path style location: `body.type`, `body.tokens[3].uid`, `query.limit`, `path.tokenId`, `header.Idempotency-Key`, or `body` when the body is not valid JSON","example":"body.tokens[3].uid","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","enum":["INVALID_ENUM","INVALID_FORMAT","MISSING_REQUIRED","CONSTRAINT_VIOLATION"],"description":"Machine-readable validation error code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","error_code","correlation_id","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"/errors/validation-failed","title":"Validation Failed","status":422,"detail":"\u003cstring>","error_code":"RESOURCE_NOT_FOUND","correlation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","retryable":true,"retry_after_seconds":2,"errors":[{"field":"body.tokens[3].uid","code":"INVALID_ENUM","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"55ee49f3-2b80-4101-b01b-59ade3dd73dc":{"description":"Bulk import is not available yet (`NOT_IMPLEMENTED`). Not retryable","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"/errors/validation-failed","description":"Error type URI","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","example":"Validation Failed","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error cause. The Errors section of the API description says when each is returned","enum":["INVALID_REQUEST_BODY","INVALID_PATH_ID","INVALID_IDEMPOTENCY_KEY","INVALID_CURSOR","AUTH_CONTEXT_INVALID","INSUFFICIENT_SCOPE","RESOURCE_NOT_FOUND","UID_ALREADY_REGISTERED","IDEMPOTENCY_KEY_REUSED","REQUEST_IN_PROGRESS","RESOURCE_CONFLICT","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","VALIDATION_FAILED","RATE_LIMIT_EXCEEDED","INTERNAL_SERVER_ERROR","NOT_IMPLEMENTED"],"example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"correlation_id":{"type":"string","format":"uuid","description":"Matches X-Request-Id header","isRequired":true,"uniqueKey":"correlation_id","typeLabel":"string\u003cuuid>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry_after_seconds":{"type":"integer","minimum":1,"uniqueKey":"retry_after_seconds","typeLabel":"integer"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The input that failed, as a JSON-path style location: `body.type`, `body.tokens[3].uid`, `query.limit`, `path.tokenId`, `header.Idempotency-Key`, or `body` when the body is not valid JSON","example":"body.tokens[3].uid","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","enum":["INVALID_ENUM","INVALID_FORMAT","MISSING_REQUIRED","CONSTRAINT_VIOLATION"],"description":"Machine-readable validation error code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","error_code","correlation_id","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"/errors/validation-failed","title":"Validation Failed","status":422,"detail":"\u003cstring>","error_code":"RESOURCE_NOT_FOUND","correlation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","retryable":true,"retry_after_seconds":2,"errors":[{"field":"body.tokens[3].uid","code":"INVALID_ENUM","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"0333369f-a130-4c73-a5b7-e7be9382ae13":{"OAuth2ClientCredentials":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://auth.spirii.dk/realms/public-api/protocol/openid-connect/token","scopes":{"emsp:tokens:read":"Read tokens, token history, token groups and their network assignments","emsp:tokens:write":"Provision, update and change the lifecycle of tokens; create and manage token groups. Also grants everything `emsp:tokens:read` does"}}},"scopes":[],"schemeName":"OAuth2ClientCredentials"}}},"servers":{"4ba0a21a-d2a8-441d-bcf1-c5af13086f68":{"url":"https://api.spirii.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://auth.spirii.dk/realms/public-api/protocol/openid-connect/token","scopes":{"emsp:tokens:read":"Read tokens, token history, token groups and their network assignments","emsp:tokens:write":"Provision, update and change the lifecycle of tokens; create and manage token groups. Also grants everything `emsp:tokens:read` does"}}},"scopes":[],"schemeName":"OAuth2ClientCredentials"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"The access token received from the authorization server in the OAuth 2.0 flow.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuth2ClientCredentials","name":"Authorization"}],"title":"OAuth2ClientCredentials"}]},"originalFileLocation":"openapi/emsp-token/openapi.yaml"},"subdomain":"spirii-7457b714","siteName":"Spirii","title":"Bulk provision tokens - Spirii","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-13T10:11:52.263Z","originalFileLocation":"api-reference/tokens/bulk-provision-tokens.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=\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[].). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help. Requires the emsp:tokens:write scope.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Spirii\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_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/spirii-7457b714/R12ogMp_TeA77-Qf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Bulk provision tokens - Spirii\">\u003cmeta data-mint-head property=\"og:description\" content=\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[].). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help. Requires the emsp:tokens:write scope.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Spirii\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://spirii-7457b714.mintlify.site/_mintlify/api/og/v2?division=Tokens\u0026amp;title=Bulk+provision+tokens\u0026amp;description=Accepts+up+to+1000+tokens+for+provisioning+in+the+background.+The+batch+is+validated+as+a+whole+before+it+is+accepted%3A+one+invalid+item+rejects+the+batch+with+4\u0026amp;theme=9086408e7b561ad06e890ebd\u0026amp;signature=85bf969ef6f704bdbaf73407db321cfa6d68ea78bf2a4532a3e922ca834e7b49\">\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=\"Bulk provision tokens - Spirii\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[].). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help. Requires the emsp:tokens:write scope.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://spirii-7457b714.mintlify.site/_mintlify/api/og/v2?division=Tokens\u0026amp;title=Bulk+provision+tokens\u0026amp;description=Accepts+up+to+1000+tokens+for+provisioning+in+the+background.+The+batch+is+validated+as+a+whole+before+it+is+accepted%3A+one+invalid+item+rejects+the+batch+with+4\u0026amp;theme=9086408e7b561ad06e890ebd\u0026amp;signature=85bf969ef6f704bdbaf73407db321cfa6d68ea78bf2a4532a3e922ca834e7b49\">\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/spirii-7457b714/R12ogMp_TeA77-Qf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Spirii\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5E6AD2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/tokens/bulk-provision-tokens.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.spirii.com/#organization\",\"name\":\"Spirii\",\"url\":\"https://docs.spirii.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/spirii-7457b714/_U1YTeti8CD0DPkl/logo/light.svg?fit=max\u0026auto=format\u0026n=_U1YTeti8CD0DPkl\u0026q=85\u0026s=8a06c70d4c9f9f7e620168a5e1d38ddb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.spirii.com#website\",\"name\":\"Spirii\",\"url\":\"https://docs.spirii.com\",\"publisher\":{\"@id\":\"https://docs.spirii.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens#webpage\",\"url\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens\",\"name\":\"Bulk provision tokens\",\"description\":\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[].). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help. Requires the emsp:tokens:write scope.\",\"dateModified\":\"2026-10-13T10:11:52.263Z\",\"isPartOf\":{\"@id\":\"https://docs.spirii.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"EMSP API (BETA)\",\"item\":\"https://docs.spirii.com/api-reference/emsp/authentication\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tokens\",\"item\":\"https://docs.spirii.com/api-reference/tokens/list-tokens\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Tokens\",\"item\":\"https://docs.spirii.com/api-reference/tokens/list-tokens\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Bulk provision tokens\",\"item\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens#apireference\",\"headline\":\"Bulk provision tokens\",\"name\":\"Bulk provision tokens\",\"description\":\"Accepts up to 1000 tokens for provisioning in the background. The batch is validated as a whole before it is accepted: one invalid item rejects the batch with 422, and each entry in errors names the item by index (body.tokens[].). uid uniqueness and metadata validation run per item during processing rather than on this call. This operation does not use the Idempotency-Key header; instead each item carries its own idempotency_key. Bulk import is not available yet: a batch that passes validation is answered 501 (NOT_IMPLEMENTED), and retrying will not help. Requires the emsp:tokens:write scope.\",\"url\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens\",\"mainEntityOfPage\":{\"@id\":\"https://docs.spirii.com/api-reference/tokens/bulk-provision-tokens#webpage\"},\"dateModified\":\"2026-10-13T10:11:52.263Z\",\"publisher\":{\"@id\":\"https://docs.spirii.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.spirii.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Spirii\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Spirii","nav":{"global":{"anchors":[{"anchor":"Status","icon":"circle-check","href":"https://status.spirii.com/"},{"anchor":"Support","icon":"life-buoy","href":"mailto:support@spirii.com"}]},"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"Developers","icon":"code","pages":[{"title":"Developers","href":"/developers/introduction"}]},{"tab":"API Reference","icon":"square-terminal","groups":[{"group":"Get started","icon":"rocket","expanded":true,"pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/api-reference/overview"}]},{"group":"Spirii API (v2, CPO)","icon":"sparkles","expanded":true,"pages":[{"group":"Charge Records v2","pages":[{"title":"Get a list of CDRs","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/charge-records","href":"/api-reference/charge-records-v2/get-a-list-of-cdrs"},{"title":"Get a single Charge Record","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/charge-records/{id}","href":"/api-reference/charge-records-v2/get-a-single-charge-record"}]},{"group":"Transactions v2","pages":[{"title":"Get a list of transactions","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/transactions","href":"/api-reference/transactions-v2/get-a-list-of-transactions"},{"title":"Get a transaction by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/transactions/{id}","href":"/api-reference/transactions-v2/get-a-transaction-by-id"}]},{"group":"Customer v2","pages":[{"title":"","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/customers","href":"/api-reference/customer-v2/get-v2customers"},{"title":"Create a new customer","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/customers","href":"/api-reference/customer-v2/create-a-new-customer"},{"title":"Get one customer by id","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/customers/{id}","href":"/api-reference/customer-v2/get-one-customer-by-id"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml put /v2/customers/{id}","href":"/api-reference/customer-v2/update-a-customer"},{"title":"Delete a customer","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/customers/{id}","href":"/api-reference/customer-v2/delete-a-customer"}]},{"group":"App Users","pages":[{"title":"Get a list of app users","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/app-users","href":"/api-reference/app-users/get-a-list-of-app-users"},{"title":"Create app user","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/app-users","href":"/api-reference/app-users/create-app-user"},{"title":"Get app user by id","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/app-users/{id}","href":"/api-reference/app-users/get-app-user-by-id"},{"title":"Update app user","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml put /v2/app-users/{id}","href":"/api-reference/app-users/update-app-user"}]},{"group":"Chargeboxes v2","pages":[{"title":"Fetches a list of supported charge box models","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/chargeboxes/models","href":"/api-reference/chargeboxes-v2/fetches-a-list-of-supported-charge-box-models"},{"title":"Fetches a list of charge boxes","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/chargeboxes","href":"/api-reference/chargeboxes-v2/fetches-a-list-of-charge-boxes"},{"title":"Creates a new charge box.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/chargeboxes","href":"/api-reference/chargeboxes-v2/creates-a-new-charge-box"},{"title":"Fetches a single charge box.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/chargeboxes/{id}","href":"/api-reference/chargeboxes-v2/fetches-a-single-charge-box"},{"title":"Deletes a charge box. This operation cannot be undone.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/chargeboxes/{id}","href":"/api-reference/chargeboxes-v2/deletes-a-charge-box-this-operation-cannot-be-undone"},{"title":"Reboots a charge box. (Alias for soft reset)","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/chargeboxes/{id}/reboot","href":"/api-reference/chargeboxes-v2/reboots-a-charge-box-alias-for-soft-reset"},{"title":"Performs a hard or soft reset on a charge box.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/chargeboxes/{id}/reset","href":"/api-reference/chargeboxes-v2/performs-a-hard-or-soft-reset-on-a-charge-box"}]},{"group":"EVSEs v2","pages":[{"title":"Fetches a list of EVSEs.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/evses","href":"/api-reference/evses-v2/fetches-a-list-of-evses"},{"title":"Fetches a single EVSE.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/evses/{uid}","href":"/api-reference/evses-v2/fetches-a-single-evse"},{"title":"Updates a connector on an EVSE.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/evses/{uid}/connectors/{connectorId}","href":"/api-reference/evses-v2/updates-a-connector-on-an-evse"},{"title":"Requests an EVSE to start a transaction","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/evses/{uid}/connectors/{connectorId}/remote-start-transaction","href":"/api-reference/evses-v2/requests-an-evse-to-start-a-transaction"},{"title":"Requests an EVSE to stop a transaction","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/evses/{uid}/connectors/{connectorId}/remote-stop-transaction","href":"/api-reference/evses-v2/requests-an-evse-to-stop-a-transaction"},{"title":"Updates the availability status of a connector.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/evses/{uid}/connectors/{connectorId}/change-availability","href":"/api-reference/evses-v2/updates-the-availability-status-of-a-connector"},{"title":"Requests an EVSE to unlock a connector","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/evses/{uid}/connectors/{connectorId}/unlock","href":"/api-reference/evses-v2/requests-an-evse-to-unlock-a-connector"}]},{"group":"Locations v2","pages":[{"title":"Fetches a list of locations.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/locations","href":"/api-reference/locations-v2/fetches-a-list-of-locations"},{"title":"Creates a new location.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/locations","href":"/api-reference/locations-v2/creates-a-new-location"},{"title":"Fetches a single, existing location.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/locations/{id}","href":"/api-reference/locations-v2/fetches-a-single-existing-location"},{"title":"Deletes an existing location. This operation cannot be undone.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/locations/{id}","href":"/api-reference/locations-v2/deletes-an-existing-location-this-operation-cannot-be-undone"},{"title":"Updates an existing location.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/locations/{id}","href":"/api-reference/locations-v2/updates-an-existing-location"}]},{"group":"Tariffs v2","pages":[{"title":"Fetches a single, existing tariff.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/tariffs/{id}","href":"/api-reference/tariffs-v2/fetches-a-single-existing-tariff"}]},{"group":"TariffPublisher v2","pages":[{"title":"Get v2tariff publisherpublic key","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/tariff-publisher/public-key","href":"/api-reference/tariffpublisher-v2/get-v2tariff-publisherpublic-key"}]},{"group":"Temporary EVSE Statuses v2","pages":[{"title":"Get all Temporary EVSE Statuses","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/temporary-evse-statuses","href":"/api-reference/temporary-evse-statuses-v2/get-all-temporary-evse-statuses"},{"title":"Create a new Temporary EVSE Status","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/temporary-evse-statuses","href":"/api-reference/temporary-evse-statuses-v2/create-a-new-temporary-evse-status"},{"title":"Get a Temporary EVSE Status by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/temporary-evse-statuses/{id}","href":"/api-reference/temporary-evse-statuses-v2/get-a-temporary-evse-status-by-id"},{"title":"Remove a Temporary EVSE Status","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/temporary-evse-statuses/{id}","href":"/api-reference/temporary-evse-statuses-v2/remove-a-temporary-evse-status"},{"title":"Update a Temporary EVSE Status","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/temporary-evse-statuses/{id}","href":"/api-reference/temporary-evse-statuses-v2/update-a-temporary-evse-status"}]},{"group":"Tokens","pages":[{"title":"Get a token by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/tokens/{id}","href":"/api-reference/tokens/get-a-token-by-id"},{"title":"Delete a token","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/tokens/{id}","href":"/api-reference/tokens/delete-a-token"},{"title":"Update a token","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/tokens/{id}","href":"/api-reference/tokens/update-a-token"},{"title":"Get a list of tokens","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/tokens","href":"/api-reference/tokens/get-a-list-of-tokens"},{"title":"Create a new token","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/tokens","href":"/api-reference/tokens/create-a-new-token"},{"title":"Enable a token","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/tokens/{id}/enable","href":"/api-reference/tokens/enable-a-token"},{"title":"Disable a token","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/tokens/{id}/disable","href":"/api-reference/tokens/disable-a-token"}]},{"group":"Token Groups","pages":[{"title":"Get a token group by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/token-groups/{id}","href":"/api-reference/token-groups/get-a-token-group-by-id"},{"title":"Delete a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/token-groups/{id}","href":"/api-reference/token-groups/delete-a-token-group"},{"title":"Update a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/token-groups/{id}","href":"/api-reference/token-groups/update-a-token-group"},{"title":"Get a list of token groups","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/token-groups","href":"/api-reference/token-groups/get-a-list-of-token-groups"},{"title":"Create a new token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/token-groups","href":"/api-reference/token-groups/create-a-new-token-group"},{"title":"Get a list of tokens associated to a token group by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/token-groups/{id}/tokens","href":"/api-reference/token-groups/get-a-list-of-tokens-associated-to-a-token-group-by-id"},{"title":"Get a list of locations associated to a token group by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/token-groups/{id}/locations","href":"/api-reference/token-groups/get-a-list-of-locations-associated-to-a-token-group-by-id"},{"title":"Associate a location to a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/token-groups/{id}/locations/{locationId}","href":"/api-reference/token-groups/associate-a-location-to-a-token-group"},{"title":"Disassociate a location from a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/token-groups/{id}/locations/{locationId}","href":"/api-reference/token-groups/disassociate-a-location-from-a-token-group"},{"title":"Associate a token to a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/token-groups/{id}/tokens/{tokenId}","href":"/api-reference/token-groups/associate-a-token-to-a-token-group"},{"title":"Disassociate a token from a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/token-groups/{id}/tokens/{tokenId}","href":"/api-reference/token-groups/disassociate-a-token-from-a-token-group"},{"title":"Enable a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/token-groups/{id}/enable","href":"/api-reference/token-groups/enable-a-token-group"},{"title":"Disable a token group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/token-groups/{id}/disable","href":"/api-reference/token-groups/disable-a-token-group"}]},{"group":"Vouchers","pages":[{"title":"Get a voucher by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/vouchers/{id}","href":"/api-reference/vouchers/get-a-voucher-by-id"},{"title":"Delete a voucher by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/vouchers/{id}","href":"/api-reference/vouchers/delete-a-voucher-by-id"},{"title":"Update an existing voucher","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/vouchers/{id}","href":"/api-reference/vouchers/update-an-existing-voucher"},{"title":"Get tokens associated with a voucher by voucher ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/vouchers/{id}/tokens","href":"/api-reference/vouchers/get-tokens-associated-with-a-voucher-by-voucher-id"},{"title":"Get a list of vouchers","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/vouchers","href":"/api-reference/vouchers/get-a-list-of-vouchers"},{"title":"Create a new voucher","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/vouchers","href":"/api-reference/vouchers/create-a-new-voucher"},{"title":"Associate a token to a voucher","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/vouchers/{id}/tokens/{tokenId}","href":"/api-reference/vouchers/associate-a-token-to-a-voucher"},{"title":"Disassociate a token from a voucher","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/vouchers/{id}/tokens/{tokenId}","href":"/api-reference/vouchers/disassociate-a-token-from-a-voucher"}]},{"group":"VoucherGroups","pages":[{"title":"Get a voucher group by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/voucher-groups/{id}","href":"/api-reference/vouchergroups/get-a-voucher-group-by-id"},{"title":"Delete a voucher group by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/voucher-groups/{id}","href":"/api-reference/vouchergroups/delete-a-voucher-group-by-id"},{"title":"Update an existing voucher group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml patch /v2/voucher-groups/{id}","href":"/api-reference/vouchergroups/update-an-existing-voucher-group"},{"title":"Get a list of voucher groups","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/voucher-groups","href":"/api-reference/vouchergroups/get-a-list-of-voucher-groups"},{"title":"Create a new voucher group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/voucher-groups","href":"/api-reference/vouchergroups/create-a-new-voucher-group"},{"title":"Get voucher group's locations by ID","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/voucher-groups/{id}/locations","href":"/api-reference/vouchergroups/get-voucher-groups-locations-by-id"},{"title":"Get a paginated list of vouchers belonging to a voucher group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/voucher-groups/{id}/vouchers","href":"/api-reference/vouchergroups/get-a-paginated-list-of-vouchers-belonging-to-a-voucher-group"},{"title":"Associate location to voucher group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml post /v2/voucher-groups/{id}/locations/{locationId}","href":"/api-reference/vouchergroups/associate-location-to-voucher-group"},{"title":"Disassociate locations from voucher group","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml delete /v2/voucher-groups/{id}/locations/{locationId}","href":"/api-reference/vouchergroups/disassociate-locations-from-voucher-group"}]},{"group":"AFIR","pages":[{"title":"Get DATEX II v3 AFIR energy infrastructure tables","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/afir/energy-infrastructure-tables","href":"/api-reference/afir/get-datex-ii-v3-afir-energy-infrastructure-tables"},{"title":"Get DATEX II v3 AFIR energy infrastructure statuses","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/afir/energy-infrastructure-statuses","href":"/api-reference/afir/get-datex-ii-v3-afir-energy-infrastructure-statuses"}]},{"group":"Audit Logs","pages":[{"title":"Fetches a list of audit logs.","deprecated":null,"version":null,"openapi":"/openapi/integration-api-v2/openapi.yaml get /v2/audit-logs","href":"/api-reference/audit-logs/fetches-a-list-of-audit-logs"}]}]},{"group":"EMSP API (BETA)","icon":"car","expanded":true,"pages":[{"title":"Authentication","sidebarTitle":"Authentication","href":"/api-reference/emsp/authentication"},{"group":"Tenants","pages":[{"group":"Tenant","pages":[{"title":"Get tenant profile","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/profile","href":"/api-reference/tenant/get-tenant-profile"},{"title":"Update tenant profile","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml patch /emsp/v1/tenant/profile","href":"/api-reference/tenant/update-tenant-profile"},{"title":"Get published-network priority order","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/published-network-priority-order","href":"/api-reference/tenant/get-published-network-priority-order"},{"title":"Set published-network priority order","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml put /emsp/v1/tenant/published-network-priority-order","href":"/api-reference/tenant/set-published-network-priority-order"}]},{"group":"EMSP Identity","pages":[{"title":"List EMSP identities","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/emsp-identities","href":"/api-reference/emsp-identity/list-emsp-identities"},{"title":"Register an EMSP identity","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml post /emsp/v1/tenant/emsp-identities","href":"/api-reference/emsp-identity/register-an-emsp-identity"},{"title":"List EMSP identities","deprecated":true,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/emp-identities","href":"/api-reference/emsp-identity/list-emsp-identities-1"},{"title":"Register an EMSP identity","deprecated":true,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml post /emsp/v1/tenant/emp-identities","href":"/api-reference/emsp-identity/register-an-emsp-identity-1"},{"title":"Get EMSP identity","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/emsp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/get-emsp-identity"},{"title":"Update EMSP identity","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml put /emsp/v1/tenant/emsp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/update-emsp-identity"},{"title":"Deregister an EMSP identity","deprecated":null,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml delete /emsp/v1/tenant/emsp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/deregister-an-emsp-identity"},{"title":"Get EMSP identity","deprecated":true,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml get /emsp/v1/tenant/emp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/get-emsp-identity-1"},{"title":"Update EMSP identity","deprecated":true,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml put /emsp/v1/tenant/emp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/update-emsp-identity-1"},{"title":"Deregister an EMSP identity","deprecated":true,"version":null,"openapi":"/openapi/emsp-tenant/openapi.yaml delete /emsp/v1/tenant/emp-identities/{emsp_identity_id}","href":"/api-reference/emsp-identity/deregister-an-emsp-identity-1"}]}]},{"group":"Networks","pages":[{"group":"Networks","pages":[{"title":"List networks","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks","href":"/api-reference/networks/list-networks"},{"title":"Create a TENANT sub-network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml post /emsp/v1/networks","href":"/api-reference/networks/create-a-tenant-sub-network"},{"title":"Create a BASE network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml post /emsp/v1/networks/base","href":"/api-reference/networks/create-a-base-network"},{"title":"Get effective network view (BASE networks with precedence applied)","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks/effective-view","href":"/api-reference/networks/get-effective-network-view-base-networks-with-precedence-applied"},{"title":"Get network detail","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks/{network_id}","href":"/api-reference/networks/get-network-detail"},{"title":"Delete a TENANT sub-network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml delete /emsp/v1/networks/{network_id}","href":"/api-reference/networks/delete-a-tenant-sub-network"},{"title":"Update network settings","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml patch /emsp/v1/networks/{network_id}","href":"/api-reference/networks/update-network-settings"},{"title":"Set publish state on a BASE network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml patch /emsp/v1/networks/{network_id}/publish-state","href":"/api-reference/networks/set-publish-state-on-a-base-network"},{"title":"List access rules for this network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks/{network_id}/rules","href":"/api-reference/networks/list-access-rules-for-this-network"},{"title":"Create an access rule","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml post /emsp/v1/networks/{network_id}/rules","href":"/api-reference/networks/create-an-access-rule"},{"title":"Delete an access rule","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml delete /emsp/v1/networks/{network_id}/rules/{rule_id}","href":"/api-reference/networks/delete-an-access-rule"},{"title":"List visible locations on this network","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks/{network_id}/locations","href":"/api-reference/networks/list-visible-locations-on-this-network"},{"title":"List consumers of a Published BASE network (publisher-only)","deprecated":null,"version":null,"openapi":"/openapi/emsp-network/openapi.yaml get /emsp/v1/networks/{network_id}/consumers","href":"/api-reference/networks/list-consumers-of-a-published-base-network-publisher-only"}]}]},{"group":"Locations","pages":[{"group":"Locations","pages":[{"title":"Search and filter locations","deprecated":null,"version":null,"openapi":"/openapi/emsp-location/openapi.yaml get /emsp/v1/locations","href":"/api-reference/locations/search-and-filter-locations"},{"title":"Bulk availability check","deprecated":null,"version":null,"openapi":"/openapi/emsp-location/openapi.yaml post /emsp/v1/locations/availability","href":"/api-reference/locations/bulk-availability-check"},{"title":"Map clustering","deprecated":null,"version":null,"openapi":"/openapi/emsp-location/openapi.yaml get /emsp/v1/locations/clusters","href":"/api-reference/locations/map-clustering"},{"title":"List available facility types","deprecated":null,"version":null,"openapi":"/openapi/emsp-location/openapi.yaml get /emsp/v1/locations/facilities","href":"/api-reference/locations/list-available-facility-types"},{"title":"Get location detail","deprecated":null,"version":null,"openapi":"/openapi/emsp-location/openapi.yaml get /emsp/v1/locations/{location_id}","href":"/api-reference/locations/get-location-detail"}]}]},{"group":"Tokens","pages":[{"group":"Tokens","pages":[{"title":"List tokens","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/tokens","href":"/api-reference/tokens/list-tokens"},{"title":"Provision a new token","description":"Registers a token in your tenant. The token starts in PROVISIONED, or in ACTIVE when `auto_activate` is true. `uid` must be unique across every tenant on the platform, and `metadata` is validated against the tenant TOKEN metadata schema. A tenant without a TOKEN metadata schema cannot store metadata: any non-empty map is a 422.\n\nRequires the `emsp:tokens:write` scope.","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens","href":"/api-reference/tokens/provision-a-new-token"},{"title":"Bulk provision tokens","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/bulk","href":"/api-reference/tokens/bulk-provision-tokens"},{"title":"Get token detail","description":"Requires the `emsp:tokens:read` scope.","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/tokens/{tokenId}","href":"/api-reference/tokens/get-token-detail"},{"title":"Update token attributes","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml patch /emsp/v1/tokens/{tokenId}","href":"/api-reference/tokens/update-token-attributes"},{"title":"Activate token","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/{tokenId}/activate","href":"/api-reference/tokens/activate-token"},{"title":"Suspend token","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/{tokenId}/suspend","href":"/api-reference/tokens/suspend-token"},{"title":"Reactivate token","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/{tokenId}/reactivate","href":"/api-reference/tokens/reactivate-token"},{"title":"Revoke token","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/tokens/{tokenId}/revoke","href":"/api-reference/tokens/revoke-token"},{"title":"Get token history","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/tokens/{tokenId}/history","href":"/api-reference/tokens/get-token-history"}]},{"group":"Token Groups","pages":[{"title":"List token groups","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/token-groups","href":"/api-reference/token-groups/list-token-groups"},{"title":"Create token group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups","href":"/api-reference/token-groups/create-token-group"},{"title":"Get token group detail","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/token-groups/{groupId}","href":"/api-reference/token-groups/get-token-group-detail"},{"title":"Update token group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml patch /emsp/v1/token-groups/{groupId}","href":"/api-reference/token-groups/update-token-group"},{"title":"Add tokens to group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/tokens","href":"/api-reference/token-groups/add-tokens-to-group"},{"title":"Remove token from group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml delete /emsp/v1/token-groups/{groupId}/tokens/{tokenId}","href":"/api-reference/token-groups/remove-token-from-group"},{"title":"List network assignments","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml get /emsp/v1/token-groups/{groupId}/networks","href":"/api-reference/token-groups/list-network-assignments"},{"title":"Assign network to group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/networks","href":"/api-reference/token-groups/assign-network-to-group"},{"title":"Remove network assignment","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml delete /emsp/v1/token-groups/{groupId}/networks/{networkId}","href":"/api-reference/token-groups/remove-network-assignment"},{"title":"Activate group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/activate","href":"/api-reference/token-groups/activate-group"},{"title":"Suspend group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/suspend","href":"/api-reference/token-groups/suspend-group"},{"title":"Reactivate group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/reactivate","href":"/api-reference/token-groups/reactivate-group"},{"title":"Revoke group","deprecated":null,"version":null,"openapi":"/openapi/emsp-token/openapi.yaml post /emsp/v1/token-groups/{groupId}/revoke","href":"/api-reference/token-groups/revoke-group"}]}]},{"group":"Webhooks","pages":[{"title":"Webhook events","sidebarTitle":"Webhook events","href":"/api-reference/emsp/webhook-events"},{"title":"Webhook delivery","sidebarTitle":"Webhook delivery","href":"/api-reference/emsp/webhook-delivery"},{"group":"Webhooks","pages":[{"title":"List subscribable event types","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml get /emsp/v1/webhooks/event_types","href":"/api-reference/webhooks/list-subscribable-event-types"},{"title":"Get an event type","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml get /emsp/v1/webhooks/event_types/{type}","href":"/api-reference/webhooks/get-an-event-type"},{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml get /emsp/v1/webhooks","href":"/api-reference/webhooks/list-webhook-subscriptions"},{"title":"Register a webhook","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml post /emsp/v1/webhooks","href":"/api-reference/webhooks/register-a-webhook"},{"title":"Get a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml get /emsp/v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/get-a-webhook-subscription"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml delete /emsp/v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/delete-a-webhook-subscription"},{"title":"Update a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml patch /emsp/v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/update-a-webhook-subscription"},{"title":"Send a test delivery","deprecated":null,"version":null,"openapi":"/openapi/emsp-webhook/openapi.yaml post /emsp/v1/webhooks/{webhook_id}/test","href":"/api-reference/webhooks/send-a-test-delivery"}]}]}]},{"group":"Billing API","icon":"landmark","pages":[{"group":"Expenses","pages":[{"group":"Reimbursement Expenses","pages":[{"title":"List Expense Reports","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expense-reports","href":"/api-reference/reimbursement-expenses/list-expense-reports"},{"title":"Get Expense Report","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expense-reports/{reportId}","href":"/api-reference/reimbursement-expenses/get-expense-report"},{"title":"Download Expense Report","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expense-reports/{reportId}/document","href":"/api-reference/reimbursement-expenses/download-expense-report"},{"title":"Approve Expense Report","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml post /v1/expense-reports/{reportId}/approve","href":"/api-reference/reimbursement-expenses/approve-expense-report"},{"title":"Get Expense","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expenses/{expenseId}","href":"/api-reference/reimbursement-expenses/get-expense"},{"title":"Download Expense","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expenses/{expenseId}/document","href":"/api-reference/reimbursement-expenses/download-expense"},{"title":"List Unlinked CDRs","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml get /v1/expenses/{expenseId}/charge-detail-records/unlinked","href":"/api-reference/reimbursement-expenses/list-unlinked-cdrs"},{"title":"Add CDRs to Expense","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml post /v1/expenses/{expenseId}/charge-detail-records/add","href":"/api-reference/reimbursement-expenses/add-cdrs-to-expense"},{"title":"Remove CDRs from Expense","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/expenses/openapi.yaml post /v1/expenses/{expenseId}/charge-detail-records/remove","href":"/api-reference/reimbursement-expenses/remove-cdrs-from-expense"}]}]},{"group":"Rates","pages":[{"group":"Reimbursement Rates","pages":[{"title":"Get reimbursement rates for one or more locations","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml get /v1","href":"/api-reference/reimbursement-rates/get-reimbursement-rates-for-one-or-more-locations"},{"title":"Create a new reimbursement rate","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml post /v1","href":"/api-reference/reimbursement-rates/create-a-new-reimbursement-rate"},{"title":"Delete a reimbursement rate and its attached documents","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml delete /v1/{id}","href":"/api-reference/reimbursement-rates/delete-a-reimbursement-rate-and-its-attached-documents"},{"title":"Update an existing reimbursement rate","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml patch /v1/{id}","href":"/api-reference/reimbursement-rates/update-an-existing-reimbursement-rate"},{"title":"Get documents for a reimbursement rate","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml get /v1/{id}/documents","href":"/api-reference/reimbursement-rates/get-documents-for-a-reimbursement-rate"},{"title":"Upload document(s) for a reimbursement rate","deprecated":null,"version":null,"openapi":"/openapi/reimbursement/rates/openapi.yaml post /v1/{id}/documents","href":"/api-reference/reimbursement-rates/upload-documents-for-a-reimbursement-rate"}]}]}]},{"group":"Energy Management API","icon":"bolt","pages":[{"group":"Programmatic Charger Control","root":{"title":"Overview","sidebarTitle":"Overview","href":"/capabilities/smart-charging/overview"},"pages":[{"group":"Websockets","pages":[{"asyncapi":"openapi/smart-charging/asyncapi.yaml controlRequest","href":"/api-reference/websockets/control-request","title":"Control Request","version":null},{"asyncapi":"openapi/smart-charging/asyncapi.yaml controlResponse","href":"/api-reference/websockets/control-response","title":"Control Response","version":null},{"asyncapi":"openapi/smart-charging/asyncapi.yaml connectorStatusUpdate","href":"/api-reference/websockets/connector-status-update","title":"Connector Status Update","version":null},{"asyncapi":"openapi/smart-charging/asyncapi.yaml masterData","href":"/api-reference/websockets/asset-management-master-data","title":"Asset Management (Master Data)","version":null},{"asyncapi":"openapi/smart-charging/asyncapi.yaml powerMeasurements","href":"/api-reference/websockets/power-measurements","title":"Power Measurements","version":null}]}]}]},{"group":"Legacy API","icon":"archive","pages":[{"title":"Legacy API","sidebarTitle":"Overview","href":"/api-reference/legacy-api/overview"},{"group":"Endpoints","pages":[{"group":"Locations","pages":[{"title":"Retrieve a list of locations","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /locations","href":"/api-reference/locations/retrieve-a-list-of-locations"},{"title":"Retrieve location by ID","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /locations/{id}","href":"/api-reference/locations/retrieve-location-by-id"},{"title":"Update location data","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml put /locations/{id}","href":"/api-reference/locations/update-location-data"}]},{"group":"EVSE's","pages":[{"title":"Retrieve a list of EVSE's with their current status","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /evses","href":"/api-reference/evses/retrieve-a-list-of-evses-with-their-current-status"},{"title":"Retrieve a EVSE's with their current status","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /evses/{id}","href":"/api-reference/evses/retrieve-a-evses-with-their-current-status"}]},{"group":"Transactions","pages":[{"title":"Retrieve a list of transactions","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /transactions","href":"/api-reference/transactions/retrieve-a-list-of-transactions"},{"title":"Retrieve complete transaction data by ID","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /transactions/{id}","href":"/api-reference/transactions/retrieve-complete-transaction-data-by-id"}]},{"group":"Charge Records","pages":[{"title":"Retrieve the charge records data","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /v1/charge-records","href":"/api-reference/charge-records/retrieve-the-charge-records-data"},{"title":"Retrieve complete charge record data by ID","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /v1/charge-records/{id}","href":"/api-reference/charge-records/retrieve-complete-charge-record-data-by-id"}]},{"group":"App Users","pages":[{"title":"Retrieve a list of app users","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /app-users","href":"/api-reference/app-users/retrieve-a-list-of-app-users"},{"title":"Retrieve a app users","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /app-users/{id}","href":"/api-reference/app-users/retrieve-a-app-users"}]},{"group":"Voucher Groups","pages":[{"title":"Retrieve a list of voucher groups","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /voucher-groups","href":"/api-reference/voucher-groups/retrieve-a-list-of-voucher-groups"},{"title":"Retrieve all information about a specific Voucher Group","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /voucher-groups/{id}","href":"/api-reference/voucher-groups/retrieve-all-information-about-a-specific-voucher-group"},{"title":"Update a voucher group","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml put /voucher-groups/{id}","href":"/api-reference/voucher-groups/update-a-voucher-group"}]},{"group":"Vouchers","pages":[{"title":"Retrieve a list of vouchers","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /vouchers","href":"/api-reference/vouchers/retrieve-a-list-of-vouchers"},{"title":"Retrieve a specific voucher","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml get /vouchers/{id}","href":"/api-reference/vouchers/retrieve-a-specific-voucher"},{"title":"Update a voucher","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml put /vouchers/{id}","href":"/api-reference/vouchers/update-a-voucher"},{"title":"Disable a voucher (sets it as expired)","deprecated":null,"version":null,"openapi":"/openapi/integrations-api/openapi.yml delete /vouchers/{id}","href":"/api-reference/vouchers/disable-a-voucher-sets-it-as-expired"}]}]}]}]},{"tab":"Changelog","icon":"scroll-text","pages":[{"title":"Changelog","href":"/changelog/overview"}]}]},"basePath":"","title":"Bulk provision tokens - Spirii","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}