tokenSymbol selects the token being approved, not the asset it relates to.
spenderAddress is the address allowed to spend it. It is never derived — you must pass it.
tokenizerAddress is additionally required when tokenSymbol is a shared payment token
(USDT, USDC, BKN, HAI). Use companyWalletAddress from GET /get-tokenizer-info.
amount is in whole tokens. Send "100" for 100 USDT; the API applies the token’s decimals
for you. Do not pre-multiply.
spenderAddress is validated as an EVM address, and a malformed value is rejected with a
validation error naming that field. Two things trip it most often: an invalid EIP-55 checksum, and
leading or trailing whitespace picked up from a copied value or an environment variable. Trim the
value, or send the address in all lowercase, which always passes the checksum rule.Sending the field as spender instead of spenderAddress returns
Missing spender address parameter.
Allowances are per spender. An allowance granted to one contract gives nothing to another, so an
investor who has invested in one offering still has to approve the next offering’s escrow separately.
Purpose
tokenSymbol
spenderAddress
Investing in an offering
the offering’s payment token
escrowAddress
Distributing dividends
the asset’s payment token
tokenAddress (the STO token contract)
Both addresses come from the same call:
curl --request GET \ --url 'https://api.sandbox.brickken.com/get-tokenizer-info?tokenSymbol=EXMPL' \ --header 'x-api-key: YOUR_API_KEY'
Approving payment tokens for dividend distributions
Before calling dividendDistribution, approve the tokenized asset’s configured payment token and set spenderAddress to the STO token contract address.Use the response fields as follows:
tokenAddress → spenderAddress in the approve request
paymentTokenAddress → the ERC-20 contract being approved; use its configured symbol, such as USDT, as tokenSymbol
companyWalletAddress → tokenizerAddress when approving a shared payment token
escrowAddress → do not use this as the spender for dividendDistribution
Approving the payment token to escrowAddress does not satisfy the dividend allowance check. The allowance must be from signerAddress to the STO tokenAddress.
For example, if get-tokenizer-info returns the STO address 0x2222222222222222222222222222222222222222 and the configured payment token is USDT:
Some payment tokens refuse to change a non-zero allowance directly. When the signer already has a
non-zero allowance for that spender, the response therefore contains two transactions — a reset
to 0 followed by the new amount — and txId is an array rather than a single value.
Iterate the array rather than assuming a single entry, and broadcast the transactions in order,
waiting for the reset to confirm before sending the second.
Both transactions are gas-estimated at prepare time, while the reset is still unmined. On a token
that strictly forbids a non-zero to non-zero change, that estimate can fail and the whole prepare
call returns a revert with empty data ("data": "0x").If it does: check the current allowance with GET /get-allowance. If it already covers the amount
you need, skip the approval entirely. Otherwise prepare and send amount: "0" on its own first,
wait for it to confirm, then prepare the new amount.
Preparing does not touch the chain. The response gives you txId and an array of unsigned transactions — you still have to sign and submit them.
1
Sign every returned transaction
Sign each entry locally with the wallet that sends the transaction — signerAddress, or investorAddress for newInvest and claimTokens. It must be whitelisted by Brickken, and it needs native gas on the target chain.
2
Submit the signed payloads
POST them to /send-transactions as { txId, signedTransactions } and Brickken broadcasts for you.If you would rather broadcast yourself, prepare with executionMode: "client-broadcast" and confirm afterwards with { txId, txHash } instead.
3
Poll until it confirms
Call GET /get-transaction-status with the txId. A pending status means it is broadcast but not yet mined — do not resubmit.
Required. Address allowed to spend the approved amount. Allowances are per spender, so each offering's escrow must be approved separately. For an investment, use that offering's escrowAddress. For a payment-token approval before dividendDistribution, use the STO tokenAddress returned by GET /get-tokenizer-info; never use escrowAddress for that allowance. A malformed value is rejected with a validation error naming this field; whitespace and a bad EIP-55 checksum are the usual causes.
Required. Amount the spender is allowed to spend, in whole tokens. The API applies the token's decimals, so send 100 for 100 USDT rather than the raw six-decimal value.
Optional. Required when tokenSymbol is a payment token (HAI, BKN, USDC, USDT). Tokenizer wallet the approval is scoped to; use companyWalletAddress from GET /get-tokenizer-info for the related tokenized asset.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Brickken Documentation","colors":{"primary":"#4C82df","light":"#4C82df","dark":"#4C82df"},"logo":{"light":"https://mintcdn.com/brickken/UYpLPKOSKNI6CnjX/logo/light.svg?fit=max\u0026auto=format\u0026n=UYpLPKOSKNI6CnjX\u0026q=85\u0026s=192d7d8eaa4997ed5fe5ebf73e4e6aee","dark":"https://mintcdn.com/brickken/UYpLPKOSKNI6CnjX/logo/dark.svg?fit=max\u0026auto=format\u0026n=UYpLPKOSKNI6CnjX\u0026q=85\u0026s=a65d0b5432e2917c02ee6ed31984af6f"},"favicon":"https://mintcdn.com/brickken/UYpLPKOSKNI6CnjX/favicon.svg?fit=max\u0026auto=format\u0026n=UYpLPKOSKNI6CnjX\u0026q=85\u0026s=51afb98395641cf97bb79fb30a48d4b1","navbar":{"links":[{"href":"https://docs.brickken.com/get-started/request-api-key","label":"Get an API key"},{"href":"mailto:support@brickken.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dapp.brickken.com/en/dashboard/home"}},"footer":{"socials":{"x":"https://x.com/brickken","instagram":"https://www.instagram.com/brickken","facebook":"https://www.facebook.com/Brickken","linkedin":"https://www.linkedin.com/company/brickken","youtube":"https://www.youtube.com/@Brickken","discord":"https://discord.com/invite/FBsBVsBqxV"}},"contextual":{"options":[{"title":"Documentation","description":"Open the Brickken documentation home.","icon":"book-open-cover","href":"https://docs.brickken.com"},{"title":"Community","description":"Join the Brickken community on Discord.","icon":"discord","href":"https://discord.com/invite/brickken-official-community-851756929268056086"},{"title":"Blog","description":"Read the Brickken blog.","icon":"newspaper","href":"https://www.brickken.com/blog"}],"display":"toc"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Authentication","icon":"key","href":"/get-started/authentication"},{"anchor":"Request an API key","icon":"envelope","href":"/get-started/request-api-key"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"brickken","hasAudioNarration":false,"actualSubdomain":"brickken","customDomains":["docs.brickken.com"],"gitSource":{"type":"github","owner":"fbrickken","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a9844f4157c701ea07b7cc9","collectionId":"7f2c4ef2-df49-47ac-9084-833a740401c6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a9844f4157c701ea07b7cc9"},"entitlements":{},"buildId":"6a9844f4157c701ea07b7cc9","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Agentic API","count":36},{"language":"default","tag":"Dapp API","count":34},{"language":"default","tag":"SDK","count":14},{"language":"default","tag":"Prepare Transactions","count":13},{"language":"default","tag":"Read Endpoints","count":13},{"language":"default","tag":"CLI","count":13},{"language":"default","tag":"RAMS Mandates (ERC-8226)","count":11},{"language":"default","tag":"Overview","count":8},{"language":"default","tag":"Get Started","count":8},{"language":"default","tag":"Guides","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","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":"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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoint/prepare-approve","slug":"/api-reference/endpoint/prepare-approve","pageMetadata":{"title":"approve","description":"Grant an ERC-20 allowance before an investment or a dividend distribution.","openapi":"api-reference/prepare/approve.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-approve"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Grant an ERC-20 allowance before an investment or a dividend distribution.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Prepares unsigned transactions for approving a spender to use tokens on behalf of the signer. Use `,_jsx(_components.code,{children:`POST /prepare-transactions`}),` with `,_jsx(_components.code,{children:`method=approve`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`fields`,children:`Fields`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`tokenSymbol`}),` selects the `,_jsx(_components.strong,{children:`token being approved`}),`, not the asset it relates to.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`spenderAddress`}),` is the address allowed to spend it. It is never derived — you must pass it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`tokenizerAddress`}),` is additionally required when `,_jsx(_components.code,{children:`tokenSymbol`}),` is a shared payment token\n(`,_jsx(_components.code,{children:`USDT`}),`, `,_jsx(_components.code,{children:`USDC`}),`, `,_jsx(_components.code,{children:`BKN`}),`, `,_jsx(_components.code,{children:`HAI`}),`). Use `,_jsx(_components.code,{children:`companyWalletAddress`}),` from `,_jsx(_components.code,{children:`GET /get-tokenizer-info`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`amount`}),` is in `,_jsx(_components.strong,{children:`whole tokens`}),`. Send `,_jsx(_components.code,{children:`\"100\"`}),` for 100 USDT; the API applies the token’s decimals\nfor you. Do not pre-multiply.`]}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`spenderAddress`}),` is validated as an EVM address, and a malformed value is rejected with a\nvalidation error naming that field. Two things trip it most often: an invalid EIP-55 checksum, and\nleading or trailing whitespace picked up from a copied value or an environment variable. Trim the\nvalue, or send the address in all lowercase, which always passes the checksum rule.`]}),_jsxs(_components.p,{children:[`Sending the field as `,_jsx(_components.code,{children:`spender`}),` instead of `,_jsx(_components.code,{children:`spenderAddress`}),` returns\n`,_jsx(_components.code,{children:`Missing spender address parameter`}),`.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`choosing-the-spender`,children:`Choosing the spender`}),`\n`,_jsxs(_components.p,{children:[`Allowances are `,_jsx(_components.strong,{children:`per spender`}),`. An allowance granted to one contract gives nothing to another, so an\ninvestor who has invested in one offering still has to approve the next offering’s escrow separately.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Purpose`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`tokenSymbol`})}),_jsx(_components.th,{children:_jsx(_components.code,{children:`spenderAddress`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Investing in an offering`}),_jsx(_components.td,{children:`the offering’s payment token`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`escrowAddress`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Distributing dividends`}),_jsx(_components.td,{children:`the asset’s payment token`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`tokenAddress`}),` (the STO token contract)`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Both addresses come from the same call:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` GET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.sandbox.brickken.com/get-tokenizer-info?tokenSymbol=EXMPL'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'x-api-key: YOUR_API_KEY'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`approving-payment-tokens-for-dividend-distributions`,children:`Approving payment tokens for dividend distributions`}),`\n`,_jsxs(_components.p,{children:[`Before calling `,_jsx(_components.code,{children:`dividendDistribution`}),`, approve the tokenized asset’s configured payment token and set `,_jsx(_components.code,{children:`spenderAddress`}),` to the `,_jsx(_components.strong,{children:`STO token contract address`}),`.`]}),`\n`,_jsx(_components.p,{children:`Use the response fields as follows:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`tokenAddress`}),` → `,_jsx(_components.code,{children:`spenderAddress`}),` in the `,_jsx(_components.code,{children:`approve`}),` request`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`paymentTokenAddress`}),` → the ERC-20 contract being approved; use its configured symbol, such as `,_jsx(_components.code,{children:`USDT`}),`, as `,_jsx(_components.code,{children:`tokenSymbol`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`companyWalletAddress`}),` → `,_jsx(_components.code,{children:`tokenizerAddress`}),` when approving a shared payment token`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`escrowAddress`}),` → `,_jsxs(_components.strong,{children:[`do not use this as the spender for `,_jsx(_components.code,{children:`dividendDistribution`})]})]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Approving the payment token to `,_jsx(_components.code,{children:`escrowAddress`}),` does not satisfy the dividend allowance check. The allowance must be from `,_jsx(_components.code,{children:`signerAddress`}),` to the STO `,_jsx(_components.code,{children:`tokenAddress`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`For example, if `,_jsx(_components.code,{children:`get-tokenizer-info`}),` returns the STO address `,_jsx(_components.code,{children:`0x2222222222222222222222222222222222222222`}),` and the configured payment token is USDT:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"method\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"approve\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"signerAddress\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0x1111111111111111111111111111111111111111\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"chainId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aa36a7\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"tokenSymbol\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"USDT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"spenderAddress\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0x2222222222222222222222222222222222222222\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"100\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"tokenizerAddress\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0x1111111111111111111111111111111111111111\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Sign and submit the prepared approval, then wait for its on-chain confirmation before preparing `,_jsx(_components.code,{children:`dividendDistribution`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`replacing-an-existing-allowance`,children:`Replacing an existing allowance`}),`\n`,_jsxs(_components.p,{children:[`Some payment tokens refuse to change a non-zero allowance directly. When the signer already has a\nnon-zero allowance for that spender, the response therefore contains `,_jsx(_components.strong,{children:`two`}),` transactions — a reset\nto `,_jsx(_components.code,{children:`0`}),` followed by the new amount — and `,_jsx(_components.code,{children:`txId`}),` is an array rather than a single value.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"transactions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [ { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"…reset to 0…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }, { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"…new amount…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } ],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"txId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0xaaa…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0xbbb…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Iterate the array rather than assuming a single entry, and broadcast the transactions `,_jsx(_components.strong,{children:`in order`}),`,\nwaiting for the reset to confirm before sending the second.`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[`Both transactions are gas-estimated at prepare time, while the reset is still unmined. On a token\nthat strictly forbids a non-zero to non-zero change, that estimate can fail and the whole prepare\ncall returns a revert with empty data (`,_jsx(_components.code,{children:`\"data\": \"0x\"`}),`).`]}),_jsxs(_components.p,{children:[`If it does: check the current allowance with `,_jsx(_components.code,{children:`GET /get-allowance`}),`. If it already covers the amount\nyou need, skip the approval entirely. Otherwise prepare and send `,_jsx(_components.code,{children:`amount: \"0\"`}),` on its own first,\nwait for it to confirm, then prepare the new amount.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-step`,children:`Next step`}),`\n`,_jsxs(_components.p,{children:[`Preparing does not touch the chain. The response gives you `,_jsx(_components.code,{children:`txId`}),` and an array of unsigned `,_jsx(_components.code,{children:`transactions`}),` — you still have to sign and submit them.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Sign every returned transaction`,children:_jsxs(_components.p,{children:[`Sign each entry locally with the wallet that sends the transaction — `,_jsx(_components.code,{children:`signerAddress`}),`, or `,_jsx(_components.code,{children:`investorAddress`}),` for `,_jsx(_components.code,{children:`newInvest`}),` and `,_jsx(_components.code,{children:`claimTokens`}),`. It must be whitelisted by Brickken, and it needs native gas on the target chain.`]})}),_jsxs(Step,{title:`Submit the signed payloads`,children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST`}),` them to `,_jsx(_components.a,{href:`/api-reference/endpoint/send`,children:_jsx(_components.code,{children:`/send-transactions`})}),` as `,_jsx(_components.code,{children:`{ txId, signedTransactions }`}),` and Brickken broadcasts for you.`]}),_jsxs(_components.p,{children:[`If you would rather broadcast yourself, prepare with `,_jsx(_components.code,{children:`executionMode: \"client-broadcast\"`}),` and confirm afterwards with `,_jsx(_components.code,{children:`{ txId, txHash }`}),` instead.`]})]}),_jsx(Step,{title:`Poll until it confirms`,children:_jsxs(_components.p,{children:[`Call `,_jsx(_components.a,{href:`/api-reference/endpoint/get-transaction-status`,children:_jsx(_components.code,{children:`GET /get-transaction-status`})}),` with the `,_jsx(_components.code,{children:`txId`}),`. A `,_jsx(_components.code,{children:`pending`}),` status means it is broadcast but not yet mined — do not resubmit.`]})})]}),`\n`,_jsxs(_components.p,{children:[`Full walkthrough: `,_jsx(_components.a,{href:`/api-reference/guides/tokenize-and-run-an-sto`,children:`Tokenize an asset and run an STO`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"approve","description":"Grant an ERC-20 allowance before an investment or a dividend distribution.","openapi":"api-reference/prepare/approve.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-approve"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Fields","slug":"fields","depth":2,"children":[]},{"title":"Choosing the spender","slug":"choosing-the-spender","depth":2,"children":[]},{"title":"Approving payment tokens for dividend distributions","slug":"approving-payment-tokens-for-dividend-distributions","depth":2,"children":[]},{"title":"Replacing an existing allowance","slug":"replacing-an-existing-allowance","depth":2,"children":[]},{"title":"Next step","slug":"next-step","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"prepare_approve","summary":"Prepare a token approval","description":"Grant an ERC-20 allowance before an investment or a dividend distribution.","security":["7cbddfdc-1e77-4ca9-9c88-a48708c9f679"],"requestBody":"27b5d219-7a5e-4c8f-8811-c04cdbbb7a8b","responses":{"200":"84ed5fa9-e5b6-4fa7-8ce7-5472ef0424ca"},"method":"post","type":"path","servers":["a7869e12-2f8f-4f45-a1a6-307bbbc457c7","9e911c9b-9004-44c4-b7b1-38c7c8bf4e68"],"path":"/prepare-transactions","baseUrlOptions":["https://api.sandbox.brickken.com","https://api.brickken.com"],"title":"Prepare a token approval","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["method","chainId","signerAddress","tokenSymbol","spenderAddress","amount"],"properties":{"method":{"type":"string","example":"approve","enum":["approve"],"description":"Required. Operation to prepare. Must be `approve` for this endpoint.","default":"approve","isRequired":true,"uniqueKey":"method","typeLabel":"enum\u003cstring>"},"chainId":{"type":"string","description":"Required. Blockchain network identifier. Hex format is recommended, for example Sepolia `aa36a7`.","example":"aa36a7","isRequired":true,"uniqueKey":"chainId","typeLabel":"string"},"signerAddress":{"type":"string","description":"Required. Wallet that signs the approval.","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","isRequired":true,"uniqueKey":"signerAddress","typeLabel":"string"},"tokenSymbol":{"type":"string","description":"Required. Symbol of the token to approve. Accepts a tokenized asset symbol or a payment token symbol such as `USDT`, `USDC`, `BKN` or `HAI`.","example":"EXMPL","isRequired":true,"uniqueKey":"tokenSymbol","typeLabel":"string"},"spenderAddress":{"type":"string","description":"Required. Address allowed to spend the approved amount. Allowances are per spender, so each offering's escrow must be approved separately. For an investment, use that offering's `escrowAddress`. For a payment-token approval before `dividendDistribution`, use the STO `tokenAddress` returned by `GET /get-tokenizer-info`; never use `escrowAddress` for that allowance. A malformed value is rejected with a validation error naming this field; whitespace and a bad EIP-55 checksum are the usual causes.","example":"0x2222222222222222222222222222222222222222","pattern":"^0x[a-fA-F0-9]{40}$","isRequired":true,"uniqueKey":"spenderAddress","typeLabel":"string"},"amount":{"type":"string","description":"Required. Amount the spender is allowed to spend, in whole tokens. The API applies the token's decimals, so send `100` for 100 USDT rather than the raw six-decimal value.","example":"100","isRequired":true,"uniqueKey":"amount","typeLabel":"string"},"investorAddress":{"type":"string","description":"Optional. Token owner address when approving on behalf of an investor. If omitted, `signerAddress` is used as the owner.","example":"0x1111111111111111111111111111111111111111","pattern":"^0x[a-fA-F0-9]{40}$","uniqueKey":"investorAddress","typeLabel":"string"},"tokenizerEmail":{"type":"string","description":"Optional. Tokenizer email used as a fallback when the tokenizer cannot be resolved from the token.","example":"tokenizer@example.com","format":"email","uniqueKey":"tokenizerEmail","typeLabel":"string\u003cemail>"},"tokenizerAddress":{"type":"string","description":"Optional. Required when `tokenSymbol` is a payment token (`HAI`, `BKN`, `USDC`, `USDT`). Tokenizer wallet the approval is scoped to; use `companyWalletAddress` from `GET /get-tokenizer-info` for the related tokenized asset.","example":"0x1111111111111111111111111111111111111111","pattern":"^0x[a-fA-F0-9]{40}$","uniqueKey":"tokenizerAddress","typeLabel":"string"}},"example":{"method":"approve","chainId":"aa36a7","signerAddress":"0x1111111111111111111111111111111111111111","tokenSymbol":"USDT","spenderAddress":"0x2222222222222222222222222222222222222222","amount":"100","tokenizerAddress":"0x1111111111111111111111111111111111111111"},"uniqueKey":"","typeLabel":"object"},"example":{"method":"approve","chainId":"aa36a7","signerAddress":"0x1111111111111111111111111111111111111111","tokenSymbol":"USDT","spenderAddress":"0x2222222222222222222222222222222222222222","amount":"100","tokenizerAddress":"0x1111111111111111111111111111111111111111"},"examples":{"Example":{"title":"Example","value":{"method":"approve","chainId":"aa36a7","signerAddress":"0x1111111111111111111111111111111111111111","tokenSymbol":"USDT","spenderAddress":"0x2222222222222222222222222222222222222222","amount":"100","tokenizerAddress":"0x1111111111111111111111111111111111111111"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"84ed5fa9-e5b6-4fa7-8ce7-5472ef0424ca":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"array","description":"Array of unsigned transaction objects ready for signing","items":{"type":"object","properties":{"from":{"type":"string","description":"Sender address","example":"0x1234567890abcdef1234567890abcdef12345678","uniqueKey":"transactions.items.[INDEX].from","typeLabel":"string"},"to":{"type":"string","description":"Recipient address","example":"0xabcdef1234567890abcdef1234567890abcdef12","uniqueKey":"transactions.items.[INDEX].to","typeLabel":"string"},"value":{"type":"string","description":"Transaction value in hex","example":"0x00","uniqueKey":"transactions.items.[INDEX].value","typeLabel":"string"},"nonce":{"type":"integer","description":"Transaction nonce","example":3792,"uniqueKey":"transactions.items.[INDEX].nonce","typeLabel":"integer"},"chainId":{"type":"integer","description":"Blockchain network chain ID","example":11155111,"uniqueKey":"transactions.items.[INDEX].chainId","typeLabel":"integer"},"data":{"type":"string","description":"Transaction data payload","example":"0xd362e8a70000000000000000000000000000000000000000000000000000000000000040...","uniqueKey":"transactions.items.[INDEX].data","typeLabel":"string"},"type":{"type":"integer","description":"Transaction type (EIP-1559)","example":2,"uniqueKey":"transactions.items.[INDEX].type","typeLabel":"integer"},"maxPriorityFeePerGas":{"type":"string","description":"Maximum priority fee per gas","example":"1150000","uniqueKey":"transactions.items.[INDEX].maxPriorityFeePerGas","typeLabel":"string"},"maxFeePerGas":{"type":"string","description":"Maximum fee per gas","example":"1156037","uniqueKey":"transactions.items.[INDEX].maxFeePerGas","typeLabel":"string"},"gasLimit":{"type":"string","description":"Gas limit in hex","example":"0xccef","uniqueKey":"transactions.items.[INDEX].gasLimit","typeLabel":"string"}},"uniqueKey":"transactions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"transactions","typeLabel":"object[]"},"txId":{"type":"string","description":"Unique identifier for this transaction batch (required for /send-transactions). This is NOT a blockchain transaction hash.","example":"0x46adea7bdf49c576a760102e0d6bc9ecd650b3998588cd3d7f576a7973426aad","isRequired":true,"uniqueKey":"txId","typeLabel":"string"},"info":{"type":"object","description":"Metadata about the operation","properties":{"tokenizerEmail":{"type":"string","description":"Email of the tokenizer","example":"tokenizer@example.com","uniqueKey":"info.tokenizerEmail","typeLabel":"string"},"tokenSymbol":{"type":"string","description":"Symbol of the token","example":"EXMPL","uniqueKey":"info.tokenSymbol","typeLabel":"string"},"investorEmail":{"type":"string","description":"Email of the investor (when applicable)","example":"investor@example.com","uniqueKey":"info.investorEmail","typeLabel":"string"}},"uniqueKey":"info","typeLabel":"object"}},"required":["transactions","txId"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"transactions":[{"from":"0x1234567890abcdef1234567890abcdef12345678","to":"0xabcdef1234567890abcdef1234567890abcdef12","value":"0x00","nonce":3792,"chainId":11155111,"data":"0xd362e8a70000000000000000000000000000000000000000000000000000000000000040...","type":2,"maxPriorityFeePerGas":"1150000","maxFeePerGas":"1156037","gasLimit":"0xccef"}],"txId":"0x46adea7bdf49c576a760102e0d6bc9ecd650b3998588cd3d7f576a7973426aad","info":{"tokenizerEmail":"tokenizer@example.com","tokenSymbol":"EXMPL","investorEmail":"investor@example.com"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"7cbddfdc-1e77-4ca9-9c88-a48708c9f679":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[]}}},"servers":{"a7869e12-2f8f-4f45-a1a6-307bbbc457c7":{"url":"https://api.sandbox.brickken.com","description":"Sandbox Environment"},"9e911c9b-9004-44c4-b7b1-38c7c8bf4e68":{"url":"https://api.brickken.com","description":"Production Environment"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[]},"schema":{"title":"x-api-key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"x-api-key"}],"title":"apiKeyAuth"}]},"originalFileLocation":"api-reference/prepare/approve.json"},"subdomain":"brickken","siteName":"Brickken Documentation","title":"approve - Brickken Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-02T15:15:43.458Z","originalFileLocation":"api-reference/endpoint/prepare-approve.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=\"Grant an ERC-20 allowance before an investment or a dividend distribution.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Brickken Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_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/brickken/7zynTh_4u-m-NSjz/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"approve - Brickken Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Grant an ERC-20 allowance before an investment or a dividend distribution.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Brickken Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.brickken.com/api-reference/endpoint/prepare-approve\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://brickken.mintlify.app/_mintlify/api/og/v2?division=Prepare+Transactions\u0026amp;title=approve\u0026amp;description=Grant+an+ERC-20+allowance+before+an+investment+or+a+dividend+distribution.\u0026amp;theme=2a5dee1e52c4281f2511c0cb\u0026amp;signature=c81580f66a303b4f95ea07b40942f8d9be77347169ed5286df27df95aa02678e\">\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=\"approve - Brickken Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Grant an ERC-20 allowance before an investment or a dividend distribution.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://brickken.mintlify.app/_mintlify/api/og/v2?division=Prepare+Transactions\u0026amp;title=approve\u0026amp;description=Grant+an+ERC-20+allowance+before+an+investment+or+a+dividend+distribution.\u0026amp;theme=2a5dee1e52c4281f2511c0cb\u0026amp;signature=c81580f66a303b4f95ea07b40942f8d9be77347169ed5286df27df95aa02678e\">\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/brickken/7zynTh_4u-m-NSjz/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Brickken Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4C82df\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.brickken.com/api-reference/endpoint/prepare-approve\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoint/prepare-approve.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.brickken.com/#organization\",\"name\":\"Brickken Documentation\",\"url\":\"https://docs.brickken.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/brickken/UYpLPKOSKNI6CnjX/logo/light.svg?fit=max\u0026auto=format\u0026n=UYpLPKOSKNI6CnjX\u0026q=85\u0026s=192d7d8eaa4997ed5fe5ebf73e4e6aee\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.brickken.com#website\",\"name\":\"Brickken Documentation\",\"url\":\"https://docs.brickken.com\",\"publisher\":{\"@id\":\"https://docs.brickken.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve#webpage\",\"url\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve\",\"name\":\"approve\",\"description\":\"Grant an ERC-20 allowance before an investment or a dividend distribution.\",\"dateModified\":\"2026-09-02T15:15:43.458Z\",\"isPartOf\":{\"@id\":\"https://docs.brickken.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Prepare Transactions\",\"item\":\"https://docs.brickken.com/api-reference/endpoint/create\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"approve\",\"item\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve#apireference\",\"headline\":\"approve\",\"name\":\"approve\",\"description\":\"Grant an ERC-20 allowance before an investment or a dividend distribution.\",\"url\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve\",\"mainEntityOfPage\":{\"@id\":\"https://docs.brickken.com/api-reference/endpoint/prepare-approve#webpage\"},\"dateModified\":\"2026-09-02T15:15:43.458Z\",\"publisher\":{\"@id\":\"https://docs.brickken.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.brickken.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Brickken Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Brickken Documentation","nav":{"global":{"anchors":[{"anchor":"Authentication","icon":"key","href":"/get-started/authentication"},{"anchor":"Request an API key","icon":"envelope","href":"/get-started/request-api-key"}]},"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"Dapp API","groups":[{"group":"Overview","pages":[{"title":"Dapp API","href":"/api-reference/introduction"},{"title":"Postman Collection","icon":"download","href":"/api-reference/postman"}]},{"group":"Guides","pages":[{"title":"Tokenize an asset and run an STO","icon":"route","href":"/api-reference/guides/tokenize-and-run-an-sto"},{"title":"Browser wallets","icon":"wallet","href":"/api-reference/guides/browser-wallets"},{"title":"Troubleshooting","icon":"stethoscope","href":"/api-reference/guides/troubleshooting"}]},{"group":"Prepare Transactions","pages":[{"title":"Prepare Transactions","openapi":"api-reference/openapi.json POST /prepare-transactions","href":"/api-reference/endpoint/create"},{"title":"newTokenization","openapi":"api-reference/prepare/newTokenization.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-newTokenization"},{"title":"mintToken","openapi":"api-reference/prepare/mintToken.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-mintToken"},{"title":"whitelist","openapi":"api-reference/prepare/whitelist.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-whitelist"},{"title":"burnToken","openapi":"api-reference/prepare/burnToken.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-burnToken"},{"title":"transferFrom","openapi":"api-reference/prepare/transferFrom.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-transferFrom"},{"title":"transferTo","openapi":"api-reference/prepare/transferTo.json POST /prepare-transactions","description":"Prepares the unsigned transaction that transfers tokens from the signer balance to another address.","href":"/api-reference/endpoint/prepare-transferTo"},{"title":"approve","openapi":"api-reference/prepare/approve.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-approve"},{"title":"dividendDistribution","description":"Distribute payment-token dividends to the holders of a tokenized asset.","openapi":"api-reference/prepare/dividendDistribution.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-dividendDistribution"},{"title":"newSto","openapi":"api-reference/prepare/newSto.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-newSto"},{"title":"newInvest","openapi":"api-reference/prepare/newInvest.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-newInvest"},{"title":"claimTokens","openapi":"api-reference/prepare/claimTokens.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-claimTokens"},{"title":"closeOffer","openapi":"api-reference/prepare/closeOffer.json POST /prepare-transactions","href":"/api-reference/endpoint/prepare-closeOffer"}]},{"group":"Send Transactions","pages":[{"title":"Send Transactions","openapi":"POST /send-transactions","href":"/api-reference/endpoint/send"}]},{"group":"Read Endpoints","pages":[{"title":"Get Network Information","openapi":"GET /get-network-info","href":"/api-reference/endpoint/get-network-info"},{"title":"Get Tokenizer Information","openapi":"GET /get-tokenizer-info","href":"/api-reference/endpoint/get-tokenizer-info"},{"title":"Get Token Information","openapi":"GET /get-token-info","href":"/api-reference/endpoint/get-token-info"},{"title":"Get STOs","openapi":"GET /get-stos","href":"/api-reference/endpoint/get-stos"},{"title":"Get STO by ID","openapi":"GET /get-sto-by-id","href":"/api-reference/endpoint/get-sto-by-id"},{"title":"Get STO Balance","openapi":"GET /get-sto-balance","href":"/api-reference/endpoint/get-sto-balance"},{"title":"Get Investments by STO","openapi":"GET /get-investments-by-sto-id","href":"/api-reference/endpoint/get-investments-by-sto"},{"title":"Get Investor Information","openapi":"GET /get-investor-info","href":"/api-reference/endpoint/get-investors-info"},{"title":"Get Whitelist Status","openapi":"GET /get-whitelist-status","href":"/api-reference/endpoint/get-whitelist-status"},{"title":"Get Balance and Whitelist Status","openapi":"GET /get-balance-whitelist","href":"/api-reference/endpoint/get-balance-whitelist"},{"title":"Get Allowance","openapi":"GET /get-allowance","href":"/api-reference/endpoint/get-allowance"},{"title":"Get Dividend Distribution Info","openapi":"GET /get-dividend-distribution","href":"/api-reference/endpoint/get-dividend-distribution"},{"title":"Get Transaction Status","openapi":"GET /get-transaction-status","href":"/api-reference/endpoint/get-transaction-status"}]},{"group":"Token Documents","pages":[{"title":"Update Token Documentation","openapi":"PATCH /patch-token-docs","href":"/api-reference/endpoint/update-docs"}]},{"group":"KYC","pages":[{"title":"Create KYC Link","openapi":"POST /create-kyc-link","href":"/api-reference/endpoint/create-kyc-link"}]}]},{"tab":"Agentic API","pages":[{"title":"Agentic API","href":"/api-reference/endpoint/agentic-methods-x402"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/introduction"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/introduction"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk/introduction"}]},{"tab":"Skill","pages":[{"title":"Skill","href":"/skill/introduction"}]}]},"basePath":"","title":"approve - Brickken Documentation","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","Page-BAvA99GL.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}