> For the complete documentation index, see [llms.txt](https://docs.nansen.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nansen.ai/api/profiler/address-counterparties-batch.md).

# Address Counterparties (Batch)

Batch counterparties lookup — counterparties and interaction statistics for up to 10 wallet addresses in a single request.

Batch version of [Address Counterparties](/api/profiler/address-counterparties.md): fetch top counterparties for up to 10 distinct wallet addresses in a single request. Each input wallet gets its **own** counterparty set — results are **not** aggregated across wallets. Every response row carries a `wallet_address` field; group by it to split the flattened result back into per-wallet lists.

### Common Scenarios

<table data-full-width="true"><thead><tr><th>Usecase</th><th>Required Parameters</th><th>Expected Output</th></tr></thead><tbody><tr><td>Counterparties for several EVM wallets at once</td><td>wallet_addresses = ["0x28c6...", "0x1522..."],<br>chain = "ethereum"</td><td>Per-wallet counterparty lists with interaction stats, keyed by <code>wallet_address</code></td></tr><tr><td>Batch across EVM chains in one request</td><td>wallet_addresses = ["0x...(eth)", "0x...(base)"],<br>chain = "all"</td><td>Each address auto-routed to its chain; counterparties returned per wallet</td></tr></tbody></table>

### Limitations

* `wallet_addresses`: maximum **10 distinct** addresses per request.
* `date`: maximum **90 days** per request; split wider windows into multiple requests.
* `chain`: one ecosystem per request. Use `all` to batch across EVM chains (Ethereum, Base, Polygon, etc.) or `solana` for Solana; **EVM and Solana addresses cannot be mixed** in a single request.

### Data Freshness & Historical Coverage

For data freshness and historical coverage, see [Data Coverage by Chain](/api/data-coverage.md); this endpoint follows it except where noted below.

* Results are served from a server-side cache: once a requested date range has fully settled (about two days after it closes) it is cached for up to **7 days**, while ranges that include today or a recently-closed window use a short cache of up to **5 minutes**.

## Get Address Counterparties Data (Batch)

> Batch version of the address counterparties endpoint: fetch top counterparties for\
> up to 10 distinct wallet addresses across a date range of up to\
> 90 days.\
> \
> Each input wallet gets its \*\*own\*\* counterparty set — results are \*\*not\*\* aggregated\
> across the input wallets. Every row in the response carries a \`wallet\_address\` field;\
> group by it to demux the flattened result back into per-wallet counterparty lists.\
> \
> Rows are returned as contiguous per-wallet blocks (each block matches what the\
> single-wallet endpoint would return for that wallet), sorted within a block by the\
> requested \`order\_by\` (default \`total\_volume\_usd\` DESC).\
> \
> Limitations:\
> \- \`wallet\_addresses\`: maximum 10 distinct addresses per request.\
> \- \`date\`: maximum 90 days per request; split wider windows into multiple requests.\
> \- \`chain\`: one ecosystem per request. Use \`all\` to batch across EVM chains\
> &#x20; (Ethereum, Base, Polygon, etc.) or \`solana\` for Solana; EVM and Solana\
> &#x20; addresses cannot be mixed in a single request.\
> \
> For a single wallet, or for entity-name / entity-grouped lookups, use\
> \`/api/v1/profiler/address/counterparties\` instead.

```json
{"openapi":"3.1.0","info":{"title":"Nansen API","version":"1.0.0"},"servers":[{"url":"https://api.nansen.ai"}],"security":[{"ApiKeyAuth":[]},{"X402Payment":[]},{"MppPayment":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"apikey","description":"API key for authentication"},"X402Payment":{"type":"apiKey","in":"header","name":"Payment-Signature","description":"x402 pay-per-request; no API key needed. Send the request without credentials to receive a `402 Payment Required` response whose `Payment-Required` header advertises the accepted payment options, then retry with the signed x402 V2 payment payload in the `Payment-Signature` header. Only operations that list this scheme accept it. See https://docs.nansen.ai/getting-started/agentic-payments"},"MppPayment":{"type":"apiKey","in":"header","name":"Authorization","description":"Machine Payments Protocol (MPP) pay-per-request on Tempo; no API key needed. Send `Authorization: Payment` to receive a `402 Payment Required` response whose `WWW-Authenticate: Payment ...` header carries a fresh challenge, then retry with the signed credential as `Authorization: Payment <credential>`. Successful responses include a `Payment-Receipt` header. Only operations that list this scheme accept it. See https://docs.nansen.ai/getting-started/agentic-payments"}},"schemas":{"ProfilerAddressCounterpartiesBatchRequest":{"properties":{"wallet_addresses":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Wallet Addresses","description":"Wallet addresses to batch-query (max 10 distinct). Each address gets its own counterparty set; results are not aggregated across wallets. Every response row carries a `wallet_address` demux key."},"chain":{"$ref":"#/components/schemas/ProfilerChain","description":"Blockchain chain for the counterparties data. A single request covers one ecosystem: use `all` to batch addresses across EVM chains (auto-detected — Ethereum, Base, Polygon, etc. may be mixed), or `solana` for Solana. EVM and Solana addresses cannot be mixed in one request; query them separately."},"date":{"$ref":"#/components/schemas/DateRange","description":"Date range for the counterparties data. Batch requests are capped at 90 days; split wider ranges into multiple requests. Very high-activity wallets (e.g. exchange hot wallets) can be slow even within the cap — use a shorter range for those."},"source_input":{"$ref":"#/components/schemas/SourceInput","description":"Type of interactions to include","default":"Combined"},"filters":{"anyOf":[{"$ref":"#/components/schemas/ProfilerAddressCounterpartiesFilters"}],"description":"Additional filters to apply. Numeric range filters (interaction_count, total_volume_usd, volume_in_usd, volume_out_usd) are applied per counterparty row; include/exclude smart money labels filter by label. Filters for columns that are not selected are ignored."},"pagination":{"$ref":"#/components/schemas/PaginationRequest","description":"Pagination parameters. Pages the flattened result stream, which is ordered as contiguous per-wallet blocks (see order_by)."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfilerAddressCounterpartiesSortOrder"},"type":"array"}],"title":"Order By","description":"Sort order applied WITHIN each wallet's counterparty block.\n\nThe result is always grouped by `wallet_address` first (so each wallet's rows are\ncontiguous, like an independent single-wallet response), then sorted by these\nfields, then by `counterparty_address` as a final tiebreaker to keep pagination\ndeterministic across pages.\n\nDefaults to `total_volume_usd DESC`."}},"additionalProperties":false,"type":"object","required":["wallet_addresses","chain","date"],"title":"ProfilerAddressCounterpartiesBatchRequest","description":"Request model for the batch profiler address counterparties endpoint.\n\nWallet-address input only (no entity_name / entity grouping — use the\nsingle-wallet /v1/profiler/address/counterparties endpoint for those)."},"ProfilerChain":{"type":"string","enum":["all","arbitrum","arc","avalanche","base","bitcoin","bnb","ethereum","hyperevm","injective","iotaevm","linea","mantle","mantra","monad","near","optimism","plasma","polygon","robinhood","sei","solana","sonic","starknet","sui","ton","tron"],"title":"ProfilerChain","description":"Chains supported in profiler analysis."},"DateRange":{"properties":{"from":{"anyOf":[{"type":"string"}],"title":"From","description":"Start date in ISO 8601 format (e.g., 2025-01-01T00:00:00Z or 2025-01-01)"},"to":{"anyOf":[{"type":"string"}],"title":"To","description":"End date in ISO 8601 format (e.g., 2025-01-31T23:59:59Z or 2025-01-31)"}},"type":"object","title":"DateRange","description":"Date range model matching the API schema."},"SourceInput":{"type":"string","enum":["Combined","Tokens","ETH"],"title":"SourceInput","description":"Enum for source input types in counterparties endpoint."},"ProfilerAddressCounterpartiesFilters":{"properties":{"interaction_count":{"anyOf":[{"$ref":"#/components/schemas/IntegerRangeFilter"}],"description":"Interaction count range filter"},"total_volume_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total volume range filter in USD"},"volume_in_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Volume in USD range filter"},"volume_out_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Volume out USD range filter"},"include_smart_money_labels":{"anyOf":[{"items":{"$ref":"#/components/schemas/LabelType"},"type":"array"}],"title":"Include Smart Money Labels","description":"Include smart money labels for counterparties"},"exclude_smart_money_labels":{"anyOf":[{"items":{"$ref":"#/components/schemas/LabelType"},"type":"array"}],"title":"Exclude Smart Money Labels","description":"Exclude smart money labels for counterparties"}},"additionalProperties":false,"type":"object","title":"ProfilerAddressCounterpartiesFilters","description":"Filters for profiler address counterparties endpoint.\n\nThese filters control which counterparties and interactions are included."},"IntegerRangeFilter":{"properties":{"min":{"anyOf":[{"type":"integer"}],"title":"Min","description":"Minimum value (inclusive)"},"max":{"anyOf":[{"type":"integer"}],"title":"Max","description":"Maximum value (inclusive)"}},"type":"object","title":"IntegerRangeFilter","description":"Filter for integer values with optional min/max bounds.\nUse for counts, numbers of items, and other whole number values. - Values between 5 and 100"},"NumericRangeFilter":{"properties":{"min":{"anyOf":[{"type":"number"}],"title":"Min","description":"Minimum value (inclusive)"},"max":{"anyOf":[{"type":"number"}],"title":"Max","description":"Maximum value (inclusive)"}},"type":"object","title":"NumericRangeFilter","description":"Filter for numeric values (floats) with optional min/max bounds.\nUse for prices, volumes, ratios, and other decimal values. - Values between -10.5 and 100.75"},"LabelType":{"type":"string","enum":["30D Smart Trader","90D Smart Trader","180D Smart Trader","Fund","Smart Trader","Public Figure","Exchange","Whale","BananaGun Bot User","Top Maestro Bot User","Top BananaGun Bot User","Maestro Bot User","Early MAGIC Miner","First Mover LP","First Mover Staking","Profitable LP","Smart HL Perps Trader"],"title":"LabelType","description":"Filter by entity label type."},"PaginationRequest":{"properties":{"page":{"type":"integer","minimum":1,"title":"Page","description":"Page number (1-based)","default":1},"per_page":{"type":"integer","maximum":1000,"minimum":1,"title":"Per Page","description":"Number of records per page (max 1000)","default":10}},"type":"object","title":"PaginationRequest","description":"Pagination parameters for API requests."},"ProfilerAddressCounterpartiesSortOrder":{"properties":{"field":{"$ref":"#/components/schemas/ProfilerAddressCounterpartiesSortField","description":"Field to sort by"},"direction":{"$ref":"#/components/schemas/SortDirection","description":"Sort direction (ASC or DESC)"}},"type":"object","required":["field","direction"],"title":"ProfilerAddressCounterpartiesSortOrder"},"ProfilerAddressCounterpartiesSortField":{"type":"string","enum":["interaction_count","total_volume_usd","volume_in_usd","volume_out_usd"],"title":"ProfilerAddressCounterpartiesSortField","description":"Enum for sortable fields in profiler address counterparties."},"SortDirection":{"type":"string","enum":["ASC","DESC"],"title":"SortDirection","description":"Enum for sort directions."},"ProfilerAddressCounterpartiesBatchResponse":{"properties":{"pagination":{"$ref":"#/components/schemas/PaginationInfo","description":"Pagination information"},"data":{"items":{"$ref":"#/components/schemas/BatchProfilerCounterparty"},"type":"array","title":"Data","description":"Counterparty rows across all requested wallets."}},"type":"object","required":["pagination","data"],"title":"ProfilerAddressCounterpartiesBatchResponse","description":"Response model for the batch profiler address counterparties endpoint.\n\n`data` is a flat list of counterparty rows ordered as contiguous per-wallet\nblocks; group by `wallet_address` to demux back into per-wallet results."},"PaginationInfo":{"properties":{"page":{"type":"integer","minimum":1,"title":"Page","description":"Current page number","default":1},"per_page":{"type":"integer","maximum":1000,"minimum":1,"title":"Per Page","description":"Number of records per page","default":10},"is_last_page":{"type":"boolean","title":"Is Last Page","description":"Whether this is the last page","default":true}},"type":"object","title":"PaginationInfo","description":"Pagination information for API responses."},"BatchProfilerCounterparty":{"properties":{"counterparty_address":{"type":"string","title":"Counterparty Address","description":"Counterparty address in hex format"},"counterparty_address_label":{"anyOf":[{"items":{"type":"string"},"type":"array"}],"title":"Counterparty Address Label","description":"List of labels associated with this counterparty"},"interaction_count":{"type":"integer","title":"Interaction Count","description":"Total number of interactions with this counterparty"},"total_volume_usd":{"anyOf":[{"type":"number"}],"title":"Total Volume Usd","description":"Total transaction volume in USD"},"volume_in_usd":{"anyOf":[{"type":"number"}],"title":"Volume In Usd","description":"Incoming transaction volume in USD"},"volume_out_usd":{"anyOf":[{"type":"number"}],"title":"Volume Out Usd","description":"Outgoing transaction volume in USD"},"tokens_info":{"anyOf":[{"items":{"$ref":"#/components/schemas/TokenInfo"},"type":"array"}],"title":"Tokens Info","description":"Per-token transfers with this counterparty, including total, incoming, and outgoing amounts in token units. Different tokens are not combined."},"wallet_address":{"type":"string","title":"Wallet Address","description":"The input wallet (from `wallet_addresses`) this row belongs to."},"chain":{"type":"string","title":"Chain","description":"Chain this interaction occurred on. For chain='all' (cross-EVM) the same (wallet, counterparty) pair can appear on multiple chains as separate rows."}},"type":"object","required":["counterparty_address","interaction_count","wallet_address","chain"],"title":"BatchProfilerCounterparty","description":"A single counterparty row, tagged with the input wallet it belongs to.\n\nExtends the single-wallet `ProfilerCounterparty` with the `wallet_address`\ndemux key so the caller can split the flattened batch result back out per\nwallet."},"TokenInfo":{"properties":{"token_address":{"type":"string","title":"Token Address","description":"Token contract address"},"token_symbol":{"type":"string","title":"Token Symbol","description":"Token symbol"},"token_name":{"type":"string","title":"Token Name","description":"Token name"},"num_transfer":{"type":"string","title":"Num Transfer","description":"Number of transfers"},"total_token_amount":{"anyOf":[{"type":"number"}],"title":"Total Token Amount","description":"Total amount of this token transferred with this counterparty, in token units. Incoming and outgoing transfers of the same token are added together, matching total volume. Amounts of different tokens are not combined. Null when transferred token units cannot be determined."},"token_in_amount":{"anyOf":[{"type":"number"}],"title":"Token In Amount","description":"Amount of this token received from this counterparty, in token units, relative to the requested wallet or selected entity. Null when transferred token units cannot be determined."},"token_out_amount":{"anyOf":[{"type":"number"}],"title":"Token Out Amount","description":"Amount of this token sent to this counterparty, in token units, relative to the requested wallet or selected entity. Null when transferred token units cannot be determined."}},"type":"object","required":["token_address","token_symbol","token_name","num_transfer"],"title":"TokenInfo","description":"Token information for counterparty interactions."},"ErrorEnvelope":{"type":"object","required":["error","message","code","status","request_id","doc_url"],"properties":{"error":{"type":"string","description":"Human-readable error category."},"message":{"type":"string","description":"Human-readable explanation of the error."},"code":{"type":"string","enum":["missing_field","unknown_field","invalid_field_value","invalid_address_format","invalid_date_format","invalid_date_range","mutually_exclusive_fields","value_out_of_range","too_many_items","unauthenticated","forbidden","geo_blocked","plan_upgrade_required","insufficient_credits","rate_limit_exceeded","not_found","method_not_allowed","conflict","payload_too_large","query_timeout","query_too_large","upstream_unavailable","internal_error"],"description":"Stable machine-readable error code."},"status":{"type":"integer","description":"HTTP status code returned for the request."},"request_id":{"type":["string","null"],"description":"Identifier for the request, when available."},"doc_url":{"type":"string","format":"uri","description":"Link to the error-code reference documentation, anchored to this error's code."},"param":{"type":"string","description":"Request parameter associated with the error."},"retry_after":{"type":"integer","minimum":0,"description":"Seconds to wait before retrying the request."}}}},"headers":{"XNansenCreditsCost":{"description":"Quoted credit cost of this request. It is present on successful responses and errors reached after pricing, but absent when a request is rejected before pricing. A value of 0 means plan credits do not apply.","schema":{"type":"string"}},"XRequestId":{"description":"Unique identifier for this request, returned on every response. Uses the upstream-assigned request id when available; otherwise echoes a caller-supplied X-Request-Id or generates an id. Include this value in support requests.","schema":{"type":"string"}},"XNansenCreditsUsed":{"description":"Credits actually deducted for this request. Can differ from the quoted cost, for example 0 when the request was rejected.","schema":{"type":"string"}},"XNansenCreditsRemaining":{"description":"Total credits remaining in the user's account after this request","schema":{"type":"string"}},"PaymentReceipt":{"description":"Base64url-encoded MPP receipt returned on successful paid requests via Authorization: Payment","schema":{"type":"string"}},"RateLimitLimit":{"description":"Combined rate limit across all configured time windows","schema":{"type":"string"}},"RateLimitRemaining":{"description":"Number of requests remaining in the current limiting window","schema":{"type":"string"}},"RateLimitReset":{"description":"Seconds until the rate limit window resets. A delta in seconds, not a Unix timestamp.","schema":{"type":"string"}},"XRateLimitLimit":{"description":"Request limit for the most constrained app-enforced window","schema":{"type":"string"}},"XRateLimitRemaining":{"description":"Requests remaining in the most constrained app-enforced window","schema":{"type":"string"}},"XRateLimitReset":{"description":"Seconds until the most constrained app-enforced window resets. A delta in seconds, not a Unix timestamp: it is at least 1 and never exceeds the window span.","schema":{"type":"string"}},"XRateLimitLimitSecond":{"description":"Maximum requests allowed per second","schema":{"type":"string"}},"XRateLimitRemainingSecond":{"description":"Requests remaining in the current second","schema":{"type":"string"}},"XRateLimitLimitMinute":{"description":"Maximum requests allowed per minute","schema":{"type":"string"}},"XRateLimitRemainingMinute":{"description":"Requests remaining in the current minute","schema":{"type":"string"}},"PaymentRequired":{"description":"Base64-encoded x402 payment options returned on 402 responses for x402 clients","schema":{"type":"string"}},"WWWAuthenticatePayment":{"description":"MPP payment challenge returned on 402 responses, for example `Payment id=\"...\", realm=\"api.nansen.ai\", method=\"tempo\", intent=\"charge\", request=\"...\"`","schema":{"type":"string"}},"RetryAfter":{"description":"Number of seconds to wait before making a new request","schema":{"type":"string"}},"XNansenRateLimitScope":{"description":"Window that caused an enforced rate-limit rejection: `second` or `minute` for global plan windows, or `endpoint` for an endpoint-specific window. This is an open set; clients should handle unknown future values with generic rate-limit behavior.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"Bad Request - Invalid request parameters or malformed request","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","properties":{"detail":{"type":"string"}}}]}}}},"UnauthorizedError":{"description":"Authentication error - No API key found in request","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","properties":{"detail":{"type":"string"}}}]}}}},"PaymentRequiredError":{"description":"Payment Required - This endpoint supports pay-per-request via x402 and MPP. x402 responses advertise payment options in `Payment-Required`; MPP responses advertise a fresh `WWW-Authenticate: Payment ...` challenge. Successful MPP responses may include `Payment-Receipt`.","headers":{"Payment-Required":{"$ref":"#/components/headers/PaymentRequired"},"WWW-Authenticate":{"$ref":"#/components/headers/WWWAuthenticatePayment"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"type":"object","description":"Problem-details body for x402 or MPP payment challenges."}}}},"ForbiddenError":{"description":"Forbidden - User does not have required subscription tier or has exceeded credit limit","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Nansen-Credits-Used":{"$ref":"#/components/headers/XNansenCreditsUsed"},"X-Nansen-Credits-Remaining":{"$ref":"#/components/headers/XNansenCreditsRemaining"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","properties":{"detail":{"type":"string"}}}]}}}},"NotFoundError":{"description":"Not Found - The requested resource was not found","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"ValidationError":{"description":"Validation error - Invalid request parameters","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","properties":{"errors":{"type":"array","description":"Per-field request-validation errors, in the order they were detected. This field is absent from other 422 responses. The top-level error, message, and code reflect the primary error, which is not always the first entry. When a request produces an unusually large number of errors the list is truncated and a final entry reports how many were omitted.","items":{"type":"object","required":["field","message","code"],"properties":{"field":{"type":"string","description":"Path of the request field that failed validation, prefixed with its location in the request (body, query, path, header, or cookie) and including array indices. Unlike param, this path keeps the location prefix and array indices."},"message":{"type":"string","description":"Human-readable explanation of the field error."},"code":{"type":"string","enum":["missing_field","unknown_field","invalid_field_value","invalid_address_format","invalid_date_format","invalid_date_range","mutually_exclusive_fields","value_out_of_range","too_many_items"],"description":"Stable machine-readable error code."}}}}}}]}}}},"TooManyRequestsError":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","properties":{"detail":{"type":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying"}}}]}}},"headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Nansen-RateLimit-Scope":{"$ref":"#/components/headers/XNansenRateLimitScope"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}}},"InternalServerError":{"description":"Internal Server Error - An unexpected error occurred","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"BadGatewayError":{"description":"Bad Gateway - Upstream service unavailable","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","required":["retry_after"],"properties":{"retry_after":{"type":"integer","description":"Seconds to wait before retrying"}}}]}}}},"ServiceUnavailableError":{"description":"Service Unavailable - Service temporarily unavailable","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","required":["retry_after"],"properties":{"retry_after":{"type":"integer","description":"Seconds to wait before retrying"}}}]}}}},"GatewayTimeoutError":{"description":"Gateway Timeout - Upstream service timed out","headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorEnvelope"},{"type":"object","required":["retry_after"],"properties":{"retry_after":{"type":"integer","description":"Seconds to wait before retrying"}}}]}}}}}},"paths":{"/api/v1/profiler/address/counterparties/batch":{"post":{"tags":["Profiler"],"summary":"Get Address Counterparties Data (Batch)","description":"Batch version of the address counterparties endpoint: fetch top counterparties for\nup to 10 distinct wallet addresses across a date range of up to\n90 days.\n\nEach input wallet gets its **own** counterparty set — results are **not** aggregated\nacross the input wallets. Every row in the response carries a `wallet_address` field;\ngroup by it to demux the flattened result back into per-wallet counterparty lists.\n\nRows are returned as contiguous per-wallet blocks (each block matches what the\nsingle-wallet endpoint would return for that wallet), sorted within a block by the\nrequested `order_by` (default `total_volume_usd` DESC).\n\nLimitations:\n- `wallet_addresses`: maximum 10 distinct addresses per request.\n- `date`: maximum 90 days per request; split wider windows into multiple requests.\n- `chain`: one ecosystem per request. Use `all` to batch across EVM chains\n  (Ethereum, Base, Polygon, etc.) or `solana` for Solana; EVM and Solana\n  addresses cannot be mixed in a single request.\n\nFor a single wallet, or for entity-name / entity-grouped lookups, use\n`/api/v1/profiler/address/counterparties` instead.","operationId":"get_profiler_address_counterparties_batch_api_v1_profiler_address_counterparties_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilerAddressCounterpartiesBatchRequest"}}},"required":true},"responses":{"200":{"description":"Batch address counterparties data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilerAddressCounterpartiesBatchResponse"}}},"headers":{"X-Nansen-Credits-Cost":{"$ref":"#/components/headers/XNansenCreditsCost"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-Nansen-Credits-Used":{"$ref":"#/components/headers/XNansenCreditsUsed"},"X-Nansen-Credits-Remaining":{"$ref":"#/components/headers/XNansenCreditsRemaining"},"Payment-Receipt":{"$ref":"#/components/headers/PaymentReceipt"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-RateLimit-Limit-Second":{"$ref":"#/components/headers/XRateLimitLimitSecond"},"X-RateLimit-Remaining-Second":{"$ref":"#/components/headers/XRateLimitRemainingSecond"},"X-RateLimit-Limit-Minute":{"$ref":"#/components/headers/XRateLimitLimitMinute"},"X-RateLimit-Remaining-Minute":{"$ref":"#/components/headers/XRateLimitRemainingMinute"}}},"400":{"description":"Bad Request","$ref":"#/components/responses/BadRequestError"},"401":{"description":"Unauthorized","$ref":"#/components/responses/UnauthorizedError"},"402":{"description":"Payment Required","$ref":"#/components/responses/PaymentRequiredError"},"403":{"description":"Forbidden","$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Not Found","$ref":"#/components/responses/NotFoundError"},"422":{"description":"Unprocessable Content","$ref":"#/components/responses/ValidationError"},"429":{"description":"Too Many Requests","$ref":"#/components/responses/TooManyRequestsError"},"500":{"description":"Internal Server Error","$ref":"#/components/responses/InternalServerError"},"502":{"description":"Bad Gateway","$ref":"#/components/responses/BadGatewayError"},"503":{"description":"Service Unavailable","$ref":"#/components/responses/ServiceUnavailableError"},"504":{"description":"Gateway Timeout","$ref":"#/components/responses/GatewayTimeoutError"}}}}}}
```


---

# 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.nansen.ai/api/profiler/address-counterparties-batch.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.
