Verify the signed challenge message and create an authenticated session.
Binds the caller-provided ed25519 session public key to the new session;
subsequent requests are signed with the matching private key.
How the signature is checked depends on the address. Almost every address
is verified by recovering the signing key, exactly as before. EIP-1271
verification applies only to an address that is BOTH eligible for
contract-signature login AND has contract code deployed on chain: an
eligible payout wallet that is an ordinary EOA is still verified by
recovery. The two are mutually exclusive, and the request is identical
either way — signature carries whatever the wallet produced, and no
field changes. The one bound is length: a contract signature over 8192
decoded bytes is refused as invalid rather than forwarded to the chain,
which is far above any realistic owner set.
Because deciding that requires reading the chain, this adds one
client-visible outcome the recovery path does not have: UNAVAILABLE (REST
503). It is retryable and is NOT a verdict on the signature. It covers
three cases, and an eligible address can see any of them even when it turns
out to be an EOA, because the code lookup happens first: the chain did not
answer, it did not answer within the deadline, or the server declined to
ask because its own concurrent-verification capacity was full. That last
one is local saturation rather than a chain fault, so an operator
diagnosing it should check this service before the RPC endpoint.
A rejected signature is 401, and so is a contract that rejects by
REVERTING: that is the wallet answering “no”, not a failure to ask.
Wallet authorization of the challenge message, hex with an optional 0x prefix. An EOA sends a 65-byte EIP-191 signature; a contract wallet verified under EIP-1271 sends whatever its own contract accepts, which is usually longer and need not be 65 bytes. Capped at 8192 decoded bytes (16386 characters with the prefix) — enough for well over a hundred owner slots — and a longer value is rejected as an invalid signature rather than forwarded to the chain.
Lowercase hex (64 chars) ed25519 public key generated locally by the SDK. Subsequent authenticated requests are signed with the matching private key. The wallet's signature on the challenge message proves the user authorized this specific public key.
Optional TraderCode captured at signup (e.g. from a ?ref=CODE link). When a user verifies for the very first time with a valid code, a referral relationship is recorded atomically. Ignored for users who already exist. A code that does not apply (unknown, the wallet's own, or a different referrer than the one the wallet already has) never blocks sign-in; VerifyResponse.referral_not_applied_reason says why.
Optional Mainnet invite code. Exactly 10 case-sensitive ASCII letters or digits. Required while Mainnet Invite Mode is enabled for any wallet without a Mainnet access grant, including existing accounts that never received one; ignored while Invite Mode is off and unnecessary once the wallet has access. A missing code is refused with 403 and code INVITE_CODE_REQUIRED; a wrong, redeemed or revoked code, or an unused code whose issuer is deactivated, with 403 and code INVITE_CODE_INVALID. A deactivated signing account is refused with 403 and code ACCOUNT_DEACTIVATED.
True when this verify created the user row — the wallet's first sign-in to THIS application. Identity is per (wallet, application), so a wallet already registered on another application is still is_new_user on its first sign-in to a new one. Use it to gate first-time UX (e.g. showing the optional "have a referral code?" input only to new users) and to confirm a fresh sign-up. False for every returning verify on this application.
True when a TraderCodes referral relationship was recorded on this verify: a valid, non-self TraderCode presented on the wallet's first sign-in to THIS application resolved to a known referrer. Scoped like is_new_user (per (wallet, application)), so a wallet already registered on another application can still see this on its first sign-in to a new one. False for a returning user of this application, an absent or unknown code, a self-referral, or a wallet that already has a different referrer (see referral_not_applied_reason). Confirms the referral landed for the signup success screen.
Why the TraderCode presented on this sign-up did not apply. Absent when it
applied, when no code was presented, and for a returning user of this
application.
Available options:
REFERRAL_NOT_APPLIED_REASON_UNSPECIFIED,
REFERRAL_NOT_APPLIED_REASON_ALREADY_REFERRED,
REFERRAL_NOT_APPLIED_REASON_UNKNOWN_CODE,
REFERRAL_NOT_APPLIED_REASON_SELF_REFERRAL
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Monaco Protocol SDK v1.1.14","description":"High-performance spot and perpetuals trading infrastructure built on Sei. Complete documentation for builders integrating Monaco Protocol into their applications.","colors":{"primary":"#233329","light":"#3A5544","dark":"#1A2620"},"logo":{"light":"https://mintcdn.com/monaco/Puhxf4Whf6wQMalZ/logo.png?fit=max\u0026auto=format\u0026n=Puhxf4Whf6wQMalZ\u0026q=85\u0026s=6b0d46b12348c8cb28126629f97faae0","dark":"https://mintcdn.com/monaco/Puhxf4Whf6wQMalZ/logo-white.png?fit=max\u0026auto=format\u0026n=Puhxf4Whf6wQMalZ\u0026q=85\u0026s=2e00e628ed93f72b88edb25eb8d8725e"},"favicon":"https://mintcdn.com/monaco/Puhxf4Whf6wQMalZ/logoMark.png?fit=max\u0026auto=format\u0026n=Puhxf4Whf6wQMalZ\u0026q=85\u0026s=7cfd00a92f26b8cb3855b908c31629b8","api":{"playground":{"proxy":false},"examples":{"prefill":true}},"contextual":{"options":["copy","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://0xmonaco.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"monaco","hasAudioNarration":false,"actualSubdomain":"monaco","customDomains":["docs.0xmonaco.com"],"gitSource":{"type":"github","owner":"monaco-research","repo":"monaco-core","deployBranch":"develop","contentDirectory":"docs/src","isPrivate":true,"mountPath":"","label":""},"feedback":{"issues":false,"edits":false,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5220a18e5830d252694aa","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"APIs","count":189},{"language":"default","tag":"REST API","count":166},{"language":"default","tag":"Libraries","count":27},{"language":"default","tag":"gRPC API","count":21},{"language":"default","tag":"Protobuf Reference","count":21},{"language":"default","tag":"Market","count":20},{"language":"default","tag":"TypeScript SDK","count":19},{"language":"default","tag":"Margin Accounts","count":19},{"language":"default","tag":"Orders","count":19},{"language":"default","tag":"Accounts","count":16}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/authservice/verify-signature-and-authenticate","slug":"/api-reference/authservice/verify-signature-and-authenticate","pageMetadata":{"title":"Verify signature and authenticate","description":"Verify signature and authenticate.\n\n Verify the signed challenge message and create an authenticated session.\n Binds the caller-provided ed25519 session public key to the new session;\n subsequent requests are signed with the matching private key.\n\n How the signature is checked depends on the address. Almost every address\n is verified by recovering the signing key, exactly as before. EIP-1271\n verification applies only to an address that is BOTH eligible for\n contract-signature login AND has contract code deployed on chain: an\n eligible payout wallet that is an ordinary EOA is still verified by\n recovery. The two are mutually exclusive, and the request is identical\n either way — `signature` carries whatever the wallet produced, and no\n field changes. The one bound is length: a contract signature over 8192\n decoded bytes is refused as invalid rather than forwarded to the chain,\n which is far above any realistic owner set.\n\n Because deciding that requires reading the chain, this adds one\n client-visible outcome the recovery path does not have: UNAVAILABLE (REST\n 503). It is retryable and is NOT a verdict on the signature. It covers\n three cases, and an eligible address can see any of them even when it turns\n out to be an EOA, because the code lookup happens first: the chain did not\n answer, it did not answer within the deadline, or the server declined to\n ask because its own concurrent-verification capacity was full. That last\n one is local saturation rather than a chain fault, so an operator\n diagnosing it should check this service before the RPC endpoint.\n\n A rejected signature is 401, and so is a contract that rejects by\n REVERTING: that is the wallet answering \"no\", not a failure to ask.","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/verify","href":"/api-reference/authservice/verify-signature-and-authenticate","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: [_jsx(_components.p, {\n children: \"Verify signature and authenticate.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Verify the signed challenge message and create an authenticated session.\\nBinds the caller-provided ed25519 session public key to the new session;\\nsubsequent requests are signed with the matching private key.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"How the signature is checked depends on the address. Almost every address\\nis verified by recovering the signing key, exactly as before. EIP-1271\\nverification applies only to an address that is BOTH eligible for\\ncontract-signature login AND has contract code deployed on chain: an\\neligible payout wallet that is an ordinary EOA is still verified by\\nrecovery. The two are mutually exclusive, and the request is identical\\neither way — \", _jsx(_components.code, {\n children: \"signature\"\n }), \" carries whatever the wallet produced, and no\\nfield changes. The one bound is length: a contract signature over 8192\\ndecoded bytes is refused as invalid rather than forwarded to the chain,\\nwhich is far above any realistic owner set.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Because deciding that requires reading the chain, this adds one\\nclient-visible outcome the recovery path does not have: UNAVAILABLE (REST\\n503). It is retryable and is NOT a verdict on the signature. It covers\\nthree cases, and an eligible address can see any of them even when it turns\\nout to be an EOA, because the code lookup happens first: the chain did not\\nanswer, it did not answer within the deadline, or the server declined to\\nask because its own concurrent-verification capacity was full. That last\\none is local saturation rather than a chain fault, so an operator\\ndiagnosing it should check this service before the RPC endpoint.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"A rejected signature is 401, and so is a contract that rejects by\\nREVERTING: that is the wallet answering “no”, not a failure to ask.\"\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":"Verify signature and authenticate","description":"Verify signature and authenticate.\n\n Verify the signed challenge message and create an authenticated session.\n Binds the caller-provided ed25519 session public key to the new session;\n subsequent requests are signed with the matching private key.\n\n How the signature is checked depends on the address. Almost every address\n is verified by recovering the signing key, exactly as before. EIP-1271\n verification applies only to an address that is BOTH eligible for\n contract-signature login AND has contract code deployed on chain: an\n eligible payout wallet that is an ordinary EOA is still verified by\n recovery. The two are mutually exclusive, and the request is identical\n either way — `signature` carries whatever the wallet produced, and no\n field changes. The one bound is length: a contract signature over 8192\n decoded bytes is refused as invalid rather than forwarded to the chain,\n which is far above any realistic owner set.\n\n Because deciding that requires reading the chain, this adds one\n client-visible outcome the recovery path does not have: UNAVAILABLE (REST\n 503). It is retryable and is NOT a verdict on the signature. It covers\n three cases, and an eligible address can see any of them even when it turns\n out to be an EOA, because the code lookup happens first: the chain did not\n answer, it did not answer within the deadline, or the server declined to\n ask because its own concurrent-verification capacity was full. That last\n one is local saturation rather than a chain fault, so an operator\n diagnosing it should check this service before the RPC endpoint.\n\n A rejected signature is 401, and so is a contract that rejects by\n REVERTING: that is the wallet answering \"no\", not a failure to ask.","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/verify","href":"/api-reference/authservice/verify-signature-and-authenticate","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["AuthService","Auth"],"summary":"Verify signature and authenticate","description":"Verify signature and authenticate.\n\n Verify the signed challenge message and create an authenticated session.\n Binds the caller-provided ed25519 session public key to the new session;\n subsequent requests are signed with the matching private key.\n\n How the signature is checked depends on the address. Almost every address\n is verified by recovering the signing key, exactly as before. EIP-1271\n verification applies only to an address that is BOTH eligible for\n contract-signature login AND has contract code deployed on chain: an\n eligible payout wallet that is an ordinary EOA is still verified by\n recovery. The two are mutually exclusive, and the request is identical\n either way — `signature` carries whatever the wallet produced, and no\n field changes. The one bound is length: a contract signature over 8192\n decoded bytes is refused as invalid rather than forwarded to the chain,\n which is far above any realistic owner set.\n\n Because deciding that requires reading the chain, this adds one\n client-visible outcome the recovery path does not have: UNAVAILABLE (REST\n 503). It is retryable and is NOT a verdict on the signature. It covers\n three cases, and an eligible address can see any of them even when it turns\n out to be an EOA, because the code lookup happens first: the chain did not\n answer, it did not answer within the deadline, or the server declined to\n ask because its own concurrent-verification capacity was full. That last\n one is local saturation rather than a chain fault, so an operator\n diagnosing it should check this service before the RPC endpoint.\n\n A rejected signature is 401, and so is a contract that rejects by\n REVERTING: that is the wallet answering \"no\", not a failure to ask.","operationId":"verify_signature","requestBody":"3b6e262c-690b-4300-945a-18552f501964","responses":{"200":"6eec6c6a-5541-4788-8f51-c9d2b9e68aae","400":"7370ad65-91f8-4a7d-b6d2-51c08b5eb786","401":"57da3a96-e853-4010-860c-84d5ef1405bd","403":"f9fd01ef-8329-4384-ba55-498272d59d3f","404":"3441c285-25ee-4334-be92-57663989ee20","429":"1309aa2a-fcfe-4128-9f6e-c703d3c44714","500":"724c5f91-3d0a-42a9-bd0b-0ded6bc58ff3","503":"e5e15003-63c4-449f-a3fe-e54eb40b743f"},"method":"post","type":"path","servers":["76af5a68-1490-444f-9e1c-a0268868c659"],"security":[],"path":"/api/v1/auth/verify","baseUrlOptions":["https://apimonaco.xyz"],"title":"Verify signature and authenticate","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.address":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","body.signature":"0x1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0","body.nonce":"abc123def456","body.sessionPublicKey":"3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29","body.clientId.oneOf.0":"monaco-frontend","body.chainId.oneOf.0":"1328","body.referralCode.oneOf.0":"0x1234567890abcdef1234567890abcdef12345678","body.inviteCode.oneOf.0":"aB3dE5gH7J"}],"disableProxy":true},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"required":["address","signature","nonce","sessionPublicKey"],"type":"object","properties":{"address":{"example":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","maxLength":42,"minLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","type":"string","description":"Ethereum wallet address","isRequired":true,"uniqueKey":"address","typeLabel":"string"},"signature":{"example":"0x1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0","maxLength":16386,"minLength":1,"type":"string","description":"Wallet authorization of the challenge message, hex with an optional 0x prefix. An EOA sends a 65-byte EIP-191 signature; a contract wallet verified under EIP-1271 sends whatever its own contract accepts, which is usually longer and need not be 65 bytes. Capped at 8192 decoded bytes (16386 characters with the prefix) — enough for well over a hundred owner slots — and a longer value is rejected as an invalid signature rather than forwarded to the chain.","isRequired":true,"uniqueKey":"signature","typeLabel":"string"},"nonce":{"example":"abc123def456","minLength":1,"type":"string","description":"Challenge nonce","isRequired":true,"uniqueKey":"nonce","typeLabel":"string"},"sessionPublicKey":{"example":"3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","type":"string","description":"Lowercase hex (64 chars) ed25519 public key generated locally by the SDK. Subsequent authenticated requests are signed with the matching private key. The wallet's signature on the challenge message proves the user authorized this specific public key.","isRequired":true,"uniqueKey":"sessionPublicKey","typeLabel":"string"},"clientId":{"oneOf":[{"example":"monaco-frontend","type":"string","description":"Optional application identifier","uniqueKey":"clientId.oneOf.0","typeLabel":"string"},{"example":"monaco-frontend","type":"null","description":"Optional application identifier","uniqueKey":"clientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"clientId","typeLabel":"string | null"},"chainId":{"oneOf":[{"example":"1328","type":"string","description":"Optional EVM chain ID supplied by SDK clients, as a JSON number or a decimal string (for example 1329 or \"1329\")","uniqueKey":"chainId.oneOf.0","typeLabel":"string"},{"example":"1328","type":"null","description":"Optional EVM chain ID supplied by SDK clients, as a JSON number or a decimal string (for example 1329 or \"1329\")","uniqueKey":"chainId.oneOf.1","typeLabel":"null"}],"uniqueKey":"chainId","typeLabel":"string | null"},"referralCode":{"oneOf":[{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Optional TraderCode captured at signup (e.g. from a `?ref=CODE` link). When a user verifies for the very first time with a valid code, a referral relationship is recorded atomically. Ignored for users who already exist. A code that does not apply (unknown, the wallet's own, or a different referrer than the one the wallet already has) never blocks sign-in; `VerifyResponse.referral_not_applied_reason` says why.","uniqueKey":"referralCode.oneOf.0","typeLabel":"string"},{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"null","description":"Optional TraderCode captured at signup (e.g. from a `?ref=CODE` link). When a user verifies for the very first time with a valid code, a referral relationship is recorded atomically. Ignored for users who already exist. A code that does not apply (unknown, the wallet's own, or a different referrer than the one the wallet already has) never blocks sign-in; `VerifyResponse.referral_not_applied_reason` says why.","uniqueKey":"referralCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"referralCode","typeLabel":"string | null"},"inviteCode":{"oneOf":[{"example":"aB3dE5gH7J","maxLength":10,"minLength":10,"pattern":"^[A-Za-z0-9]{10}$","type":"string","description":"Optional Mainnet invite code. Exactly 10 case-sensitive ASCII letters or digits. Required while Mainnet Invite Mode is enabled for any wallet without a Mainnet access grant, including existing accounts that never received one; ignored while Invite Mode is off and unnecessary once the wallet has access. A missing code is refused with 403 and code INVITE_CODE_REQUIRED; a wrong, redeemed or revoked code, or an unused code whose issuer is deactivated, with 403 and code INVITE_CODE_INVALID. A deactivated signing account is refused with 403 and code ACCOUNT_DEACTIVATED.","uniqueKey":"inviteCode.oneOf.0","typeLabel":"string"},{"example":"aB3dE5gH7J","maxLength":10,"minLength":10,"pattern":"^[A-Za-z0-9]{10}$","type":"null","description":"Optional Mainnet invite code. Exactly 10 case-sensitive ASCII letters or digits. Required while Mainnet Invite Mode is enabled for any wallet without a Mainnet access grant, including existing accounts that never received one; ignored while Invite Mode is off and unnecessary once the wallet has access. A missing code is refused with 403 and code INVITE_CODE_REQUIRED; a wrong, redeemed or revoked code, or an unused code whose issuer is deactivated, with 403 and code INVITE_CODE_INVALID. A deactivated signing account is refused with 403 and code ACCOUNT_DEACTIVATED.","uniqueKey":"inviteCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"inviteCode","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"address":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","signature":"0x1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0","nonce":"abc123def456","sessionPublicKey":"3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29","clientId":"monaco-frontend","chainId":"1328","referralCode":"0x1234567890abcdef1234567890abcdef12345678","inviteCode":"aB3dE5gH7J"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"6eec6c6a-5541-4788-8f51-c9d2b9e68aae":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"expiresAt":{"oneOf":[{"example":1699876543,"type":"integer","description":"Unix timestamp when the session expires","format":"int32","uniqueKey":"expiresAt.oneOf.0","typeLabel":"integer\u003cint32>"},{"example":1699876543,"type":"null","description":"Unix timestamp when the session expires","format":"int32","uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"expiresAt","typeLabel":"integer\u003cint32> | null"},"user":{"type":"object","properties":{"id":{"oneOf":[{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string","description":"User UUID","format":"uuid","uniqueKey":"user.id.oneOf.0","typeLabel":"string\u003cuuid>"},{"example":"123e4567-e89b-12d3-a456-426614174000","type":"null","description":"User UUID","format":"uuid","uniqueKey":"user.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"user.id","typeLabel":"string\u003cuuid> | null"},"address":{"oneOf":[{"example":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","type":"string","description":"Wallet address","pattern":"^0x[0-9a-fA-F]{40}$","minLength":42,"maxLength":42,"uniqueKey":"user.address.oneOf.0","typeLabel":"string"},{"example":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","type":"null","description":"Wallet address","pattern":"^0x[0-9a-fA-F]{40}$","minLength":42,"maxLength":42,"uniqueKey":"user.address.oneOf.1","typeLabel":"null"}],"uniqueKey":"user.address","typeLabel":"string | null"},"username":{"oneOf":[{"example":"trader123","type":"string","description":"Display username","uniqueKey":"user.username.oneOf.0","typeLabel":"string"},{"example":"trader123","type":"null","description":"Display username","uniqueKey":"user.username.oneOf.1","typeLabel":"null"}],"uniqueKey":"user.username","typeLabel":"string | null"}},"uniqueKey":"user","typeLabel":"object"},"isNewUser":{"oneOf":[{"example":true,"type":"boolean","description":"True when this verify created the user row — the wallet's first sign-in to THIS application. Identity is per `(wallet, application)`, so a wallet already registered on another application is still `is_new_user` on its first sign-in to a new one. Use it to gate first-time UX (e.g. showing the optional \"have a referral code?\" input only to new users) and to confirm a fresh sign-up. False for every returning verify on this application.","uniqueKey":"isNewUser.oneOf.0","typeLabel":"boolean"},{"example":true,"type":"null","description":"True when this verify created the user row — the wallet's first sign-in to THIS application. Identity is per `(wallet, application)`, so a wallet already registered on another application is still `is_new_user` on its first sign-in to a new one. Use it to gate first-time UX (e.g. showing the optional \"have a referral code?\" input only to new users) and to confirm a fresh sign-up. False for every returning verify on this application.","uniqueKey":"isNewUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"isNewUser","typeLabel":"boolean | null"},"referralApplied":{"oneOf":[{"example":true,"type":"boolean","description":"True when a TraderCodes referral relationship was recorded on this verify: a valid, non-self TraderCode presented on the wallet's first sign-in to THIS application resolved to a known referrer. Scoped like `is_new_user` (per `(wallet, application)`), so a wallet already registered on another application can still see this on its first sign-in to a new one. False for a returning user of this application, an absent or unknown code, a self-referral, or a wallet that already has a different referrer (see `referral_not_applied_reason`). Confirms the referral landed for the signup success screen.","uniqueKey":"referralApplied.oneOf.0","typeLabel":"boolean"},{"example":true,"type":"null","description":"True when a TraderCodes referral relationship was recorded on this verify: a valid, non-self TraderCode presented on the wallet's first sign-in to THIS application resolved to a known referrer. Scoped like `is_new_user` (per `(wallet, application)`), so a wallet already registered on another application can still see this on its first sign-in to a new one. False for a returning user of this application, an absent or unknown code, a self-referral, or a wallet that already has a different referrer (see `referral_not_applied_reason`). Confirms the referral landed for the signup success screen.","uniqueKey":"referralApplied.oneOf.1","typeLabel":"null"}],"uniqueKey":"referralApplied","typeLabel":"boolean | null"},"referralNotAppliedReason":{"oneOf":[{"enum":["REFERRAL_NOT_APPLIED_REASON_UNSPECIFIED","REFERRAL_NOT_APPLIED_REASON_ALREADY_REFERRED","REFERRAL_NOT_APPLIED_REASON_UNKNOWN_CODE","REFERRAL_NOT_APPLIED_REASON_SELF_REFERRAL"],"type":"string","description":"Why the TraderCode presented on this sign-up did not apply. Absent when it\n applied, when no code was presented, and for a returning user of this\n application.","format":"enum","uniqueKey":"referralNotAppliedReason.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["REFERRAL_NOT_APPLIED_REASON_UNSPECIFIED","REFERRAL_NOT_APPLIED_REASON_ALREADY_REFERRED","REFERRAL_NOT_APPLIED_REASON_UNKNOWN_CODE","REFERRAL_NOT_APPLIED_REASON_SELF_REFERRAL"],"type":"null","description":"Why the TraderCode presented on this sign-up did not apply. Absent when it\n applied, when no code was presented, and for a returning user of this\n application.","format":"enum","uniqueKey":"referralNotAppliedReason.oneOf.1","typeLabel":"null"}],"uniqueKey":"referralNotAppliedReason","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"expiresAt":1699876543,"user":{"id":"123e4567-e89b-12d3-a456-426614174000","address":"0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5","username":"trader123"},"isNewUser":true,"referralApplied":true,"referralNotAppliedReason":"REFERRAL_NOT_APPLIED_REASON_UNSPECIFIED"}}},"exampleType":"generated"}},"exampleType":"generated"},"7370ad65-91f8-4a7d-b6d2-51c08b5eb786":{"description":"Invalid request parameters, nonce expired, or already used","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"57da3a96-e853-4010-860c-84d5ef1405bd":{"description":"Invalid signature","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"f9fd01ef-8329-4384-ba55-498272d59d3f":{"description":"Origin not allowed for this application; the account or wallet is deactivated; or Mainnet Invite Mode is on and the wallet has no access grant and supplied no valid invite code. Auth refusals carry a stable code (REST error envelope code; gRPC google.rpc.ErrorInfo reason, domain auth.0xmonaco.com): ACCOUNT_DEACTIVATED for a deactivated signing account, INVITE_CODE_REQUIRED when no code was supplied, and INVITE_CODE_INVALID for a wrong, already redeemed or revoked code, or an unused code whose issuer is deactivated. A wallet on the OFAC sanctions list is refused with ADDRESS_RESTRICTED. No account identity or administrative deactivation reason is disclosed. Unused invites become usable again after issuer reactivation","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"3441c285-25ee-4334-be92-57663989ee20":{"description":"Invalid nonce or clientId","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"1309aa2a-fcfe-4128-9f6e-c703d3c44714":{"description":"Authentication rate limit exceeded — challenge and verify share one per-client-address budget (60 requests/min sustained, burst 120), checked before the signature; or, while Mainnet Invite Mode is on, invite-code attempts from this wallet or client address are in their cooldown. Retry after the interval in details.retryAfter","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"724c5f91-3d0a-42a9-bd0b-0ded6bc58ff3":{"description":"Internal server error","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"e5e15003-63c4-449f-a3fe-e54eb40b743f":{"description":"Contract-wallet (EIP-1271) verification could not be completed for an eligible address: the chain did not answer, did not answer within the deadline, or the server was at its concurrent-verification capacity and declined to ask; or an invite code could not be validated now (validation at capacity, or no trusted client address). Retryable, and not a verdict on the signature or the code.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{},"servers":{"76af5a68-1490-444f-9e1c-a0268868c659":{"url":"https://apimonaco.xyz","description":"Production (Sei mainnet)"}}},"originalFileLocation":"proto-openapi/api/openapi.yaml"},"subdomain":"monaco","siteName":"Monaco Protocol SDK v1.1.14","title":"Verify signature and authenticate - Monaco Protocol SDK v1.1.14","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T00:28:12.861Z","originalFileLocation":"api-reference/authservice/verify-signature-and-authenticate.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=\"Verify signature and authenticate. Verify the signed challenge message and create an authenticated session. Binds the caller-provided ed25519 session public key to the new session; subsequent requests are signed with the matching private key. How the signature is checked depends on the address. Almost every address is verified by recovering the signing key, exactly as before. EIP-1271 verification applies only to an address that is BOTH eligible for contract-signature login AND has contract code deployed on chain: an eligible payout wallet that is an ordinary EOA is still verified by recovery. The two are mutually exclusive, and the request is identical either way — signature carries whatever the wallet produced, and no field changes. The one bound is length: a contract signature over 8192 decoded bytes is refused as invalid rather than forwarded to the chain, which is far above any realistic owner set. Because deciding that requires reading the chain, this adds one client-visible outcome the recovery path does not have: UNAVAILABLE (REST 503). It is retryable and is NOT a verdict on the signature. It covers three cases, and an eligible address can see any of them even when it turns out to be an EOA, because the code lookup happens first: the chain did not answer, it did not answer within the deadline, or the server declined to ask because its own concurrent-verification capacity was full. That last one is local saturation rather than a chain fault, so an operator diagnosing it should check this service before the RPC endpoint. A rejected signature is 401, and so is a contract that rejects by REVERTING: that is the wallet answering \u0026quot;no\u0026quot;, not a failure to ask.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Monaco Protocol SDK v1.1.14\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_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/monaco/4wZNikyT1wBLArhB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verify signature and authenticate - Monaco Protocol SDK v1.1.14\">\u003cmeta data-mint-head property=\"og:description\" content=\"Verify signature and authenticate. Verify the signed challenge message and create an authenticated session. Binds the caller-provided ed25519 session public key to the new session; subsequent requests are signed with the matching private key. How the signature is checked depends on the address. Almost every address is verified by recovering the signing key, exactly as before. EIP-1271 verification applies only to an address that is BOTH eligible for contract-signature login AND has contract code deployed on chain: an eligible payout wallet that is an ordinary EOA is still verified by recovery. The two are mutually exclusive, and the request is identical either way — signature carries whatever the wallet produced, and no field changes. The one bound is length: a contract signature over 8192 decoded bytes is refused as invalid rather than forwarded to the chain, which is far above any realistic owner set. Because deciding that requires reading the chain, this adds one client-visible outcome the recovery path does not have: UNAVAILABLE (REST 503). It is retryable and is NOT a verdict on the signature. It covers three cases, and an eligible address can see any of them even when it turns out to be an EOA, because the code lookup happens first: the chain did not answer, it did not answer within the deadline, or the server declined to ask because its own concurrent-verification capacity was full. That last one is local saturation rather than a chain fault, so an operator diagnosing it should check this service before the RPC endpoint. A rejected signature is 401, and so is a contract that rejects by REVERTING: that is the wallet answering \u0026quot;no\u0026quot;, not a failure to ask.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Monaco Protocol SDK v1.1.14\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://monaco.mintlify.site/_mintlify/api/og/v2?division=Auth\u0026amp;title=Verify+signature+and+authenticate\u0026amp;description=Verify+signature+and+authenticate.%0A%0A+Verify+the+signed+challenge+message+and+create+an+authenticated+session.%0A+Binds+the+caller-provided+ed25519+session+public+\u0026amp;theme=86c8539ecb88515b97c26589\u0026amp;signature=5bdc06d128b5ecc8c39569ac1bc26390e2be1c941488daa7219c7fd846e12674\">\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=\"Verify signature and authenticate - Monaco Protocol SDK v1.1.14\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Verify signature and authenticate. Verify the signed challenge message and create an authenticated session. Binds the caller-provided ed25519 session public key to the new session; subsequent requests are signed with the matching private key. How the signature is checked depends on the address. Almost every address is verified by recovering the signing key, exactly as before. EIP-1271 verification applies only to an address that is BOTH eligible for contract-signature login AND has contract code deployed on chain: an eligible payout wallet that is an ordinary EOA is still verified by recovery. The two are mutually exclusive, and the request is identical either way — signature carries whatever the wallet produced, and no field changes. The one bound is length: a contract signature over 8192 decoded bytes is refused as invalid rather than forwarded to the chain, which is far above any realistic owner set. Because deciding that requires reading the chain, this adds one client-visible outcome the recovery path does not have: UNAVAILABLE (REST 503). It is retryable and is NOT a verdict on the signature. It covers three cases, and an eligible address can see any of them even when it turns out to be an EOA, because the code lookup happens first: the chain did not answer, it did not answer within the deadline, or the server declined to ask because its own concurrent-verification capacity was full. That last one is local saturation rather than a chain fault, so an operator diagnosing it should check this service before the RPC endpoint. A rejected signature is 401, and so is a contract that rejects by REVERTING: that is the wallet answering \u0026quot;no\u0026quot;, not a failure to ask.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://monaco.mintlify.site/_mintlify/api/og/v2?division=Auth\u0026amp;title=Verify+signature+and+authenticate\u0026amp;description=Verify+signature+and+authenticate.%0A%0A+Verify+the+signed+challenge+message+and+create+an+authenticated+session.%0A+Binds+the+caller-provided+ed25519+session+public+\u0026amp;theme=86c8539ecb88515b97c26589\u0026amp;signature=5bdc06d128b5ecc8c39569ac1bc26390e2be1c941488daa7219c7fd846e12674\">\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/monaco/4wZNikyT1wBLArhB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Monaco Protocol SDK v1.1.14\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#233329\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/authservice/verify-signature-and-authenticate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.0xmonaco.com/#organization\",\"name\":\"Monaco Protocol SDK v1.1.14\",\"url\":\"https://docs.0xmonaco.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/monaco/Puhxf4Whf6wQMalZ/logo.png?fit=max\u0026auto=format\u0026n=Puhxf4Whf6wQMalZ\u0026q=85\u0026s=6b0d46b12348c8cb28126629f97faae0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.0xmonaco.com#website\",\"name\":\"Monaco Protocol SDK v1.1.14\",\"url\":\"https://docs.0xmonaco.com\",\"publisher\":{\"@id\":\"https://docs.0xmonaco.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate#webpage\",\"url\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate\",\"name\":\"Verify signature and authenticate\",\"description\":\"Verify signature and authenticate. Verify the signed challenge message and create an authenticated session. Binds the caller-provided ed25519 session public key to the new session; subsequent requests are signed with the matching private key. How the signature is checked depends on the address. Almost every address is verified by recovering the signing key, exactly as before. EIP-1271 verification applies only to an address that is BOTH eligible for contract-signature login AND has contract code deployed on chain: an eligible payout wallet that is an ordinary EOA is still verified by recovery. The two are mutually exclusive, and the request is identical either way — signature carries whatever the wallet produced, and no field changes. The one bound is length: a contract signature over 8192 decoded bytes is refused as invalid rather than forwarded to the chain, which is far above any realistic owner set. Because deciding that requires reading the chain, this adds one client-visible outcome the recovery path does not have: UNAVAILABLE (REST 503). It is retryable and is NOT a verdict on the signature. It covers three cases, and an eligible address can see any of them even when it turns out to be an EOA, because the code lookup happens first: the chain did not answer, it did not answer within the deadline, or the server declined to ask because its own concurrent-verification capacity was full. That last one is local saturation rather than a chain fault, so an operator diagnosing it should check this service before the RPC endpoint. A rejected signature is 401, and so is a contract that rejects by REVERTING: that is the wallet answering \\\"no\\\", not a failure to ask.\",\"dateModified\":\"2026-11-12T00:28:12.861Z\",\"isPartOf\":{\"@id\":\"https://docs.0xmonaco.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"APIs\",\"item\":\"https://docs.0xmonaco.com/api-reference/healthservice/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"REST API\",\"item\":\"https://docs.0xmonaco.com/api-reference\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Auth\",\"item\":\"https://docs.0xmonaco.com/api-reference/authservice/create-authentication-challenge\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Verify signature and authenticate\",\"item\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate#apireference\",\"headline\":\"Verify signature and authenticate\",\"name\":\"Verify signature and authenticate\",\"description\":\"Verify signature and authenticate. Verify the signed challenge message and create an authenticated session. Binds the caller-provided ed25519 session public key to the new session; subsequent requests are signed with the matching private key. How the signature is checked depends on the address. Almost every address is verified by recovering the signing key, exactly as before. EIP-1271 verification applies only to an address that is BOTH eligible for contract-signature login AND has contract code deployed on chain: an eligible payout wallet that is an ordinary EOA is still verified by recovery. The two are mutually exclusive, and the request is identical either way — signature carries whatever the wallet produced, and no field changes. The one bound is length: a contract signature over 8192 decoded bytes is refused as invalid rather than forwarded to the chain, which is far above any realistic owner set. Because deciding that requires reading the chain, this adds one client-visible outcome the recovery path does not have: UNAVAILABLE (REST 503). It is retryable and is NOT a verdict on the signature. It covers three cases, and an eligible address can see any of them even when it turns out to be an EOA, because the code lookup happens first: the chain did not answer, it did not answer within the deadline, or the server declined to ask because its own concurrent-verification capacity was full. That last one is local saturation rather than a chain fault, so an operator diagnosing it should check this service before the RPC endpoint. A rejected signature is 401, and so is a contract that rejects by REVERTING: that is the wallet answering \\\"no\\\", not a failure to ask.\",\"url\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xmonaco.com/api-reference/authservice/verify-signature-and-authenticate#webpage\"},\"dateModified\":\"2026-11-12T00:28:12.861Z\",\"publisher\":{\"@id\":\"https://docs.0xmonaco.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.0xmonaco.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Monaco Protocol SDK v1.1.14\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Monaco Protocol SDK v1.1.14\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/authservice/verify-signature-and-authenticate.md","siteName":"Monaco Protocol SDK v1.1.14","nav":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://0xmonaco.com"}]},"pages":[{"title":"Introduction","href":"/introduction"},{"title":"Markets","href":"/markets"},{"title":"AI \u0026 Agents","href":"/build-with-ai"},{"group":"Learn","pages":[{"title":"Accounts","href":"/accounts"},{"title":"Orders","href":"/trading-mechanics/spot"},{"title":"Margin","href":"/trading-mechanics/perps"},{"title":"Funding Rates","href":"/trading-mechanics/funding-rates"},{"title":"Liquidations \u0026 Auto-Deleveraging","href":"/trading-mechanics/liquidations"},{"title":"Fees","href":"/fees"},{"title":"Earn","href":"/earn"}]},{"group":"Build","pages":[{"title":"Quickstart","href":"/quickstart"},{"title":"Testnet","href":"/testnet"},{"title":"Wallets \u0026 Auth","href":"/developers/accounts/wallets"},{"title":"Balances, Deposits \u0026 Withdrawals","href":"/developers/vault"},{"title":"Perps Collateral","href":"/developers/perps-collateral"},{"title":"Market Data","href":"/developers/markets"},{"title":"Order Management","href":"/developers/trade"},{"title":"Rate Limits","href":"/developers/rate-limits"},{"title":"Positions","href":"/developers/positions"},{"title":"Market-Maker Runbook","href":"/developers/market-maker-runbook"},{"title":"RFQ (block trades)","href":"/developers/rfq"},{"title":"Delegated Agents","href":"/developers/delegated-agents"},{"title":"Invite Codes","href":"/developers/invite-codes"},{"title":"TraderCodes","href":"/developers/tradercodes"},{"title":"BuilderCodes","href":"/developers/buildercodes"}]},{"group":"Libraries","pages":[{"title":"MCP Server","href":"/sdk/mcp-server"},{"group":"TypeScript SDK","root":{"title":"TypeScript SDK","href":"/sdk/typescript/intro"},"expanded":false,"pages":[{"title":"Applications","href":"/sdk/typescript/applications"},{"title":"Authentication","href":"/sdk/typescript/auth"},{"title":"Error Handling","href":"/sdk/typescript/error-handling"},{"title":"Market Data","href":"/sdk/typescript/market"},{"title":"Market Pulse","href":"/sdk/typescript/pulse"},{"title":"Region Status","href":"/sdk/typescript/compliance"},{"title":"Analytics","href":"/sdk/typescript/analytics"},{"title":"Profile","href":"/sdk/typescript/profile"},{"title":"Portfolio Analytics","href":"/sdk/typescript/portfolio"},{"title":"Trading","href":"/sdk/typescript/trades"},{"title":"RFQ","href":"/sdk/typescript/rfq"},{"title":"Margin Accounts","href":"/sdk/typescript/margin-accounts"},{"title":"Positions","href":"/sdk/typescript/positions"},{"title":"Delegated Agents","href":"/sdk/typescript/delegated-agents"},{"title":"Vault","href":"/sdk/typescript/vault"},{"title":"TraderCodes","href":"/sdk/typescript/tradercodes"},{"title":"BuilderCodes","href":"/sdk/typescript/buildercodes"},{"title":"Managed Markets","href":"/sdk/typescript/managed-markets"},{"title":"WebSockets","href":"/sdk/typescript/websockets"}]},{"group":"React SDK","root":{"title":"React SDK","href":"/sdk/react/intro"},"expanded":false,"pages":[{"title":"Session \u0026 Profile Hooks","href":"/sdk/react/hooks/session"},{"title":"Market Data Hooks","href":"/sdk/react/hooks/market-data"},{"title":"Trading Hooks","href":"/sdk/react/hooks/trading"},{"title":"Balance \u0026 Vault Hooks","href":"/sdk/react/hooks/balances"},{"title":"TraderCodes Hooks","href":"/sdk/react/hooks/codes"}]},{"title":"Rust SDK","href":"/sdk/rust"},{"title":"Python, Go, C++ \u0026 More","href":"/sdk/python-quickstart"}]},{"group":"APIs","pages":[{"group":"REST API","root":{"title":"REST API","href":"/api-reference"},"expanded":false,"pages":[{"group":"Health","pages":[{"title":"Health check","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /health","href":"/api-reference/healthservice/health-check"}]},{"group":"Auth","pages":[{"title":"Create authentication challenge","description":"Create authentication challenge.\n\n Generate a cryptographic challenge (nonce) for wallet-based authentication.\n The wallet must authorize the returned message to prove control of the\n address. An EOA does that by signing it with its private key. A\n smart-contract wallet has no private key and instead produces a signature\n its own contract will accept, which Monaco checks under EIP-1271 — see\n Verify.\n\n The challenge is single-use and binds the session public key supplied here,\n so it authorizes exactly one keypair, once. The lifetime is 5 minutes, or\n 30 minutes for EVERY address while contract-signature login is enabled on\n the deployment — a multisig must collect owner approvals before it can\n answer, and the window is uniform rather than eligibility-specific so this\n unauthenticated endpoint cannot be used to probe which addresses hold a\n BuilderCodes payout bucket. Widening it is cheap: a longer window is a\n longer-lived offer to authorize one predetermined keypair once, never a\n longer-lived credential.","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/challenge","href":"/api-reference/authservice/create-authentication-challenge"},{"title":"Verify signature and authenticate","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/verify","href":"/api-reference/authservice/verify-signature-and-authenticate"},{"title":"Mint one Mainnet invite code","description":"Mint one invite code from the authenticated wallet's available allowance.\n Every active wallet has one initial code plus one per 250,000 USDC of executed\n Mainnet USDC volume since the configured launch. Revocation never refunds a slot.","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/invite-codes/requests","href":"/api-reference/authservice/mint-one-mainnet-invite-code"},{"title":"List my Mainnet invite codes","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/invite-codes","href":"/api-reference/authservice/list-my-mainnet-invite-codes"},{"title":"Refresh session expiry","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/refresh","href":"/api-reference/authservice/refresh-session-expiry"},{"title":"Revoke current session","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/auth/revoke","href":"/api-reference/authservice/revoke-current-session"}]},{"group":"Accounts","pages":[{"title":"Get user profile","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me","href":"/api-reference/accountsservice/get-user-profile"},{"title":"Get user balances","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/balances","href":"/api-reference/accountsservice/get-user-balances"},{"title":"Get user balance by asset","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/balances/{assetId}","href":"/api-reference/accountsservice/get-user-balance-by-asset"},{"title":"Get user movements","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/movements","href":"/api-reference/accountsservice/get-user-movements"},{"title":"Get user trade history","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/trades","href":"/api-reference/accountsservice/get-user-trade-history"},{"title":"Get portfolio stats","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio","href":"/api-reference/accountsservice/get-portfolio-stats"},{"title":"Get portfolio chart time series","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/chart","href":"/api-reference/accountsservice/get-portfolio-chart-time-series"},{"title":"Get portfolio summary","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/summary","href":"/api-reference/accountsservice/get-portfolio-summary"},{"title":"Get portfolio performance","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/performance","href":"/api-reference/accountsservice/get-portfolio-performance"},{"title":"Get portfolio realized PnL","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/realized-pnl","href":"/api-reference/accountsservice/get-portfolio-realized-pnl"},{"title":"Get portfolio assets","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/assets","href":"/api-reference/accountsservice/get-portfolio-assets"},{"title":"Get portfolio margin","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio/margin","href":"/api-reference/accountsservice/get-portfolio-margin"},{"title":"List funding payments","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/funding-payments","href":"/api-reference/accountsservice/list-funding-payments"},{"title":"List sub-accounts with balances","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/sub-accounts","href":"/api-reference/accountsservice/list-sub-accounts-with-balances"},{"title":"Get your self-trade-prevention default","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/self-trade-prevention","href":"/api-reference/accountsservice/get-your-self-trade-prevention-default"},{"title":"Set your self-trade-prevention default","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/accounts/self-trade-prevention","href":"/api-reference/accountsservice/set-your-self-trade-prevention-default"}]},{"group":"Account Limits","pages":[{"title":"Create sub-account limit","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/accounts/sub-accounts/limits","href":"/api-reference/accountsservice/create-sub-account-limit"},{"title":"Get sub-account limits","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/accounts/sub-accounts/{subAccountId}/limits","href":"/api-reference/accountsservice/get-sub-account-limits"},{"title":"Update sub-account limit","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/accounts/sub-accounts/{subAccountId}/limits/{assetId}","href":"/api-reference/accountsservice/update-sub-account-limit"},{"title":"Delete sub-account limit","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml delete /api/v1/accounts/sub-accounts/{subAccountId}/limits/{assetId}","href":"/api-reference/accountsservice/delete-sub-account-limit"}]},{"group":"Applications","pages":[{"title":"Get application configuration","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/config","href":"/api-reference/applicationsservice/get-application-configuration"},{"title":"Get application stats","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/stats","href":"/api-reference/applicationsservice/get-application-stats"},{"title":"List application users","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/users","href":"/api-reference/applicationsservice/list-application-users"},{"title":"List application balances","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/balances","href":"/api-reference/applicationsservice/list-application-balances"},{"title":"List application margin accounts","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/margin-accounts","href":"/api-reference/applicationsservice/list-application-margin-accounts"},{"title":"List application orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/orders","href":"/api-reference/applicationsservice/list-application-orders"},{"title":"List application movements","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/applications/movements","href":"/api-reference/applicationsservice/list-application-movements"}]},{"group":"Market","pages":[{"title":"Trading Pairs","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs","href":"/api-reference/marketservice/trading-pairs"},{"title":"Trading Pair By ID","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}","href":"/api-reference/marketservice/trading-pair-by-id"},{"title":"Market Metadata","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/metadata","href":"/api-reference/marketservice/market-metadata"},{"title":"Get apiv1marketpairs perpconfig","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/perp/config","href":"/api-reference/marketservice/get-apiv1marketpairs-perpconfig"},{"title":"Get apiv1marketpairs perpsummary","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/perp/summary","href":"/api-reference/marketservice/get-apiv1marketpairs-perpsummary"},{"title":"Get apiv1marketpairs mark price","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/mark-price","href":"/api-reference/marketservice/get-apiv1marketpairs-mark-price"},{"title":"Get apiv1marketpairs index price","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/index-price","href":"/api-reference/marketservice/get-apiv1marketpairs-index-price"},{"title":"Get apiv1marketpairs funding","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/funding","href":"/api-reference/marketservice/get-apiv1marketpairs-funding"},{"title":"Get apiv1marketpairs fundinghistory","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/funding/history","href":"/api-reference/marketservice/get-apiv1marketpairs-fundinghistory"},{"title":"Get apiv1marketfundinghistory","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/funding/history","href":"/api-reference/marketservice/get-apiv1marketfundinghistory"},{"title":"Open Interest","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/open-interest","href":"/api-reference/marketservice/open-interest"},{"title":"Trader Metrics","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/trader-metrics","href":"/api-reference/marketservice/trader-metrics"},{"title":"Trade Flow","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/trade-flow","href":"/api-reference/marketservice/trade-flow"},{"title":"Liquidation Events","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/liquidation-events","href":"/api-reference/marketservice/liquidation-events"},{"title":"All Liquidation Events","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/liquidation-events","href":"/api-reference/marketservice/all-liquidation-events"},{"title":"Insurance Funds","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/insurance-funds","href":"/api-reference/marketservice/insurance-funds"},{"title":"Liquidation Metrics","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/{tradingPairId}/liquidation-metrics","href":"/api-reference/marketservice/liquidation-metrics"},{"title":"Candlestick Data","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/pairs/charts/candlestick/{tradingPairId}/{interval}","href":"/api-reference/marketservice/candlestick-data"},{"title":"Market Stats","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/stats","href":"/api-reference/marketservice/market-stats"},{"title":"Market Screener","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/market/screener","href":"/api-reference/marketservice/market-screener"}]},{"group":"Orderbook","pages":[{"title":"Orderbook Snapshot","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orderbook/{tradingPairId}","href":"/api-reference/orderbookservice/orderbook-snapshot"}]},{"group":"Trades","pages":[{"title":"Trade Feed","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/trades","href":"/api-reference/tradesservice/trade-feed"},{"title":"Recent Trades","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/trades/{tradingPairId}","href":"/api-reference/tradesservice/recent-trades"},{"title":"Get Trade by ID","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/trades/by-id/{tradeId}","href":"/api-reference/tradesservice/get-trade-by-id"}]},{"group":"RFQ","pages":[{"title":"Get RFQ capabilities","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/rfq/capabilities","href":"/api-reference/rfqservice/get-rfq-capabilities"},{"title":"Request quotes","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/rfqs","href":"/api-reference/rfqservice/request-quotes"},{"title":"List your RFQs","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/rfqs","href":"/api-reference/rfqservice/list-your-rfqs"},{"title":"Get an RFQ","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/rfqs/{rfqId}","href":"/api-reference/rfqservice/get-an-rfq"},{"title":"Accept an RFQ","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/rfqs/{rfqId}/accept","href":"/api-reference/rfqservice/accept-an-rfq"},{"title":"Cancel an RFQ","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/rfqs/{rfqId}/cancel","href":"/api-reference/rfqservice/cancel-an-rfq"},{"title":"Quote an RFQ","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/rfqs/{rfqId}/quote","href":"/api-reference/rfqservice/quote-an-rfq"},{"title":"Withdraw a quote","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml delete /api/v1/rfqs/{rfqId}/quote","href":"/api-reference/rfqservice/withdraw-a-quote"},{"title":"Answer last look","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/rfqs/{rfqId}/last-look","href":"/api-reference/rfqservice/answer-last-look"}]},{"group":"Fees","pages":[{"title":"Simulate fees for a potential order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/fees/simulate","href":"/api-reference/feesservice/simulate-fees-for-a-potential-order"},{"title":"Get my fee tier and pair schedule","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/fees/tier","href":"/api-reference/feesservice/get-my-fee-tier-and-pair-schedule"},{"title":"Get a trading pair's fee tier schedule","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/fees/schedule","href":"/api-reference/feesservice/get-a-trading-pairs-fee-tier-schedule"}]},{"group":"Withdrawals","pages":[{"title":"Initiate withdrawal","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/withdrawals","href":"/api-reference/withdrawalsservice/initiate-withdrawal"},{"title":"List pending withdrawals","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/withdrawals","href":"/api-reference/withdrawalsservice/list-pending-withdrawals"},{"title":"Get withdrawal","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/withdrawals/{withdrawalIndex}","href":"/api-reference/withdrawalsservice/get-withdrawal"}]},{"group":"Analytics","pages":[{"title":"Protocol totals","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/protocol/totals","href":"/api-reference/analyticsservice/protocol-totals"},{"title":"Protocol series","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/protocol/series","href":"/api-reference/analyticsservice/protocol-series"},{"title":"Market volumes","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/markets/volume","href":"/api-reference/analyticsservice/market-volumes"},{"title":"Treasury net fees","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/treasury/net-fees","href":"/api-reference/analyticsservice/treasury-net-fees"},{"title":"Builders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/builders","href":"/api-reference/analyticsservice/builders"},{"title":"Builder","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/builders/{builder}","href":"/api-reference/analyticsservice/builder"},{"title":"Builder totals","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/builders/{builder}/totals","href":"/api-reference/analyticsservice/builder-totals"},{"title":"Builder series","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/builders/{builder}/series","href":"/api-reference/analyticsservice/builder-series"},{"title":"Builder leaderboard","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/builder-leaderboard","href":"/api-reference/analyticsservice/builder-leaderboard"},{"title":"Wallet leaderboard","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/wallet-leaderboard","href":"/api-reference/analyticsservice/wallet-leaderboard"},{"title":"Wallet summary","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/wallets/{wallet}","href":"/api-reference/analyticsservice/wallet-summary"},{"title":"Wallet liquidations","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/wallets/{wallet}/liquidations","href":"/api-reference/analyticsservice/wallet-liquidations"},{"title":"Token custody","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/tokens","href":"/api-reference/analyticsservice/token-custody"},{"title":"Token custody detail","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/tokens/{token}","href":"/api-reference/analyticsservice/token-custody-detail"},{"title":"Vault deposits","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/deposits","href":"/api-reference/analyticsservice/vault-deposits"},{"title":"Vault withdrawals","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/analytics/withdrawals","href":"/api-reference/analyticsservice/vault-withdrawals"}]},{"group":"Pulse","pages":[{"title":"Get the market pulse news feed","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/pulse","href":"/api-reference/pulseservice/get-the-market-pulse-news-feed"}]},{"group":"Compliance","pages":[{"title":"Get the caller's region status","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/compliance/region","href":"/api-reference/complianceservice/get-the-callers-region-status"}]},{"group":"Sweeper","pages":[{"title":"Register a deposit address for monitoring","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/sweeper/register","href":"/api-reference/sweeperservice/register-a-deposit-address-for-monitoring"},{"title":"List the chains and assets the sweeper watches","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/sweeper/chains","href":"/api-reference/sweeperservice/list-the-chains-and-assets-the-sweeper-watches"},{"title":"List the caller's sweeper deposits, newest first","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/sweeper/deposits","href":"/api-reference/sweeperservice/list-the-callers-sweeper-deposits-newest-first"},{"title":"Get the status of the caller's deposit from Hyperliquid by its action nonce","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/sweeper/deposits/hypercore/{nonce}","href":"/api-reference/sweeperservice/get-the-status-of-the-callers-deposit-from-hyperliquid-by-its-action-nonce"},{"title":"Get the status of the caller's sweeper deposits in one transaction","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/sweeper/deposits/{txHash}","href":"/api-reference/sweeperservice/get-the-status-of-the-callers-sweeper-deposits-in-one-transaction"}]},{"group":"Managed Markets","pages":[{"title":"List caller managed market assignments","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/managed-markets/assignments","href":"/api-reference/managedmarketsservice/list-caller-managed-market-assignments"},{"title":"Claim or renew a fenced maker lease","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/managed-markets/{launchId}/lease","href":"/api-reference/managedmarketsservice/claim-or-renew-a-fenced-maker-lease"},{"title":"Refresh the server-bounded managed quote set","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/managed-markets/{launchId}/quotes","href":"/api-reference/managedmarketsservice/refresh-the-server-bounded-managed-quote-set"}]},{"group":"Orders","pages":[{"title":"Get user orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders","href":"/api-reference/ordersservice/get-user-orders"},{"title":"Create new order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders","href":"/api-reference/ordersservice/create-new-order"},{"title":"Get order by ID","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/{orderId}","href":"/api-reference/ordersservice/get-order-by-id"},{"title":"Replace existing order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/orders/{orderId}","href":"/api-reference/ordersservice/replace-existing-order"},{"title":"Cancel existing order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/cancel","href":"/api-reference/ordersservice/cancel-existing-order"},{"title":"Batch cancel specific orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/batch-cancel","href":"/api-reference/ordersservice/batch-cancel-specific-orders"},{"title":"Batch create orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/batch-create","href":"/api-reference/ordersservice/batch-create-orders"},{"title":"Batch replace orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/batch-replace","href":"/api-reference/ordersservice/batch-replace-orders"},{"title":"Cancel all orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/batch-cancel-all","href":"/api-reference/ordersservice/cancel-all-orders"},{"title":"Cancel all orders for a trading pair","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/batch-cancel-all/{tradingPairId}","href":"/api-reference/ordersservice/cancel-all-orders-for-a-trading-pair"},{"title":"Cancel all orders after a timeout","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/cancel-all-after","href":"/api-reference/ordersservice/cancel-all-orders-after-a-timeout"},{"title":"Get apiv1ordersconditional","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/conditional/{conditionalOrderId}","href":"/api-reference/ordersservice/get-apiv1ordersconditional"},{"title":"Get apiv1ordersconditional","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/conditional/{conditionalOrderId}","href":"/api-reference/ordersservice/get-apiv1ordersconditional"},{"title":"Delete apiv1ordersconditional","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml delete /api/v1/orders/conditional/{conditionalOrderId}","href":"/api-reference/ordersservice/delete-apiv1ordersconditional"},{"title":"Create TWAP order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/twap","href":"/api-reference/ordersservice/create-twap-order"},{"title":"List TWAP orders","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/twap","href":"/api-reference/ordersservice/list-twap-orders"},{"title":"Get TWAP order by ID","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/twap/{twapOrderId}","href":"/api-reference/ordersservice/get-twap-order-by-id"},{"title":"Get TWAP order TCA report","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/twap/{twapOrderId}/tca","href":"/api-reference/ordersservice/get-twap-order-tca-report"},{"title":"List TWAP order slices","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/orders/twap/{twapOrderId}/slices","href":"/api-reference/ordersservice/list-twap-order-slices"},{"title":"Cancel TWAP order","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/orders/twap/{twapOrderId}/cancel","href":"/api-reference/ordersservice/cancel-twap-order"}]},{"group":"Margin Accounts","pages":[{"title":"Get apiv1marginaccounts","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/accounts/{marginAccountId}","href":"/api-reference/marginaccountsservice/get-apiv1marginaccounts"},{"title":"Get apiv1marginaccounts","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/accounts/{marginAccountId}","href":"/api-reference/marginaccountsservice/get-apiv1marginaccounts"},{"title":"Post apiv1marginaccounts collateraltransfer in","deprecated":true,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in","href":"/api-reference/marginaccountsservice/post-apiv1marginaccounts-collateraltransfer-in"},{"title":"Post apiv1marginaccounts collateraltransfer out","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/accounts/{marginAccountId}/collateral/transfer-out","href":"/api-reference/marginaccountsservice/post-apiv1marginaccounts-collateraltransfer-out"},{"title":"Get apiv1marginaccounts movements","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/accounts/{marginAccountId}/movements","href":"/api-reference/marginaccountsservice/get-apiv1marginaccounts-movements"},{"title":"Get apiv1marginaccounts pnl","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/accounts/{marginAccountId}/pnl","href":"/api-reference/marginaccountsservice/get-apiv1marginaccounts-pnl"},{"title":"Post apiv1marginaccounts simulate order risk","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/accounts/{marginAccountId}/simulate-order-risk","href":"/api-reference/marginaccountsservice/post-apiv1marginaccounts-simulate-order-risk"},{"title":"Get apiv1margincollateralavailable","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/collateral/available","href":"/api-reference/marginaccountsservice/get-apiv1margincollateralavailable"},{"title":"Post apiv1margincollateraltransfer","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/collateral/transfer","href":"/api-reference/marginaccountsservice/post-apiv1margincollateraltransfer"},{"title":"Get apiv1marginparent margin account","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/parent-margin-account","href":"/api-reference/marginaccountsservice/get-apiv1marginparent-margin-account"},{"title":"Post apiv1marginparent margin accountcollateraltransfer in","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/parent-margin-account/collateral/transfer-in","href":"/api-reference/marginaccountsservice/post-apiv1marginparent-margin-accountcollateraltransfer-in"},{"title":"Post apiv1marginparent margin accountcollateraltransfer out","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/parent-margin-account/collateral/transfer-out","href":"/api-reference/marginaccountsservice/post-apiv1marginparent-margin-accountcollateraltransfer-out"},{"title":"Get apiv1marginparent margin accountmovements","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/margin/parent-margin-account/movements","href":"/api-reference/marginaccountsservice/get-apiv1marginparent-margin-accountmovements"},{"title":"Post apiv1marginparent margin accountsimulate order risk","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/parent-margin-account/simulate-order-risk","href":"/api-reference/marginaccountsservice/post-apiv1marginparent-margin-accountsimulate-order-risk"},{"title":"Post apiv1marginrisk bucketscollateraltransfer in","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/risk-buckets/collateral/transfer-in","href":"/api-reference/marginaccountsservice/post-apiv1marginrisk-bucketscollateraltransfer-in"},{"title":"Post apiv1marginrisk bucketssimulate order risk","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/risk-buckets/simulate-order-risk","href":"/api-reference/marginaccountsservice/post-apiv1marginrisk-bucketssimulate-order-risk"},{"title":"Post apiv1marginsub accounts","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/sub-accounts","href":"/api-reference/marginaccountsservice/post-apiv1marginsub-accounts"},{"title":"Post apiv1marginsub accounts close","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/sub-accounts/{marginAccountId}/close","href":"/api-reference/marginaccountsservice/post-apiv1marginsub-accounts-close"},{"title":"Post apiv1marginsub accounts collateraltransfer in","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/sub-accounts/{marginAccountId}/collateral/transfer-in","href":"/api-reference/marginaccountsservice/post-apiv1marginsub-accounts-collateraltransfer-in"},{"title":"Post apiv1marginsub accounts collateraltransfer out","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/margin/sub-accounts/{marginAccountId}/collateral/transfer-out","href":"/api-reference/marginaccountsservice/post-apiv1marginsub-accounts-collateraltransfer-out"}]},{"group":"Positions","pages":[{"title":"Get apiv1positions","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/positions/{positionId}","href":"/api-reference/positionsservice/get-apiv1positions"},{"title":"Get apiv1positionshistory","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/positions/history","href":"/api-reference/positionsservice/get-apiv1positionshistory"},{"title":"Post apiv1positionsbatch close all","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/positions/batch-close-all","href":"/api-reference/positionsservice/post-apiv1positionsbatch-close-all"},{"title":"Get apiv1positions","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/positions/{positionId}","href":"/api-reference/positionsservice/get-apiv1positions"},{"title":"Post apiv1positions close","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/positions/{positionId}/close","href":"/api-reference/positionsservice/post-apiv1positions-close"},{"title":"Get position PnL history","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/positions/{positionId}/pnl/history","href":"/api-reference/positionsservice/get-position-pnl-history"},{"title":"Get apiv1positions risk","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/positions/{positionId}/risk","href":"/api-reference/positionsservice/get-apiv1positions-risk"},{"title":"Post apiv1positions tp sl","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/positions/{positionId}/tp-sl","href":"/api-reference/positionsservice/post-apiv1positions-tp-sl"}]},{"group":"Delegated Agents","pages":[{"title":"Upsert delegated agent","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/delegated-agents","href":"/api-reference/delegatedagentsservice/upsert-delegated-agent"},{"title":"List delegated agents","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/delegated-agents","href":"/api-reference/delegatedagentsservice/list-delegated-agents"},{"title":"List delegating owners","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/delegated-agents/owners","href":"/api-reference/delegatedagentsservice/list-delegating-owners"},{"title":"Revoke delegated agent","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml delete /api/v1/delegated-agents/{delegatedAgentId}","href":"/api-reference/delegatedagentsservice/revoke-delegated-agent"},{"title":"Create delegated session","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/delegated-agents/sessions","href":"/api-reference/delegatedagentsservice/create-delegated-session"}]},{"group":"TraderCodes","pages":[{"title":"Get your TraderCode","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/codes/me","href":"/api-reference/tradercodeservice/get-your-tradercode"},{"title":"Check custom TraderCode availability","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/codes/available","href":"/api-reference/tradercodeservice/check-custom-tradercode-availability"},{"title":"Look up a TraderCode","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/codes/{code}","href":"/api-reference/tradercodeservice/look-up-a-tradercode"},{"title":"Claim or edit your custom TraderCode","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/tradercodes/codes/me/custom","href":"/api-reference/tradercodeservice/claim-or-edit-your-custom-tradercode"},{"title":"Clear your custom TraderCode","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml delete /api/v1/tradercodes/codes/me/custom","href":"/api-reference/tradercodeservice/clear-your-custom-tradercode"},{"title":"Get your referral position","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/referrals/me","href":"/api-reference/tradercodeservice/get-your-referral-position"},{"title":"Get your referral downline and earnings","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/referrals/me/downline","href":"/api-reference/tradercodeservice/get-your-referral-downline-and-earnings"},{"title":"Get one level of your referral tree","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/referrals/me/tree","href":"/api-reference/tradercodeservice/get-one-level-of-your-referral-tree"},{"title":"Get your rewards balance","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/tradercodes/rewards/balance","href":"/api-reference/tradercodeservice/get-your-rewards-balance"},{"title":"Transfer rewards into a trading balance","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/tradercodes/rewards/transfer","href":"/api-reference/tradercodeservice/transfer-rewards-into-a-trading-balance"}]},{"group":"BuilderCodes","pages":[{"title":"Get your BuilderCodes program configuration","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/buildercodes/config","href":"/api-reference/buildercoderewardsservice/get-your-buildercodes-program-configuration"},{"title":"Set your builder fees","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml put /api/v1/buildercodes/builder-fee","href":"/api-reference/buildercoderewardsservice/set-your-builder-fees"},{"title":"List your builder-fee changes","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/buildercodes/builder-fee/changes","href":"/api-reference/buildercoderewardsservice/list-your-builder-fee-changes"},{"title":"List your per-trade BuilderCodes earnings","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/buildercodes/payouts","href":"/api-reference/buildercoderewardsservice/list-your-per-trade-buildercodes-earnings"},{"title":"Summarize your BuilderCodes earnings","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/buildercodes/payouts/summary","href":"/api-reference/buildercoderewardsservice/summarize-your-buildercodes-earnings"},{"title":"Get your accrued BuilderCodes balance","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml get /api/v1/buildercodes/rewards/balance","href":"/api-reference/buildercoderewardsservice/get-your-accrued-buildercodes-balance"},{"title":"Claim accrued BuilderCodes payout balance","deprecated":null,"version":null,"openapi":"/proto-openapi/api/openapi.yaml post /api/v1/buildercodes/rewards/claim","href":"/api-reference/buildercoderewardsservice/claim-accrued-buildercodes-payout-balance"}]}]},{"title":"WebSocket API","href":"/reference/websockets"},{"title":"HTTP message signatures","href":"/reference/http-message-signatures"},{"group":"gRPC API","root":{"title":"gRPC API","href":"/reference/grpc"},"expanded":false,"pages":[{"group":"Protobuf Reference","root":{"title":"Protobuf Reference","href":"/grpc/protos"},"expanded":false,"pages":[{"group":"Core","pages":[{"title":"AuthService","href":"/grpc/protos/auth"},{"title":"AccountsService","href":"/grpc/protos/accounts"},{"title":"ApplicationsService","href":"/grpc/protos/applications"},{"title":"HealthService","href":"/grpc/protos/health"},{"title":"ComplianceService","href":"/grpc/protos/compliance"}]},{"group":"Trading","pages":[{"title":"MarketService","href":"/grpc/protos/market"},{"title":"AnalyticsService","href":"/grpc/protos/analytics"},{"title":"PulseService","href":"/grpc/protos/pulse"},{"title":"OrdersService","href":"/grpc/protos/orders"},{"title":"OrderbookService","href":"/grpc/protos/orderbook"},{"title":"TradesService","href":"/grpc/protos/trades"},{"title":"FeesService","href":"/grpc/protos/fees"},{"title":"RfqService","href":"/grpc/protos/rfq"}]},{"group":"Perps","pages":[{"title":"MarginAccountsService","href":"/grpc/protos/margin-accounts"},{"title":"PositionsService","href":"/grpc/protos/positions"}]},{"group":"Vault and Delegation","pages":[{"title":"WithdrawalsService","href":"/grpc/protos/withdrawals"},{"title":"SweeperService","href":"/grpc/protos/sweeper"},{"title":"DelegatedAgentsService","href":"/grpc/protos/delegated-agents"}]},{"group":"TraderCodes","pages":[{"title":"TraderCodeService","href":"/grpc/protos/tradercodes"}]},{"group":"BuilderCodes","pages":[{"title":"BuildercodeRewardsService","href":"/grpc/protos/buildercodes"}]},{"group":"Managed Markets","pages":[{"title":"ManagedMarketsService","href":"/grpc/protos/managed-markets"}]}]}]}]},{"group":"Resources","pages":[{"title":null,"href":"/changelog"},{"group":"Examples","expanded":false,"pages":[{"title":"Build a Trading App","href":"/examples/build-trading-app"},{"title":"End-to-End Examples","href":"/examples/end-to-end"}]}]}]},"basePath":"","title":"Verify signature and authenticate - Monaco Protocol SDK v1.1.14","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}