# POST /v1/mirror

## Add a new mirror with optional overrides.

> Create a mirror for the specified wallet by providing its address and any overrides. If the wallet is already being mirrored, the request will succeed but no changes will be made.

```json
{"openapi":"3.1.1","info":{"title":"Odinbot API","version":"0.1.0"},"servers":[{"url":"https://api.odinbot.io"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","name":"x-api-key","in":"header"}},"schemas":{"Mirror":{"required":["address"],"allOf":[{"$ref":"#/components/schemas/CommonControlsOrOverrides"},{"type":"object","properties":{"address":{"type":"string","description":"Solana public key of the wallet you want to mirror. This field is mandatory and uniquely identifies the mirror entry."},"autoSellProfileKey":{"description":"Key of the auto-sell profile OdinBot should apply for this mirror only. If you supply the literal string \"override_to_empty\", OdinBot will remove any auto-sell profile from this mirror even when a global profile exists in Controls.","anyOf":[{"type":"string"},{"type":"string","enum":["override_to_empty"]}]}}}]},"CommonControlsOrOverrides":{"type":"object","properties":{"tradeSizeLamports":{"type":"integer","format":"int64","minimum":0,"description":"Total lamports Odinbot spends per copy buy when no scaling strategy is in effect."},"tradeSpeed":{"type":"string","description":"Selects the speed tier for copy-trades.","enum":["Standard","Turbo","Godly"]},"buyMinPriorityFee":{"type":"number","description":"Minimum priority fee for buys. Applies to spot copy buys on Instant buy mode.","minimum":0},"sellStrategy":{"type":"string","description":"Defines how Odinbot exits positions when the mirrored wallet sells.","enum":["SellAll","SellProportionally","NoSell"]},"maxBuysPerMirrorPerHour":{"type":"integer","description":"Limits how many buys Odinbot will make for a mirrored wallet within an hour.","minimum":0},"maxBuysPerMirrorPerDay":{"type":"integer","description":"Limits the number of buys Odin will make for a mirrored wallet within a 24-hour window.","minimum":0},"maxBuysPerTokenPerDay":{"type":"integer","description":"Maximum number of buys allowed for the same token in a 24-hour window.","minimum":0},"maxBuysPerTokenPerWeek":{"type":"integer","description":"Maximum number of buys allowed for the same token in a 7-day window.","minimum":0},"allowPumpFun":{"type":"boolean","description":"If `true`, OdinBot is allowed to copy trades on pump.fun."},"snipeLaunchpadLaunches":{"type":"boolean","description":"If `true`, OdinBot will snipe (quickly buy) the tokens that your mirror launches (or creates) on a launchpad."},"launchpadLaunchSnipeTradeSizeSol":{"type":"number","description":"Amount in SOL to spend on each launchpad snipe (independent of tradeSizeLamports).","minimum":0},"mevProtection":{"type":"string","description":"Sets MEV protection.","enum":["Fastest","Balanced","Protected"]},"degenMode":{"type":"boolean","description":"Removes slippage entirely for trades not executed on Pump.fun or PumpSwap."},"allowBuys":{"type":"boolean","description":"Master switch that disables all new buys when set to false. Sells remain unaffected."},"buyStrategy":{"type":"string","description":"`Constant` uses tradeSizeLamports for every buy. `Scaling` calculates size from ssMinBuy, ssPercent, and ssMaxBuy.","enum":["Constant","Scaling"]},"ssMinBuy":{"type":"number","description":"Defines the smallest trade size (in SOL) that Odinbot will execute. If your buy would be below this size, no trade will be made. (only used when `buyStrategy` is set to `Scaling`).","minimum":0},"ssPercent":{"type":"number","description":"Percentage of the mirror's original buy size OdinBot should match.","minimum":0},"ssMaxBuy":{"type":"number","description":"Sets the largest trade size (in SOL) that Odinbot will execute. If the calculated buy size exceeds this value, Odinbot will instead use this value for the buy size.","minimum":0},"buyMode":{"type":"string","description":"`Instant` will copy buys instantly. `BuyTheDip` will wait for a dip after the mirror's buy before buying. `BuyTheDip` mode uses `buyDipPct` and `buyDipTimeoutSecs`.","enum":["Instant","BuyTheDip"]},"buyDipPct":{"type":"number","description":"Only used in `BuyTheDip` mode. How much the price dips before you buy. Must be a number between 0 and 100. If empty, defaults to 5.","exclusiveMinimum":0,"exclusiveMaximum":100},"buyDipTimeoutSecs":{"type":"number","description":"Only used in `BuyTheDip` mode. How long to wait for a dip after your mirror buys. Max 7 days. If empty, defaults to 1 day.","exclusiveMinimum":0,"maximum":604800},"crossMirrorPrevention":{"type":"boolean","description":"When enabled, only the mirrored wallet that caused the first trade of a token can trade that token until the position is closed."},"pfSlippage":{"type":"number","description":"Allowed slippage (%) when buying on Pump.fun or PumpSwap.","exclusiveMinimum":0},"minSlippagePct":{"type":"number","description":"Minimum slippage (%). This is an advanced setting that will cause your trade to fail if your executed slippage is too low. Applies to spot Pump.fun copy buys on Instant buy mode.","minimum":0},"buyExtraTipPct":{"type":"number","description":"Adds a percentage-based additional tip to potentially speed up mirrored buys. The tip scales with the trade size.","minimum":0},"sellExtraTipPct":{"type":"number","description":"Adds a percentage-based additional tip to potentially speed up mirrored sells. The tip scales with the trade size.","minimum":0},"minMcUsd":{"type":"number","description":"Minimum market cap (USD) a token must have for OdinBot to buy it."},"maxMcUsd":{"type":"number","description":"Maximum market cap (USD) above which OdinBot will not buy."},"minTokenAgeSecs":{"type":"number","description":"Minimum token age (in seconds) a token must have for OdinBot to buy it.","minimum":0},"maxTokenAgeSecs":{"type":"number","description":"Maximum token age (in seconds) a token must have for OdinBot to buy it.","minimum":0},"onlyCopyNewPositions":{"type":"boolean","description":"Only copy the buy if the mirror is opening a new position. A new position means the mirror's balance of the token they're buying was 0 immediately before this buy. Defaults to false."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Message"}}}}}},"400":{"description":"Bad request. Check to make sure you're passing the right parameters.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Message"}}}}}},"401":{"description":"Unauthorized. Make sure you're using the right api key.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Message"}}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Message"}}}}}}}},"paths":{"/v1/mirror":{"post":{"summary":"Add a new mirror with optional overrides.","description":"Create a mirror for the specified wallet by providing its address and any overrides. If the wallet is already being mirrored, the request will succeed but no changes will be made.","requestBody":{"description":"JSON object containing: `mirror`- a Mirror object with `address` (required) and any optional overrides.","content":{"application/json":{"schema":{"type":"object","required":["mirror"],"properties":{"mirror":{"$ref":"#/components/schemas/Mirror"},"save":{"type":"boolean","$comment":"defaults to `false`","description":"Also saves this mirror in your saved wallets. Defaults to `false`."}}}}}},"responses":{"200":{"$ref":"#/components/responses/200"},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"429":{"$ref":"#/components/responses/429"}}}}}}
```


---

# Agent Instructions: 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:

```
GET https://docs.odinbot.io/api-documentation/api-methods/post-v1-mirror.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
