> For the complete documentation index, see [llms.txt](https://docs.intents.aurora.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.intents.aurora.dev/intents-deposits/api-reference/persistent-deposit-address.md).

# Persistent deposit address

## POST /api/persistent-deposit-address/{apiKey}

> Returns a chain-specific deposit address that funnels deposits into the recipient's account. The same address is returned for repeat calls with the same recipient + sender + depositChain + destinationChain/destinationAsset, so users can safely save it externally. A different \`destinationAsset\` (or \`destinationChain\`) yields a different deposit address, because the underlying Intents account is bound to the asset the user receives.\
> \
> \> \*\*EVM chains share one address.\*\* Across different EVM chains you only need to generate the deposit address \*\*once\*\* using any EVM chain as \`depositChain\`. The returned address works automatically for deposits on every other supported EVM chain — no need to call this endpoint again per EVM chain.

```json
{"openapi":"3.0.3","info":{"title":"@aurora-is-near/intents-fee-service","version":"0.0.1"},"servers":[{"url":"https://intents-api.aurora.dev"}],"security":[],"paths":{"/api/persistent-deposit-address/{apiKey}":{"post":{"tags":["deposit"],"description":"Returns a chain-specific deposit address that funnels deposits into the recipient's account. The same address is returned for repeat calls with the same recipient + sender + depositChain + destinationChain/destinationAsset, so users can safely save it externally. A different `destinationAsset` (or `destinationChain`) yields a different deposit address, because the underlying Intents account is bound to the asset the user receives.\n\n> **EVM chains share one address.** Across different EVM chains you only need to generate the deposit address **once** using any EVM chain as `depositChain`. The returned address works automatically for deposits on every other supported EVM chain — no need to call this endpoint again per EVM chain.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recipient":{"type":"string","minLength":1,"description":"Target address on the destination chain. Funds deposited to the returned address will ultimately route to this address."},"sender":{"type":"string","minLength":1,"description":"Identifier of the user the deposit address is generated for (e.g. their ID in the system). A unique deposit address is generated and persisted per (sender, recipient, depositChain), so incoming deposits can be attributed to a specific user. A single underlying Intents account is shared per (sender, recipient) across all chains; only the deposit address is chain-specific."},"depositChain":{"type":"string","enum":["eth","bera","base","gnosis","arb","bsc","avax","op","pol","monad","adi","plasma","scroll","xlayer","sui","xrp","btc","doge","tron","ton","near","sol","zec","ltc","cardano","aleo","bch","dash","starknet"],"description":"Chain the user deposits FROM (the chain of the returned deposit address). Short code matching the widget config Chains enum, e.g. \"arb\" for Arbitrum."},"destinationChain":{"type":"string","enum":["eth","bera","base","gnosis","arb","bsc","avax","op","pol","monad","adi","plasma","scroll","xlayer","sui","xrp","btc","doge","tron","ton","near","sol","zec","ltc","cardano","stellar","aleo","bch","dash","starknet"],"description":"Chain the user receives funds ON. Used to resolve `destinationAsset` when it is provided as a symbol. Short code matching the widget config Chains enum, e.g. \"base\" for Base."},"destinationAsset":{"type":"string","minLength":1,"description":"Asset the user wants to receive on `destinationChain`. Accepts either a token symbol (e.g. \"USDC\") or an asset ID (e.g. \"nep141:base-0x...omft.near\"). When a symbol is used and more than one token shares that symbol on `destinationChain`, the request is rejected with 400 and the caller must switch to the asset ID."}},"required":["recipient","sender","depositChain","destinationChain","destinationAsset"],"description":"To specify the asset the user receives, you can either:\n- Pass a token **symbol** in `destinationAsset` (e.g. \"USDC\") together with `destinationChain` (e.g. \"base\"). The API resolves the symbol to an asset ID on that chain.\n- Or pass an **asset ID** directly in `destinationAsset` (e.g. \"nep141:base-0x...omft.near\"). `destinationChain` is still required to locate it.\n\nWhen a symbol matches more than one token on the same `destinationChain`, the request fails with `400` and an error listing the matching asset IDs (\"Multiple tokens with symbol ... Use one of the asset IDs instead: ...\"). In that case, retry with the specific asset ID you want."}}},"required":true,"description":"To specify the asset the user receives, you can either:\n- Pass a token **symbol** in `destinationAsset` (e.g. \"USDC\") together with `destinationChain` (e.g. \"base\"). The API resolves the symbol to an asset ID on that chain.\n- Or pass an **asset ID** directly in `destinationAsset` (e.g. \"nep141:base-0x...omft.near\"). `destinationChain` is still required to locate it.\n\nWhen a symbol matches more than one token on the same `destinationChain`, the request fails with `400` and an error listing the matching asset IDs (\"Multiple tokens with symbol ... Use one of the asset IDs instead: ...\"). In that case, retry with the specific asset ID you want."},"parameters":[{"schema":{"type":"string"},"in":"path","name":"apiKey","required":true,"description":"API key generated at [https://studio.aurora.dev](https://studio.aurora.dev)"}],"responses":{"200":{"description":"Persistent deposit address generated or fetched from cache","content":{"application/json":{"schema":{"type":"object","properties":{"depositAddress":{"type":"string","description":"Chain-specific deposit address. Sending any supported asset on this chain to this address will deposit funds into the NEAR Intents account associated with `recipient`."},"alreadyExists":{"type":"boolean","description":"True when this exact deposit address already existed and was already user-requested (`requested = true`) before this call — i.e. the call was a cache hit on a previously generated address rather than a new generation."}},"required":["depositAddress","alreadyExists"],"additionalProperties":false,"description":"Persistent deposit address generated or fetched from cache"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"message":{"type":"string","description":"Error message returned by the upstream quote API."},"correlationId":{"type":"string","description":"Unique identifier for request tracing and debugging."},"timestamp":{"type":"string","description":"Timestamp in ISO format when the error response was generated."},"path":{"type":"string","description":"API path associated with the failed request."}},"required":["message","correlationId","timestamp","path"],"additionalProperties":false,"description":"API error, fee configuration is invalid, or `destinationAsset` symbol is ambiguous on `destinationChain`"},{"type":"object","properties":{"message":{"type":"string"},"error":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"statusCode":{"type":"number"}},"required":["message","statusCode"],"additionalProperties":false}]}}}},"404":{"description":"Application key is not assigned or no token matches `destinationAsset` on `destinationChain`","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"error":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"statusCode":{"type":"number","enum":[404]}},"required":["message","statusCode"],"additionalProperties":false,"description":"Application key is not assigned or no token matches `destinationAsset` on `destinationChain`"}}}},"429":{"description":"A concurrent request is already creating this deposit address; retry","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"error":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"statusCode":{"type":"number"}},"required":["message","statusCode"],"additionalProperties":false,"description":"A concurrent request is already creating this deposit address; retry"}}}},"500":{"description":"Internal Server Error - Failed to call upstream services","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"error":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"statusCode":{"type":"number","enum":[500]}},"required":["message","statusCode"],"additionalProperties":false,"description":"Internal Server Error - Failed to call upstream services"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.intents.aurora.dev/intents-deposits/api-reference/persistent-deposit-address.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
