Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: EveryInfra Proxy API
version: 2.0.0
description: 'Social data & search infrastructure for the AI era. One universal endpoint (`/api/v1/social`) covers 106 platforms / 573 capabilities across three domains — social (Xiaohongshu, Douyin, Weibo, Instagram, TikTok, X, Reddit, YouTube, Threads…), reviews (Google Maps, Yelp, Trustpilot, App Store…), e-commerce (Amazon, AliExpress, Walmart, eBay…) and web search. Plus an OpenAI-compatible AI API (`/api/v1/chat/completions`), free for accounts that have topped up. **Choosing a capability.** Ask the user what is unclear: which platform or site; what to look up (a keyword, a URL, an account or a product ID); how many results or targets; how fresh the data must be; the budget; and the output wanted (raw rows, a summary or a table). Then read `GET /api/v1/social/catalog?platform=` (free, no key) for params, price and returned fields, and start with one target and a small `limit`. Common requests: Douyin products: douyin/product_search then douyin/product_detail; Xiaohongshu comments: xiaohongshu/search then xiaohongshu/comments; price comparison: amazon/search + walmart/search + ebay/sold; jobs: linkedin/jobs + indeed/search + glassdoor/salaries; brand monitoring: weibo/search + douyin/search + xiaohongshu/search + reddit/search; reviews: amazon/reviews or trustpilot/reviews or google_maps_reviews/reviews. Worked examples: https://everyinfra.com/llms-full.txt
**Pricing.** One shared prepaid balance, denominated in USD. Data/search is priced per platform tier — USD 0.56/1K (Core, 116 capabilities) / USD 1.39/1K (Standard, 258 capabilities) / USD 2.78/1K (Deep, 6 capabilities) / USD 5.56/1K (Complex, 26 capabilities); data starts at USD 0.000556/call (USD 0.56/1K). One call, one charge, except actions with `rows_per_unit` in the catalog, which are priced per block of rows. Most actions deliver the row count you ask for in a single call (see `max_limit` in the catalog); page-based actions (`page_size` in the catalog) return one page per call, and each further page is one call. Failed calls and empty results are not charged. Monthly top-up discount based on top-ups credited in the current calendar month (Beijing time), at face value: 10% off from USD 500; 20% off from USD 1,000; 30% off from USD 2,000 — applies from the next call once reached and resets on the 1st; credit codes and bonus credit over $1 each count like top-ups, but trial credit and amounts of $1 or less do not. **AI API.** `POST /api/v1/chat/completions` is OpenAI-compatible and free once the account has topped up any amount. Use it to clean, summarize, classify, translate or extract fields from the data you collect. Per account, all keys combined: cumulative top-ups under USD 100: 50 requests/minute, 5 in flight; USD 100 or more: 500 requests/minute, 50 in flight; USD 500 or more: 5,000 requests/minute, 500 in flight. **Support.** When a call keeps failing, results look wrong, a charge looks off, or a needed platform or field is missing, ask the user and, if they agree, open a support ticket with everyinfra_create_ticket (REST: POST /api/v1/support/tickets); include the request_id, the time (UTC), the platform/action (or search tool or CAPTCHA type) and the error code. Track it with everyinfra_get_ticket (REST: GET /api/v1/support/tickets/{ticket_id}).'
servers:
- url: https://api.everyinfra.com
description: Primary
security:
- bearerAuth: []
tags:
- name: Proxy
paths:
/api/v1/proxy/catalog:
get:
operationId: proxyCatalog
summary: Proxy plans & pricing
description: Available proxy kinds, regions and prices. Free, no auth.
tags:
- Proxy
security: []
responses:
'200':
description: Catalog
content:
application/json:
schema:
type: object
description: Proxy plans & prices
properties:
items:
type: array
items:
type: object
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
/api/v1/proxy/order:
post:
operationId: proxyOrder
summary: Order a proxy plan
description: Place an order. Credentials are handed over by `GET /api/v1/proxy/order/{order_id}?deliver=1`.
tags:
- Proxy
responses:
'200':
description: Order created
content:
application/json:
schema:
type: object
properties:
order_id:
type: string
status:
type: string
enum:
- provisioning
- delivered
- refunded
- failed
kind:
type: string
region:
type: string
credentials:
type: object
description: Present only after delivery (`?deliver=1`)
billing:
type: object
description: What this single call actually cost and why.
properties:
charged:
type: boolean
description: false = refunded (empty result) or unlimited account
credits:
type: integer
description: Credits actually deducted (1 credit = USD 0.00001389)
cny:
type: number
description: Same amount converted to CNY at the current rate
list_price_credits:
type: integer
description: Undiscounted price for this call
tier_credits:
type: integer
description: Platform tier unit price
units:
type: integer
description: 'Number of units billed: targets for fan-out actions, tokens for captcha type `castle`; absent means 1'
discount_rate:
type: number
description: Present only when a discount applied, e.g. 0.7
reason:
type: string
description: Present only when not charged
amount:
type:
- object
- 'null'
description: What this call cost, as a money envelope (USD in `display.USD`)
properties:
credits:
type: integer
base:
type: string
amount:
type: number
display:
type: object
additionalProperties:
type: number
per_1k:
type: object
additionalProperties:
type: number
rate_source:
type: string
charged_usd:
type:
- number
- 'null'
description: What this call actually cost, in USD (0 when refunded or not charged; null when the outcome is still under review)
balance_after_usd:
type:
- number
- 'null'
description: 'Wallet balance (paid + bonus) right after this call settled, in USD; null if it could not be read. Full account summary: GET /api/v1/account'
required:
- charged
- credits
- cny
required:
- order_id
- status
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'402':
description: Insufficient balance
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
reason:
type: string
description: Optional machine-readable cause, e.g. `capacity_exhausted`, `access_blocked`, `temporarily_unavailable`, `daily_cap_reached` or `temporary_link`
retry_after:
type: integer
description: Optional; seconds, same as Retry-After
limit:
type: integer
description: Optional; the cap that was reached
param:
type: string
description: Optional; the offending parameter (or `platform` / `action` / `tool` / `type`)
did_you_mean:
type: array
items:
type: string
description: Optional; did-you-mean suggestions for `param`, most likely first
candidates:
type: array
items:
type: string
deprecated: true
description: Same list as `did_you_mean`, kept for compatibility until 2026-11-30
allowed:
type: array
items:
type: string
description: Optional; every valid value, parameter or action for `param`
catalog_url:
type: string
description: 'Optional; relative path to GET for what is valid here: this platform''s actions, parameters and allowed values (`/api/v1/social/catalog?platform=…`), the search tools (`/api/v1/search/tools`) or the captcha types (`/api/v1/captcha/types`)'
fault:
type: string
enum:
- request
- account
- service
description: 'Whose problem: request (fix the call), account (key, balance, permission, rate limit) or service (EveryInfra''s side)'
retryable:
type: boolean
description: Whether the same request can succeed if sent again
max_retries:
type: integer
description: Optional; how many times to retry a retryable error, not counting the first call
recent_failures:
type: integer
description: Optional; failures on EveryInfra's side for this account and capability in the last 10 minutes, this one included
next_steps:
type: array
items:
type: string
description: One to three steps, in order
example:
type: object
description: Optional; a request known to work for this capability (platform, action, params)
topup:
type: object
description: 'Optional; on `quota_exhausted` / `ai_topup_required` for an account that has never topped up: a link to the top-up page with the smallest amount preselected, and one sentence for the user'
properties:
first_topup:
type: boolean
amount_usd:
type: integer
url:
type: string
message:
type: string
support:
type: object
description: Optional; present only once the self-check points at EveryInfra. Ask the user first; open the ticket only if they agree
properties:
ask_user_first:
type: boolean
open_with:
type: string
description: POST /api/v1/support/tickets, or everyinfra_create_ticket on MCP
ticket:
type: object
properties:
subject:
type: string
category:
type: string
request_id:
type: string
job_id:
type: string
required:
- code
- message
required:
- error
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
gb:
oneOf:
- type: integer
enum:
- 1
- 5
- 10
- 50
- 100
- type: string
enum:
- '1'
- '5'
- '10'
- '50'
- '100'
kind:
type: string
enum:
- residential_rotating
- residential_static
- residential_extract
- residential_unlimited
- static_acceleration
region:
type: string
pattern: ^[a-zA-Z]{2}$
sticky_minutes:
type: integer
minimum: 1
maximum: 120
required:
- gb
additionalProperties: false
/api/v1/proxy/order/{order_id}:
get:
operationId: proxyOrderStatus
summary: Order status / fetch credentials
description: 'Order status. With `?deliver=1` the credentials are fetched and **you are charged at that moment** — plain status checks are free.
If your balance is short you get 402; top up and call the same URL again.'
tags:
- Proxy
parameters:
- name: order_id
in: path
required: true
schema:
type: string
- name: deliver
in: query
required: false
schema:
type: integer
enum:
- 1
description: Set to 1 to fetch credentials (charges on success).
responses:
'200':
description: Status or credentials
content:
application/json:
schema:
type: object
properties:
order_id:
type: string
status:
type: string
enum:
- provisioning
- delivered
- refunded
- failed
kind:
type: string
region:
type: string
credentials:
type: object
description: Present only after delivery (`?deliver=1`)
billing:
type: object
description: What this single call actually cost and why.
properties:
charged:
type: boolean
description: false = refunded (empty result) or unlimited account
credits:
type: integer
description: Credits actually deducted (1 credit = USD 0.00001389)
cny:
type: number
description: Same amount converted to CNY at the current rate
list_price_credits:
type: integer
description: Undiscounted price for this call
tier_credits:
type: integer
description: Platform tier unit price
units:
type: integer
description: 'Number of units billed: targets for fan-out actions, tokens for captcha type `castle`; absent means 1'
discount_rate:
type: number
description: Present only when a discount applied, e.g. 0.7
reason:
type: string
description: Present only when not charged
amount:
type:
- object
- 'null'
description: What this call cost, as a money envelope (USD in `display.USD`)
properties:
credits:
type: integer
base:
type: string
amount:
type: number
display:
type: object
additionalProperties:
type: number
per_1k:
type: object
additionalProperties:
type: number
rate_source:
type: string
charged_usd:
type:
- number
- 'null'
description: What this call actually cost, in USD (0 when refunded or not charged; null when the outcome is still under review)
balance_after_usd:
type:
- number
- 'null'
description: 'Wallet balance (paid + bonus) right after this call settled, in USD; null if it could not be read. Full account summary: GET /api/v1/account'
required:
- charged
- credits
- cny
required:
- order_id
- status
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'402':
description: Insufficient balance
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
reason:
type: string
description: Optional machine-readable cause, e.g. `capacity_exhausted`, `access_blocked`, `temporarily_unavailable`, `daily_cap_reached` or `temporary_link`
retry_after:
type: integer
description: Optional; seconds, same as Retry-After
limit:
type: integer
description: Optional; the cap that was reached
param:
type: string
description: Optional; the offending parameter (or `platform` / `action` / `tool` / `type`)
did_you_mean:
type: array
items:
type: string
description: Optional; did-you-mean suggestions for `param`, most likely first
candidates:
type: array
items:
type: string
deprecated: true
description: Same list as `did_you_mean`, kept for compatibility until 2026-11-30
allowed:
type: array
items:
type: string
description: Optional; every valid value, parameter or action for `param`
catalog_url:
type: string
description: 'Optional; relative path to GET for what is valid here: this platform''s actions, parameters and allowed values (`/api/v1/social/catalog?platform=…`), the search tools (`/api/v1/search/tools`) or the captcha types (`/api/v1/captcha/types`)'
fault:
type: string
enum:
- request
- account
- service
description: 'Whose problem: request (fix the call), account (key, balance, permission, rate limit) or service (EveryInfra''s side)'
retryable:
type: boolean
description: Whether the same request can succeed if sent again
max_retries:
type: integer
description: Optional; how many times to retry a retryable error, not counting the first call
recent_failures:
type: integer
description: Optional; failures on EveryInfra's side for this account and capability in the last 10 minutes, this one included
next_steps:
type: array
items:
type: string
description: One to three steps, in order
example:
type: object
description: Optional; a request known to work for this capability (platform, action, params)
topup:
type: object
description: 'Optional; on `quota_exhausted` / `ai_topup_required` for an account that has never topped up: a link to the top-up page with the smallest amount preselected, and one sentence for the user'
properties:
first_topup:
type: boolean
amount_usd:
type: integer
url:
type: string
message:
type: string
support:
type: object
description: Optional; present only once the self-check points at EveryInfra. Ask the user first; open the ticket only if they agree
properties:
ask_user_first:
type: boolean
open_with:
type: string
description: POST /api/v1/support/tickets, or everyinfra_create_ticket on MCP
ticket:
type: object
properties:
subject:
type: string
category:
type: string
request_id:
type: string
job_id:
type: string
required:
- code
- message
required:
- error
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'404':
description: Unknown order
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
reason:
type: string
description: Optional machine-readable cause, e.g. `capacity_exhausted`, `access_blocked`, `temporarily_unavailable`, `daily_cap_reached` or `temporary_link`
retry_after:
type: integer
description: Optional; seconds, same as Retry-After
limit:
type: integer
description: Optional; the cap that was reached
param:
type: string
description: Optional; the offending parameter (or `platform` / `action` / `tool` / `type`)
did_you_mean:
type: array
items:
type: string
description: Optional; did-you-mean suggestions for `param`, most likely first
candidates:
type: array
items:
type: string
deprecated: true
description: Same list as `did_you_mean`, kept for compatibility until 2026-11-30
allowed:
type: array
items:
type: string
description: Optional; every valid value, parameter or action for `param`
catalog_url:
type: string
description: 'Optional; relative path to GET for what is valid here: this platform''s actions, parameters and allowed values (`/api/v1/social/catalog?platform=…`), the search tools (`/api/v1/search/tools`) or the captcha types (`/api/v1/captcha/types`)'
fault:
type: string
enum:
- request
- account
- service
description: 'Whose problem: request (fix the call), account (key, balance, permission, rate limit) or service (EveryInfra''s side)'
retryable:
type: boolean
description: Whether the same request can succeed if sent again
max_retries:
type: integer
description: Optional; how many times to retry a retryable error, not counting the first call
recent_failures:
type: integer
description: Optional; failures on EveryInfra's side for this account and capability in the last 10 minutes, this one included
next_steps:
type: array
items:
type: string
description: One to three steps, in order
example:
type: object
description: Optional; a request known to work for this capability (platform, action, params)
topup:
type: object
description: 'Optional; on `quota_exhausted` / `ai_topup_required` for an account that has never topped up: a link to the top-up page with the smallest amount preselected, and one sentence for the user'
properties:
first_topup:
type: boolean
amount_usd:
type: integer
url:
type: string
message:
type: string
support:
type: object
description: Optional; present only once the self-check points at EveryInfra. Ask the user first; open the ticket only if they agree
properties:
ask_user_first:
type: boolean
open_with:
type: string
description: POST /api/v1/support/tickets, or everyinfra_create_ticket on MCP
ticket:
type: object
properties:
subject:
type: string
category:
type: string
request_id:
type: string
job_id:
type: string
required:
- code
- message
required:
- error
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Your API key as a Bearer token.