The response body shown here is a static example, not live data. After you click Send, your live result appears in a separate panel headed 200 OK. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use Send, or call the endpoint, for current values.
Revoke (remove) an existing API key. The request is authenticated by a secp256k1 EIP-712 typed-data signature produced with the wallet that owns address (the same wallet that originally signed the matching createApiKey). The gateway recovers the signer and rejects mismatches with HTTP 401. This endpoint does not require an X-API-Key header so the owner can still revoke a key that has been lost or compromised.Revocation is scoped to (address, publicKey): only the account that owns the key may revoke it. A revoke for a key not registered to the caller’s account returns HTTP 404 and is a no-op — no state is changed.
Signing the request
Identical to createApiKey — same Arcus API Key domain, same per-environment chainId values, no verifyingContract — except the primary type is RevokeApiKey and the message does not include validUntil (revoke applies regardless of the key’s remaining lifetime).Domain
{ "name": "Arcus API Key", "version": "1", "chainId": <rootchain chain id, e.g. 4663>}
TypesSame accountIndex rule as createApiKey: sign the accountIndex-bearing type, and for a non-zero index — including the 255 all-subaccounts sentinel — it is mandatory. The value must match the scope the key was created against. Index 0 may still use the original index-less type.
Replay protection (recommended)When including a nonce in the request body, sign the combined type that binds both replay protection and subaccount scope:
The nonce and accountIndex in the message must match the request body. For accountIndex 0 the server also accepts the nonce-only type without accountIndex in the signed payload (backward compatibility).Message
(keys in this exact order, no whitespace, no trailing newline). During the migration window the server accepts either scheme: it verifies the EIP-712 signature first and falls back to legacy EIP-191. EIP-191 is deprecated and will be rejected once the migration window closes — migrate existing integrations to EIP-712 typed data; new integrations must use EIP-712 only.
Body
application/json
address
string
required
Ethereum address that owns the API key to revoke.
Pattern: ^(0x|0X)?[0-9a-fA-F]{40}$
Example:
"0x742d35cc6634c0532925a3b844bc9e7595f2bd18"
publicKey
string
required
Hex-encoded Ed25519 public key that identifies the API key to revoke.
Name of the API wallet (included in the signing message, must match createAPIKey).
Required string length: 1 - 64
Example:
"Arcus"
signature
object
required
secp256k1 EIP-712 typed-data signature (r, s, v) over the RevokeApiKey payload (eth_signTypedData_v4), produced by the wallet that owns address — must be the same wallet that originally signed the matching createApiKey. See the POST /v1/revokeApiKey endpoint description for the exact domain, types, and message. During the migration window the deprecated legacy EIP-191 personal_sign scheme is also accepted. Requests where the recovered signer does not equal address are rejected with HTTP 401.
Show child attributes
accountIndex
enum<integer>
Subaccount scope the key belongs to: 0–9 for a single subaccount, or 255 for an all-subaccounts key. Defaults to 0; must match the value the key was created against. Bound into the signed payload with the same rule as createApiKey (any non-zero value, including 255, requires the accountIndex-bearing RevokeApiKey type).
Available options:
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
255
nonce
string
Optional replay-protection nonce, single-use per (address, accountIndex) when included in the signed EIP-712 payload. See CreateApiKeyRequest.nonce for format and migration-window behavior.
Maximum string length: 64
Example:
"a1b2c3d4-5f60-7182-93a4-b5c6d7e8f901"
Response
API key revocation accepted and dispatched to the matching engine.
apiKey
string
required
API key (hex string) that was revoked.
address
string
required
20-byte EVM address as hex: optional 0x or 0X prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase a–f after 0x.
Pattern: ^(0x|0X)?[0-9a-fA-F]{40}$
revokedAt
integer<int64>
required
Revocation timestamp (epoch microseconds).
allSubaccounts
boolean
True when the revoked key traded every subaccount of address. Populated on every response; use it as the scope discriminator (optional in schema for deploy-order compatibility).
accountIndex
integer
The single subaccount (0–9) the revoked key traded. Present only when allSubaccounts is false; omitted for an all-subaccounts key.
Required range: 0 <= x <= 9
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Arcus Docs","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/light.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=9bbd1de2de2a31d08c50e0d58bdac466","dark":"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/dark.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=811a9395d1f3457230f9f5defa23c9d0"},"favicon":"https://mintcdn.com/arcus-11aecf6e/cwobDWFqGCQyNAqW/favicon.svg?fit=max\u0026auto=format\u0026n=cwobDWFqGCQyNAqW\u0026q=85\u0026s=c3d0e980a4a9fe344d7143e7f3c18caf","navbar":{"links":[{"href":"https://help.arcus.xyz","label":"Help Center"}],"primary":{"type":"button","label":"Go to Arcus","href":"https://app.arcus.xyz"}},"integrations":{"ga4":{"measurementId":"G-1232GKGLVQ"},"intercom":{"appId":"fdd72bam"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"arcus-11aecf6e","hasAudioNarration":false,"actualSubdomain":"arcus-11aecf6e","customDomains":["docs.arcus.xyz"],"gitSource":{"type":"github","owner":"dydxprotocol","repo":"v5-documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af6b1f7aa6a9b02a8ca4e72","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API reference","count":99},{"language":"default","tag":"Endpoints","count":69},{"language":"default","tag":"Public","count":36},{"language":"default","tag":"WebSocket","count":22},{"language":"default","tag":"Concepts","count":20},{"language":"default","tag":"Referral","count":17},{"language":"default","tag":"Exchange","count":13},{"language":"default","tag":"Market data","count":11},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Perpetuals","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6a0c053228609ad420f986bc","deploymentId":"69f19afe69cb5ad533409b0a","questionText":"How do I place an order","status":"active","generatedBy":"manual","createdAt":"2026-05-19T06:37:38.436Z","updatedAt":"2026-05-19T06:37:38.436Z","__v":0}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/onboarding/revoke-api-key","slug":"/api-reference/onboarding/revoke-api-key","pageMetadata":{"title":"Revoke API key","description":"Revoke (remove) an existing API key.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/revokeApiKey","href":"/api-reference/onboarding/revoke-api-key","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Revoke (remove) an existing API key.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(Note,{children:[_jsx(_components.strong,{children:`The response body shown here is a static example, not live data.`}),` After you click `,_jsx(_components.strong,{children:`Send`}),`, your live result appears in a separate panel headed `,_jsx(_components.strong,{children:`200 OK`}),`. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use `,_jsx(_components.strong,{children:`Send`}),`, or call the endpoint, for current values.`]}),`\n`,_jsxs(_components.p,{children:[`Revoke (remove) an existing API key. The request is authenticated by a secp256k1 `,_jsx(_components.strong,{children:`EIP-712`}),` typed-data signature produced with the wallet that owns `,_jsx(_components.code,{children:`address`}),` (the same wallet that originally signed the matching `,_jsx(_components.code,{children:`createApiKey`}),`). The gateway recovers the signer and rejects mismatches with HTTP 401. This endpoint does `,_jsx(_components.strong,{children:`not`}),` require an `,_jsx(_components.code,{children:`X-API-Key`}),` header so the owner can still revoke a key that has been lost or compromised.`]}),`\n`,_jsxs(_components.p,{children:[`Revocation is scoped to `,_jsx(_components.code,{children:`(address, publicKey)`}),`: only the account that owns the key may revoke it. A revoke for a key not registered to the caller’s account returns HTTP 404 and is a no-op — no state is changed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`signing-the-request`,children:`Signing the request`}),`\n`,_jsxs(_components.p,{children:[`Identical to `,_jsx(_components.code,{children:`createApiKey`}),` — same `,_jsx(_components.code,{children:`Arcus API Key`}),` domain, same per-environment `,_jsx(_components.code,{children:`chainId`}),` values, no `,_jsx(_components.code,{children:`verifyingContract`}),` — except the primary type is `,_jsx(_components.code,{children:`RevokeApiKey`}),` and the message `,_jsxs(_components.strong,{children:[`does not include `,_jsx(_components.code,{children:`validUntil`})]}),` (revoke applies regardless of the key’s remaining lifetime).`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Domain`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"name\": \"Arcus API Key\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"version\": \"1\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"chainId\": \u003crootchain chain id, e.g. 4663>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Types`})}),`\n`,_jsxs(_components.p,{children:[`Same accountIndex rule as `,_jsx(_components.code,{children:`createApiKey`}),`: sign the accountIndex-bearing type, and for a non-zero index — including the `,_jsx(_components.code,{children:`255`}),` all-subaccounts sentinel — it is mandatory. The value must match the scope the key was created against. Index 0 may still use the original index-less type.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`RevokeApiKey(string apiWalletName,string apiWalletPublicKey,uint8 accountIndex)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`RevokeApiKey(string apiWalletName,string apiWalletPublicKey)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Replay protection (recommended)`})}),`\n`,_jsxs(_components.p,{children:[`When including a `,_jsx(_components.code,{children:`nonce`}),` in the request body, sign the combined type that binds both replay protection and subaccount scope:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`RevokeApiKey(string apiWalletName,string apiWalletPublicKey,string nonce,uint8 accountIndex)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`nonce`}),` and `,_jsx(_components.code,{children:`accountIndex`}),` in the message must match the request body. For `,_jsx(_components.code,{children:`accountIndex`}),` 0 the server also accepts the nonce-only type without `,_jsx(_components.code,{children:`accountIndex`}),` in the signed payload (backward compatibility).`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Message`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"apiWalletName\": \"\u003capiWalletName>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"apiWalletPublicKey\": \"\u003cpublicKey>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"accountIndex\": \u003caccountIndex>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Complete `,_jsx(_components.code,{children:`eth_signTypedData_v4`}),` call (ethers v6 / viem)`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`21`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`21`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// ethers v6`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` domain`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Arcus API Key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` version:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` chainId:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 4663`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // production`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` types`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` RevokeApiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"apiWalletName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"string\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"apiWalletPublicKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"string\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` message`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiWalletName:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Arcus\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiWalletPublicKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` pubKeyHex`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // 64 hex chars, no 0x`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` sig`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` signer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`signTypedData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`domain`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`types`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Split into r / s / v for the request body:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` r`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`slice`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`66`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` s`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0x\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` +`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`slice`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`66`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`130`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` v`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0x\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` +`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`slice`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`130`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`132`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// viem`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` sig`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` walletClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`signTypedData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`domain`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`types`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`primaryType:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"RevokeApiKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Revokes signed by any wallet other than the original creator are rejected.`}),`\n`,_jsx(Heading,{level:`3`,id:`legacy-eip-191-signatures-deprecated`,children:`Legacy EIP-191 signatures (deprecated)`}),`\n`,_jsxs(_components.p,{children:[`This endpoint previously accepted an EIP-191 `,_jsx(_components.code,{children:`personal_sign`}),` signature over the canonical JSON message`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{\"apiWalletName\":\"\u003capiWalletName>\",\"apiWalletPublicKey\":\"\u003cpublicKey>\"}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`(keys in this exact order, no whitespace, no trailing newline). During the migration window the server accepts `,_jsx(_components.strong,{children:`either`}),` scheme: it verifies the EIP-712 signature first and falls back to legacy EIP-191. EIP-191 is deprecated and will be `,_jsx(_components.strong,{children:`rejected once the migration window closes`}),` — migrate existing integrations to EIP-712 typed data; new integrations must use EIP-712 only.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Revoke API key","description":"Revoke (remove) an existing API key.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/revokeApiKey","href":"/api-reference/onboarding/revoke-api-key","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Signing the request","slug":"signing-the-request","depth":2,"children":[{"title":"Legacy EIP-191 signatures (deprecated)","slug":"legacy-eip-191-signatures-deprecated","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Revoke API key","description":"Revoke (remove) an existing API key.","operationId":"revokeApiKey","tags":["Onboarding"],"requestBody":"73b90610-0a55-4b12-b49a-c09d324a215c","responses":{"200":"6a462411-bb09-4c72-a3af-1a44d22e0ff7","400":"85fe051f-428f-4d22-bf74-5c2d88c0f0ee","401":"82878872-7a0e-400a-8540-8a1044146bb9","404":"be544ca6-30a3-4728-a2b8-02cd5817ddb2","409":"49f7120b-4284-4c6a-ad01-202b060d9b51","429":"28ea30ea-10a1-4d91-b573-54b25ebc1f26","500":"cc42f2e2-dc89-4c64-97f7-3cd13f865a5c"},"x-mint":{"content":"\u003cNote>**The response body shown here is a static example, not live data.** After you click **Send**, your live result appears in a separate panel headed **200 OK**. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use **Send**, or call the endpoint, for current values.\u003c/Note>\n\nRevoke (remove) an existing API key. The request is authenticated by a secp256k1 **EIP-712** typed-data signature produced with the wallet that owns `address` (the same wallet that originally signed the matching `createApiKey`). The gateway recovers the signer and rejects mismatches with HTTP 401. This endpoint does **not** require an `X-API-Key` header so the owner can still revoke a key that has been lost or compromised.\n\nRevocation is scoped to `(address, publicKey)`: only the account that owns the key may revoke it. A revoke for a key not registered to the caller's account returns HTTP 404 and is a no-op — no state is changed.\n\n## Signing the request\n\nIdentical to `createApiKey` — same `Arcus API Key` domain, same per-environment `chainId` values, no `verifyingContract` — except the primary type is `RevokeApiKey` and the message **does not include `validUntil`** (revoke applies regardless of the key's remaining lifetime).\n\n**Domain**\n\n```\n{\n \"name\": \"Arcus API Key\",\n \"version\": \"1\",\n \"chainId\": \u003crootchain chain id, e.g. 4663>\n}\n```\n\n**Types**\n\nSame accountIndex rule as `createApiKey`: sign the accountIndex-bearing type, and for a non-zero index — including the `255` all-subaccounts sentinel — it is mandatory. The value must match the scope the key was created against. Index 0 may still use the original index-less type.\n\n```\nRevokeApiKey(string apiWalletName,string apiWalletPublicKey,uint8 accountIndex)\n```\n\n```\nRevokeApiKey(string apiWalletName,string apiWalletPublicKey)\n```\n\n**Replay protection (recommended)**\n\nWhen including a `nonce` in the request body, sign the combined type that binds both replay protection and subaccount scope:\n\n```\nRevokeApiKey(string apiWalletName,string apiWalletPublicKey,string nonce,uint8 accountIndex)\n```\n\nThe `nonce` and `accountIndex` in the message must match the request body. For `accountIndex` 0 the server also accepts the nonce-only type without `accountIndex` in the signed payload (backward compatibility).\n\n**Message**\n\n```\n{\n \"apiWalletName\": \"\u003capiWalletName>\",\n \"apiWalletPublicKey\": \"\u003cpublicKey>\",\n \"accountIndex\": \u003caccountIndex>\n}\n```\n\n**Complete `eth_signTypedData_v4` call (ethers v6 / viem)**\n\n```js\n// ethers v6\nconst domain = {\n name: \"Arcus API Key\",\n version: \"1\",\n chainId: 4663 // production\n};\nconst types = {\n RevokeApiKey: [\n { name: \"apiWalletName\", type: \"string\" },\n { name: \"apiWalletPublicKey\", type: \"string\" }\n ]\n};\nconst message = {\n apiWalletName: \"Arcus\",\n apiWalletPublicKey: pubKeyHex // 64 hex chars, no 0x\n};\nconst sig = await signer.signTypedData(domain, types, message);\n// Split into r / s / v for the request body:\nconst r = sig.slice(0, 66);\nconst s = \"0x\" + sig.slice(66, 130);\nconst v = \"0x\" + sig.slice(130, 132);\n```\n\n```ts\n// viem\nconst sig = await walletClient.signTypedData({ domain, types, primaryType: \"RevokeApiKey\", message });\n```\n\nRevokes signed by any wallet other than the original creator are rejected.\n\n### Legacy EIP-191 signatures (deprecated)\n\nThis endpoint previously accepted an EIP-191 `personal_sign` signature over the canonical JSON message\n\n```\n{\"apiWalletName\":\"\u003capiWalletName>\",\"apiWalletPublicKey\":\"\u003cpublicKey>\"}\n```\n\n(keys in this exact order, no whitespace, no trailing newline). During the migration window the server accepts **either** scheme: it verifies the EIP-712 signature first and falls back to legacy EIP-191. EIP-191 is deprecated and will be **rejected once the migration window closes** — migrate existing integrations to EIP-712 typed data; new integrations must use EIP-712 only."},"method":"post","type":"path","servers":["8bcbded4-ced7-41f7-9103-ef78afb86c4b","db341041-78f8-47d5-bb08-4c97d4cfedb3"],"security":[],"path":"/v1/revokeApiKey","baseUrlOptions":["https://api.arcus.xyz","https://api.testnet.arcus.xyz"],"title":"Revoke API key","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","publicKey","apiWalletName","signature"],"properties":{"address":{"type":"string","pattern":"^(0x|0X)?[0-9a-fA-F]{40}$","description":"Ethereum address that owns the API key to revoke.","examples":["0x742d35cc6634c0532925a3b844bc9e7595f2bd18"],"isRequired":true,"uniqueKey":"address","typeLabel":"string"},"publicKey":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","minLength":64,"maxLength":64,"description":"Hex-encoded Ed25519 public key that identifies the API key to revoke.","examples":["a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"],"isRequired":true,"uniqueKey":"publicKey","typeLabel":"string"},"apiWalletName":{"type":"string","minLength":1,"maxLength":64,"description":"Name of the API wallet (included in the signing message, must match createAPIKey).","examples":["Arcus"],"isRequired":true,"uniqueKey":"apiWalletName","typeLabel":"string"},"signature":{"type":"object","description":"secp256k1 **EIP-712** typed-data signature `(r, s, v)` over the `RevokeApiKey` payload (`eth_signTypedData_v4`), produced by the wallet that owns `address` — must be the same wallet that originally signed the matching `createApiKey`. See the `POST /v1/revokeApiKey` endpoint description for the exact domain, types, and message. During the migration window the deprecated legacy EIP-191 `personal_sign` scheme is also accepted. Requests where the recovered signer does not equal `address` are rejected with HTTP 401.","required":["r","s","v"],"properties":{"r":{"type":"string","pattern":"^(?=.*[1-9a-fA-F])(0x)?[0-9a-fA-F]{1,64}$","minLength":1,"maxLength":66,"description":"Hex-encoded r component of the secp256k1 signature (up to 32 bytes; leading zeros may be omitted, but the value must be non-zero).","examples":["0x69e7308419769592ec8363d002e3077e803e403b4e1920fc30e485b63d76e2a3"],"isRequired":true,"uniqueKey":"signature.r","typeLabel":"string"},"s":{"type":"string","pattern":"^(?=.*[1-9a-fA-F])(0x)?[0-9a-fA-F]{1,64}$","minLength":1,"maxLength":66,"description":"Hex-encoded s component of the secp256k1 signature (up to 32 bytes; leading zeros may be omitted, but the value must be non-zero).","examples":["0x0980d0742c9e65037af9d54e559704ae2c2285f3112a9d89544191a740f103cf"],"isRequired":true,"uniqueKey":"signature.s","typeLabel":"string"},"v":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{1,8}$","minLength":1,"maxLength":10,"description":"Hex-encoded recovery byte (`v`). Accepts any standard Ethereum encoding: raw recovery id (`0x00` / `0x01`), legacy (`0x1b` / `0x1c`), or EIP-155 chain-bound values; the gateway normalizes internally. Most wallet signing APIs (`eth_signTypedData_v4`, `personal_sign`) emit `0x1b`/`0x1c`.","examples":["0x1c"],"isRequired":true,"uniqueKey":"signature.v","typeLabel":"string"}},"isRequired":true,"uniqueKey":"signature","typeLabel":"object"},"accountIndex":{"type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,255],"description":"Subaccount scope the key belongs to: `0`–`9` for a single subaccount, or `255` for an all-subaccounts key. Defaults to 0; must match the value the key was created against. Bound into the signed payload with the same rule as `createApiKey` (any non-zero value, including `255`, requires the accountIndex-bearing `RevokeApiKey` type).","uniqueKey":"accountIndex","typeLabel":"enum\u003cinteger>"},"nonce":{"type":"string","maxLength":64,"description":"Optional replay-protection nonce, single-use per `(address, accountIndex)` when included in the signed EIP-712 payload. See `CreateApiKeyRequest.nonce` for format and migration-window behavior.","examples":["a1b2c3d4-5f60-7182-93a4-b5c6d7e8f901"],"uniqueKey":"nonce","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"address":"0x742d35cc6634c0532925a3b844bc9e7595f2bd18","publicKey":"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2","apiWalletName":"Arcus","signature":{"r":"0x69e7308419769592ec8363d002e3077e803e403b4e1920fc30e485b63d76e2a3","s":"0x0980d0742c9e65037af9d54e559704ae2c2285f3112a9d89544191a740f103cf","v":"0x1c"},"nonce":"a1b2c3d4-5f60-7182-93a4-b5c6d7e8f901"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"6a462411-bb09-4c72-a3af-1a44d22e0ff7":{"description":"API key revocation accepted and dispatched to the matching engine.","content":{"application/json":{"schema":{"type":"object","required":["apiKey","address","revokedAt"],"properties":{"apiKey":{"type":"string","description":"API key (hex string) that was revoked.","isRequired":true,"uniqueKey":"apiKey","typeLabel":"string"},"address":{"type":"string","pattern":"^(0x|0X)?[0-9a-fA-F]{40}$","description":"20-byte EVM address as hex: optional `0x` or `0X` prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase `a`–`f` after `0x`.\n","isRequired":true,"uniqueKey":"address","typeLabel":"string"},"revokedAt":{"type":"integer","format":"int64","description":"Revocation timestamp (epoch microseconds).","isRequired":true,"uniqueKey":"revokedAt","typeLabel":"integer\u003cint64>"},"allSubaccounts":{"type":"boolean","description":"True when the revoked key traded every subaccount of `address`. Populated on every response; use it as the scope discriminator (optional in schema for deploy-order compatibility).","uniqueKey":"allSubaccounts","typeLabel":"boolean"},"accountIndex":{"type":"integer","minimum":0,"maximum":9,"description":"The single subaccount (`0`–`9`) the revoked key traded. Present only when `allSubaccounts` is false; omitted for an all-subaccounts key.","uniqueKey":"accountIndex","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"apiKey":"\u003cstring>","address":"\u003cstring>","revokedAt":123,"allSubaccounts":true,"accountIndex":4}}},"exampleType":"generated"}},"exampleType":"generated"},"85fe051f-428f-4d22-bf74-5c2d88c0f0ee":{"description":"Validation error (missing fields, malformed `(r, s, v)` signature, bad address).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED"}}},"exampleType":"generated"}},"exampleType":"generated"},"82878872-7a0e-400a-8540-8a1044146bb9":{"description":"Signature verification failed. The address recovered from `signature` (EIP-712, or legacy EIP-191 during the migration window) did not match `address`, or the wallet that signed this revoke is not the wallet that originally created the API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED"}}},"exampleType":"generated"}},"exampleType":"generated"},"be544ca6-30a3-4728-a2b8-02cd5817ddb2":{"description":"Not found: the `publicKey` is not registered to the caller's account (including cross-account revoke attempts). No destructive side effects are performed.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED"}}},"exampleType":"generated"}},"exampleType":"generated"},"49f7120b-4284-4c6a-ad01-202b060d9b51":{"description":"Conflict: the signed `nonce` was already consumed (replay). Only applies when the request includes a nonce bound into the EIP-712 signature.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED"}}},"exampleType":"generated"}},"exampleType":"generated"},"28ea30ea-10a1-4d91-b573-54b25ebc1f26":{"description":"Rate limit exceeded. Two signals are returned, designed to coexist with both naive HTTP clients and rate-limit-aware SDK clients:\n\n- `Retry-After` header (integer seconds, RFC 7231 compliant). Rounds up — clients that obey this header sleep at least as long as required. Safe for generic HTTP libraries to read.\n- JSON body `retryAfterMs` (precise milliseconds, matches the server's internal computation). Sophisticated clients should prefer this over the header to avoid the round-up overshoot.\n- JSON body `reason` indicates which rate-limit layer rejected: `ip` (per-IP weight bucket), `account_empty` (per-subaccount pool fully exhausted, in drip throttle), `account_partial` (pool has some credit but not enough for this batch — split the request smaller to drain), or `unknown` (defensive fallback).\n- JSON body `clientId` (single-order endpoints) or `clientIds` (batch endpoints) echoes the request's client-supplied order identifier(s) so the client can correlate the rejection to a specific order request.\n","headers":{"Retry-After":{"description":"Seconds the client should wait before retrying the request.","schema":{"type":"integer","minimum":1,"example":1}}},"content":{"application/json":{"schema":{"description":"429 response body shape. Extends the generic `Error` with two rate-limit-specific fields:\n\n- `reason` — which limiter rejected the request. Stable string enum; new values may be added in future versions, so clients should treat unknown values as opaque.\n- `retryAfterMs` — precise milliseconds the client should wait before retrying. The HTTP `Retry-After` header carries the same information rounded up to whole seconds (RFC 7231); prefer this field when sub-second precision matters.\n","type":"object","required":["error"],"properties":{"error":{"type":"string","example":"rate limited","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"reason":{"type":"string","enum":["ip","account_empty","account_partial","unknown"],"description":"Layer that rejected the request:\n * `ip` — per-IP weight bucket exhausted.\n * `account_empty` — per-subaccount pool fully exhausted; the\n drip-throttle has no token available either.\n * `account_partial` — pool has some credit but not enough\n for this batch. Split the request into smaller chunks to\n drain the remaining headroom.\n * `unknown` — defensive fallback; clients should retry per\n `retryAfterMs` and report the occurrence.\n","uniqueKey":"reason","typeLabel":"enum\u003cstring>"},"retryAfterMs":{"type":"integer","format":"int64","minimum":0,"description":"Milliseconds to wait before retrying. Matches the precise wait the rate limiter computed (the `Retry-After` header rounds up to the next whole second).","uniqueKey":"retryAfterMs","typeLabel":"integer\u003cint64>"},"clientId":{"type":"string","description":"Echo of the request's client-supplied `clientId`, so the client can correlate the rejection to a specific order request. Present only on single-order endpoints (placeOrder, modifyOrder, cancelOrder) when the request carried a `clientId`. Omitted on batch endpoints (see `clientIds`) and when the request had none.\n","uniqueKey":"clientId","typeLabel":"string"},"clientIds":{"type":"array","items":{"type":"string","uniqueKey":"clientIds.items.[INDEX]","typeLabel":"string"},"description":"Echo of every client-supplied `clientId` in a batch request (batchPlaceOrders, batchCancelOrders), positionally aligned with the submitted `orders` / `cancels` array. A batch is rejected all-or-nothing, so every listed order was rejected; the echo lets a client submitting multiple batches concurrently correlate the 429 to a specific batch. An entry is empty when that element carried no `clientId` (e.g. a cancel-by-orderId). Omitted on single-order endpoints (see `clientId`).\n","uniqueKey":"clientIds","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"rate limited","reason":"account_empty","retryAfterMs":850,"clientId":"my-order-42"},"examples":{"Example":{"title":"Example","value":{"error":"rate limited","reason":"account_empty","retryAfterMs":850,"clientId":"my-order-42"}}},"exampleType":"examples"}},"exampleType":"examples"},"cc42f2e2-dc89-4c64-97f7-3cd13f865a5c":{"description":"Internal error (e.g. failed to dispatch revoke operation).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{},"servers":{"8bcbded4-ced7-41f7-9103-ef78afb86c4b":{"url":"https://api.arcus.xyz","description":"Mainnet"},"db341041-78f8-47d5-bb08-4c97d4cfedb3":{"url":"https://api.testnet.arcus.xyz","description":"Testnet"}}},"originalFileLocation":"api-reference/openapi.yml"},"subdomain":"arcus-11aecf6e","siteName":"Arcus Docs","title":"Revoke API key - Arcus Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T03:48:06.537Z","originalFileLocation":"api-reference/onboarding/revoke-api-key.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Revoke (remove) an existing API key.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Arcus Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_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/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Revoke API key - Arcus Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Revoke (remove) an existing API key.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Arcus Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://arcus-11aecf6e.mintlify.site/_mintlify/api/og/v2?division=Onboarding\u0026amp;title=Revoke+API+key\u0026amp;description=Revoke+%28remove%29+an+existing+API+key.\u0026amp;theme=8f431044d56cd21a41b03f79\u0026amp;signature=cab3915d68cf55045761746da4b1b9b9476bec2f4004a80829727e709be0397a\">\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=\"Revoke API key - Arcus Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Revoke (remove) an existing API key.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://arcus-11aecf6e.mintlify.site/_mintlify/api/og/v2?division=Onboarding\u0026amp;title=Revoke+API+key\u0026amp;description=Revoke+%28remove%29+an+existing+API+key.\u0026amp;theme=8f431044d56cd21a41b03f79\u0026amp;signature=cab3915d68cf55045761746da4b1b9b9476bec2f4004a80829727e709be0397a\">\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/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Arcus Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/onboarding/revoke-api-key.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.arcus.xyz/#organization\",\"name\":\"Arcus Docs\",\"url\":\"https://docs.arcus.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/light.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=9bbd1de2de2a31d08c50e0d58bdac466\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.arcus.xyz#website\",\"name\":\"Arcus Docs\",\"url\":\"https://docs.arcus.xyz\",\"publisher\":{\"@id\":\"https://docs.arcus.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key#webpage\",\"url\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key\",\"name\":\"Revoke API key\",\"description\":\"Revoke (remove) an existing API key.\",\"dateModified\":\"2026-11-12T03:48:06.537Z\",\"isPartOf\":{\"@id\":\"https://docs.arcus.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.arcus.xyz/api-reference/public/service-info\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Onboarding\",\"item\":\"https://docs.arcus.xyz/api-reference/onboarding/get-api-keys\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Revoke API key\",\"item\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key#apireference\",\"headline\":\"Revoke API key\",\"name\":\"Revoke API key\",\"description\":\"Revoke (remove) an existing API key.\",\"url\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key\",\"mainEntityOfPage\":{\"@id\":\"https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key#webpage\"},\"dateModified\":\"2026-11-12T03:48:06.537Z\",\"publisher\":{\"@id\":\"https://docs.arcus.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.arcus.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Arcus Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Arcus Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/onboarding/revoke-api-key.md","siteName":"Arcus Docs","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/fund-testnet-account"}]},{"tab":"Concepts","pages":[{"title":"Concepts","href":"/concepts/onboarding"}]},{"tab":"API reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"WebSocket","href":"/api-reference/websocket"},{"title":"Rate limits","href":"/api-reference/rate-limits"}]},{"group":"Endpoints","pages":[{"group":"Public","pages":[{"title":"Service info","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /","href":"/api-reference/public/service-info"},{"title":"Health check","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /health","href":"/api-reference/public/health-check"},{"title":"Get L2 orderbook snapshot","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/l2OrderBook/{market}","href":"/api-reference/public/get-l2-orderbook-snapshot"},{"title":"Get Best Bid Offer (BBO)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/bbo/{market}","href":"/api-reference/public/get-best-bid-offer-bbo"},{"title":"Get current server time","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/time","href":"/api-reference/public/get-current-server-time"},{"title":"Get all mid prices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/mids","href":"/api-reference/public/get-all-mid-prices"},{"title":"Get live prices for all markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/prices","href":"/api-reference/public/get-live-prices-for-all-markets"},{"title":"Get fee tier table","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/feetiers","href":"/api-reference/public/get-fee-tier-table"},{"title":"Get referral commission rate schedule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/commissionrates","href":"/api-reference/public/get-referral-commission-rate-schedule"},{"title":"Get markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/markets","href":"/api-reference/public/get-markets"},{"title":"Get market fee schedules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/markets/feeSchedules","href":"/api-reference/public/get-market-fee-schedules"},{"title":"Get corporate actions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/corporateActions","href":"/api-reference/public/get-corporate-actions"},{"title":"Get corporate actions for a market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/corporateActions/{market_id}","href":"/api-reference/public/get-corporate-actions-for-a-market"},{"title":"Get spot collateral assets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotAssets","href":"/api-reference/public/get-spot-collateral-assets"},{"title":"Get global lending attributes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/lendingAttributes","href":"/api-reference/public/get-global-lending-attributes"},{"title":"Get recent public trades","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/trades","href":"/api-reference/public/get-recent-public-trades"},{"title":"Get a single trade by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/trade/{tradeId}","href":"/api-reference/public/get-a-single-trade-by-id"},{"title":"Get OHLCV candles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/candles","href":"/api-reference/public/get-ohlcv-candles"},{"title":"Get open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/openOrders","href":"/api-reference/public/get-open-orders"},{"title":"Get order history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/orders","href":"/api-reference/public/get-order-history"},{"title":"Get fills","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fills","href":"/api-reference/public/get-fills"},{"title":"Get spot fills","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotFills","href":"/api-reference/public/get-spot-fills"},{"title":"Get fill by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fill/{tradeId}","href":"/api-reference/public/get-fill-by-id"},{"title":"Get account transfer updates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/accountTransferUpdates","href":"/api-reference/public/get-account-transfer-updates"},{"title":"Get funding payments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/funding","href":"/api-reference/public/get-funding-payments"},{"title":"Get interest payments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/interest","href":"/api-reference/public/get-interest-payments"},{"title":"Get market funding rates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fundingRates","href":"/api-reference/public/get-market-funding-rates"},{"title":"Get portfolio history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/portfolio","href":"/api-reference/public/get-portfolio-history"},{"title":"Get current rate-limit usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/rateLimit","href":"/api-reference/public/get-current-rate-limit-usage"},{"title":"Get positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/positions","href":"/api-reference/public/get-positions"},{"title":"Get spot positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotPositions","href":"/api-reference/public/get-spot-positions"},{"title":"Get account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/account","href":"/api-reference/public/get-account"},{"title":"Get account stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/account/stats","href":"/api-reference/public/get-account-stats"},{"title":"Get order status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/order/{orderId}","href":"/api-reference/public/get-order-status"},{"title":"Get leverage and margin mode for an account across all markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/leverages","href":"/api-reference/public/get-leverage-and-margin-mode-for-an-account-across-all-markets"},{"title":"Get the all-traders leaderboard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/leaderboard","href":"/api-reference/public/get-the-all-traders-leaderboard"}]},{"group":"Exchange","pages":[{"title":"Place order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/placeOrder","href":"/api-reference/exchange/place-order"},{"title":"Place batch orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchPlaceOrders","href":"/api-reference/exchange/place-batch-orders"},{"title":"Cancel order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/cancelOrder","href":"/api-reference/exchange/cancel-order"},{"title":"Batch cancel orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchCancelOrders","href":"/api-reference/exchange/batch-cancel-orders"},{"title":"Schedule cancel-all (dead man's switch)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/scheduleCancel","href":"/api-reference/exchange/schedule-cancel-all-dead-mans-switch"},{"title":"Cancel all open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/cancelAllOrders","href":"/api-reference/exchange/cancel-all-open-orders"},{"title":"Modify order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/modifyOrder","href":"/api-reference/exchange/modify-order"},{"title":"Batch modify orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchModifyOrders","href":"/api-reference/exchange/batch-modify-orders"},{"title":"Set leverage for a market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/setLeverage","href":"/api-reference/exchange/set-leverage-for-a-market"},{"title":"Add or remove margin on an isolated-mode position","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/adjustIsolatedMargin","href":"/api-reference/exchange/add-or-remove-margin-on-an-isolated-mode-position"},{"title":"Sell spot collateral to settle the account's loan","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/settleLoan","href":"/api-reference/exchange/sell-spot-collateral-to-settle-the-accounts-loan"},{"title":"Submit withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/withdraw","href":"/api-reference/exchange/submit-withdrawal"},{"title":"Submit internal transfer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/transfer","href":"/api-reference/exchange/submit-internal-transfer"}]},{"group":"Onboarding","pages":[{"title":"Get API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/apiKeys","href":"/api-reference/onboarding/get-api-keys"},{"title":"Create API key","description":"Create an API key for the ethereum address.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/createApiKey","href":"/api-reference/onboarding/create-api-key"},{"title":"Revoke API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/revokeApiKey","href":"/api-reference/onboarding/revoke-api-key"}]},{"group":"Referral","pages":[{"title":"Create referral code","description":"Creates a new referral code for the authenticated affiliate. Requires Ed25519 signature. The `address` in the body must match the API key's master Ethereum address.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/createCode","href":"/api-reference/referral/create-referral-code"},{"title":"Register as referee","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/registerAffiliate","href":"/api-reference/referral/register-as-referee"},{"title":"Update kickback rate","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/kickback","href":"/api-reference/referral/update-kickback-rate"},{"title":"Revoke referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/revokeCode","href":"/api-reference/referral/revoke-referral-code"},{"title":"Rename referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/modifyCode","href":"/api-reference/referral/rename-referral-code"},{"title":"Claim accrued commission","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/claim","href":"/api-reference/referral/claim-accrued-commission"},{"title":"Get affiliate info","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/info","href":"/api-reference/referral/get-affiliate-info"},{"title":"Get the caller's referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/code","href":"/api-reference/referral/get-the-callers-referral-code"},{"title":"Get referees","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/referees","href":"/api-reference/referral/get-referees"},{"title":"Get my referrer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/myReferrer","href":"/api-reference/referral/get-my-referrer"},{"title":"Get affiliate leaderboard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/leaderboard","href":"/api-reference/referral/get-affiliate-leaderboard"},{"title":"Get affiliate commission history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/commissions","href":"/api-reference/referral/get-affiliate-commission-history"},{"title":"Get affiliate claim history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/claims","href":"/api-reference/referral/get-affiliate-claim-history"},{"title":"Look up a single claim","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/claimStatus","href":"/api-reference/referral/look-up-a-single-claim"},{"title":"Check whether a referral code is available","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/codeAvailable","href":"/api-reference/referral/check-whether-a-referral-code-is-available"},{"title":"List the caller's invite codes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/inviteCodes","href":"/api-reference/referral/list-the-callers-invite-codes"},{"title":"Redeem an invite code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/redeemInvite","href":"/api-reference/referral/redeem-an-invite-code"}]}]},{"group":"WebSocket","pages":[{"group":"Market data","pages":[{"asyncapi":"api-reference/asyncapi.yaml l2Orderbook","href":"/api-reference/market-data/l2orderbook","title":"L2 orderbook","version":null},{"asyncapi":"api-reference/asyncapi.yaml l2OrderbookUpdates","href":"/api-reference/market-data/l2orderbookupdates","title":"L2 orderbook updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml trades","href":"/api-reference/market-data/trades","title":"Trades","version":null},{"asyncapi":"api-reference/asyncapi.yaml markets","href":"/api-reference/market-data/markets","title":"Markets","version":null},{"asyncapi":"api-reference/asyncapi.yaml oraclePrices","href":"/api-reference/market-data/oracleprices","title":"Oracle prices","version":null},{"asyncapi":"api-reference/asyncapi.yaml bbo","href":"/api-reference/market-data/bbo","title":"Bbo","version":null},{"asyncapi":"api-reference/asyncapi.yaml lendingRates","href":"/api-reference/market-data/lendingrates","title":"Lending rates","version":null},{"asyncapi":"api-reference/asyncapi.yaml predictedFunding","href":"/api-reference/market-data/predictedfunding","title":"Predicted funding","version":null},{"asyncapi":"api-reference/asyncapi.yaml exchangeAttributeUpdates","href":"/api-reference/market-data/exchangeattributeupdates","title":"Exchange attribute updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml marketAttributes","href":"/api-reference/market-data/marketattributes","title":"Market attributes","version":null},{"asyncapi":"api-reference/asyncapi.yaml candles","href":"/api-reference/market-data/candles","title":"Candles","version":null}]},{"group":"Account","pages":[{"asyncapi":"api-reference/asyncapi.yaml account","href":"/api-reference/account/account","title":"Account","version":null},{"asyncapi":"api-reference/asyncapi.yaml positions","href":"/api-reference/account/positions","title":"Positions","version":null},{"asyncapi":"api-reference/asyncapi.yaml spotPositions","href":"/api-reference/account/spotpositions","title":"Spot positions","version":null},{"asyncapi":"api-reference/asyncapi.yaml userFills","href":"/api-reference/account/userfills","title":"User fills","version":null},{"asyncapi":"api-reference/asyncapi.yaml spotFills","href":"/api-reference/account/spotfills","title":"Spot fills","version":null},{"asyncapi":"api-reference/asyncapi.yaml settleLoanResults","href":"/api-reference/account/settleloanresults","title":"Settle loan results","version":null},{"asyncapi":"api-reference/asyncapi.yaml orders","href":"/api-reference/account/orders","title":"Orders","version":null},{"asyncapi":"api-reference/asyncapi.yaml funding","href":"/api-reference/account/funding","title":"Funding","version":null},{"asyncapi":"api-reference/asyncapi.yaml accountTransferUpdates","href":"/api-reference/account/accounttransferupdates","title":"Account transfer updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml accountAttributeUpdates","href":"/api-reference/account/accountattributeupdates","title":"Account attribute updates","version":null}]},{"group":"Trading","pages":[{"asyncapi":"api-reference/asyncapi.yaml orderOperations","href":"/api-reference/trading/orderoperations","title":"Order operations","version":null}]}]},{"group":"Changelog","pages":[{"title":"Changelog API (Mainnet)","href":"/changelog"},{"title":"Upcoming mainnet release","href":"/changelog/upcoming"},{"title":"Changelog API (Testnet)","href":"/changelog/testnet"},{"title":"Arcus Changelog","href":"/changelog/frontend"}]}]}]},"basePath":"","title":"Revoke API key - Arcus Docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}