EveryInfra Support API
Human support tickets opened with any API key; free
Human support tickets opened with any API key; free
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/everyinfra-com:everyinfra-com-support-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: EveryInfra Support 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: Support
description: Human support tickets opened with any API key; free
paths:
/api/v1/support/tickets:
post:
operationId: supportTicketCreate
summary: Open a human support ticket
description: 'Opens a ticket with EveryInfra''s human support team using any API key on the account (no extra scope; keys limited to specific products work too; nothing is charged). The account owner sees the same ticket in the console at the returned `url`, support replies there, and every reply also triggers an email to the account''s verified address with a link (never the reply text). Human support is online 10:00-24:00 (UTC+8) with a 10-minute average first reply.
Write one line in `subject`; in `description` say what you called (platform/action or endpoint), when (UTC), the error code and message and what you expected, and pass that call''s `request_id` (and `job_id` for an async job). Never put API keys or passwords in a ticket: a description that looks like it contains one is refused with 422 `secret_in_ticket`. Write other IDs with a label (`job_id: job_…`): a bare long ID reads as a secret.
Send an `Idempotency-Key` header and keep it when retrying: the same key with the same content returns the ticket opened earlier (200, `replayed: true`, header `Idempotent-Replayed: true`) and a different content gets 409 `idempotency_conflict`. Without the header, the same subject and description sent again within 24 hours return the same ticket.
Check progress and support''s replies with `GET /api/v1/support/tickets/{ticket_id}` (MCP: `everyinfra_get_ticket`) using the same key.'
tags:
- Support
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: 1-255 visible ASCII characters; reuse it when retrying the same ticket
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- subject
- description
additionalProperties: false
properties:
subject:
type: string
maxLength: 160
description:
type: string
maxLength: 3500
category:
type: string
enum:
- general
- product
- integration
- billing
- order
- incident
description: 'incident: looks like an outage; integration: a call returns an error, parameters, auth, SDK or MCP setup; product: questions about data, platforms and fields, or asking for new ones; billing: top-ups, charges, refunds; order: resources such as proxies or numbers; general: anything else'
request_id:
type: string
pattern: ^req_[a-f0-9]{16,64}$
description: The X-Request-Id of the call this ticket is about
job_id:
type: string
pattern: ^job_[a-f0-9]{16,64}$
description: The job_id of the async job this ticket is about
contact_email:
type: string
maxLength: 254
description: An extra address support can reach you at; reply emails still go to the account's verified email
responses:
'201':
description: Ticket opened
content:
application/json:
schema:
type: object
properties:
object:
type: string
enum:
- support_ticket
ticket_id:
type: integer
description: The ticket number (#N in the console and in emails)
url:
type: string
description: The ticket in the console, for the account owner
subject:
type: string
status:
type:
- string
- 'null'
enum:
- new
- in_progress
- waiting_customer
- investigating
- resolved
- closed
- null
status_text:
type: string
resolution_pending:
type: boolean
description: Support asked the account owner to confirm the problem is solved
category:
type:
- string
- 'null'
enum:
- general
- product
- integration
- billing
- order
- incident
- null
description: The ticket's category as support files it
created_at:
type:
- string
- 'null'
format: date-time
updated_at:
type:
- string
- 'null'
format: date-time
last_message:
type:
- object
- 'null'
properties:
from:
type: string
enum:
- customer
- support
at:
type: string
format: date-time
next_step:
type: string
description: What happens next and what to do, in one sentence
support_hours:
type: string
submitted:
type:
- object
- 'null'
description: What this key sent when opening it
properties:
via:
type: string
enum:
- api
- mcp
category:
type:
- string
- 'null'
request_id:
type:
- string
- 'null'
request_found:
type:
- boolean
- 'null'
description: Whether that request_id is a call of this account
job_id:
type:
- string
- 'null'
job_found:
type:
- boolean
- 'null'
description: Whether that job_id is a job of this account
contact_email:
type:
- string
- 'null'
replayed:
type: boolean
description: true when a retry returned the ticket opened earlier
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'200':
description: 'A retry: the ticket opened earlier (`replayed: true`)'
content:
application/json:
schema:
type: object
properties:
object:
type: string
enum:
- support_ticket
ticket_id:
type: integer
description: The ticket number (#N in the console and in emails)
url:
type: string
description: The ticket in the console, for the account owner
subject:
type: string
status:
type:
- string
- 'null'
enum:
- new
- in_progress
- waiting_customer
- investigating
- resolved
- closed
- null
status_text:
type: string
resolution_pending:
type: boolean
description: Support asked the account owner to confirm the problem is solved
category:
type:
- string
- 'null'
enum:
- general
- product
- integration
- billing
- order
- incident
- null
description: The ticket's category as support files it
created_at:
type:
- string
- 'null'
format: date-time
updated_at:
type:
- string
- 'null'
format: date-time
last_message:
type:
- object
- 'null'
properties:
from:
type: string
enum:
- customer
- support
at:
type: string
format: date-time
next_step:
type: string
description: What happens next and what to do, in one sentence
support_hours:
type: string
submitted:
type:
- object
- 'null'
description: What this key sent when opening it
properties:
via:
type: string
enum:
- api
- mcp
category:
type:
- string
- 'null'
request_id:
type:
- string
- 'null'
request_found:
type:
- boolean
- 'null'
description: Whether that request_id is a call of this account
job_id:
type:
- string
- 'null'
job_found:
type:
- boolean
- 'null'
description: Whether that job_id is a job of this account
contact_email:
type:
- string
- 'null'
replayed:
type: boolean
description: true when a retry returned the ticket opened earlier
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'401':
description: Missing, invalid, disabled or expired API key (`missing_key`, `invalid_key`, `expired_key`, `key_in_url_not_accepted`)
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'403':
description: Account disabled, source IP outside the key's allowlist, or an account served by a reseller (`support_not_available`)
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'429':
description: '`rate_limited` — 60 account requests per minute (all keys of the account combined), or support is receiving too many requests right now; honour Retry-After'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
Retry-After:
description: Seconds to wait before retrying. Always present on the per-minute 429 of data, search, captcha and AI; on 503 when the wait is known (capacity, busy)
schema:
type: integer
'503':
description: '`support_unavailable` (nothing was opened) or `support_outcome_unknown` (retry the same request: it returns the ticket and never opens a second one)'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
Retry-After:
description: Seconds to wait before retrying. Always present on the per-minute 429 of data, search, captcha and AI; on 503 when the wait is known (capacity, busy)
schema:
type: integer
'409':
description: '`idempotency_conflict` — this Idempotency-Key already opened a ticket with other content; `ticket_already_open` — a retry long after the first attempt found that ticket still open (see the console)'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'413':
description: '`invalid_body` — the body is larger than 64 KB'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'422':
description: '`missing_param`, `unknown_param` (with `error.did_you_mean`), `invalid_value` (with `error.param` and `error.allowed`), `invalid_body` or `secret_in_ticket`'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
/api/v1/support/tickets/{ticket_id}:
get:
operationId: supportTicket
summary: A support ticket and its messages
description: Status, what happens next and the latest 100 messages of one ticket. A key can always read the tickets it opened itself; reading the account's other tickets (opened in the console or with other keys) needs the `support:read` account scope, which the account owner enables under API Keys in the console. Anything else is 404 `ticket_not_found`. Not charged; counted in the 60 account requests per minute. The MCP tool `everyinfra_get_ticket` (argument `ticket_id`) follows the same rules and returns the same object.
tags:
- Support
security:
- bearerAuth: []
parameters:
- name: ticket_id
in: path
required: true
schema:
type: integer
description: The ticket number returned when it was opened
responses:
'200':
description: The ticket
content:
application/json:
schema:
type: object
properties:
object:
type: string
enum:
- support_ticket
ticket_id:
type: integer
description: The ticket number (#N in the console and in emails)
url:
type: string
description: The ticket in the console, for the account owner
subject:
type: string
status:
type:
- string
- 'null'
enum:
- new
- in_progress
- waiting_customer
- investigating
- resolved
- closed
- null
status_text:
type: string
resolution_pending:
type: boolean
description: Support asked the account owner to confirm the problem is solved
category:
type:
- string
- 'null'
enum:
- general
- product
- integration
- billing
- order
- incident
- null
description: The ticket's category as support files it
created_at:
type:
- string
- 'null'
format: date-time
updated_at:
type:
- string
- 'null'
format: date-time
last_message:
type:
- object
- 'null'
properties:
from:
type: string
enum:
- customer
- support
at:
type: string
format: date-time
next_step:
type: string
description: What happens next and what to do, in one sentence
support_hours:
type: string
submitted:
type:
- object
- 'null'
description: What this key sent when opening it
properties:
via:
type: string
enum:
- api
- mcp
category:
type:
- string
- 'null'
request_id:
type:
- string
- 'null'
request_found:
type:
- boolean
- 'null'
description: Whether that request_id is a call of this account
job_id:
type:
- string
- 'null'
job_found:
type:
- boolean
- 'null'
description: Whether that job_id is a job of this account
contact_email:
type:
- string
- 'null'
messages:
type: array
description: Up to the latest 100 messages, oldest first
items:
type: object
properties:
id:
type: integer
from:
type: string
enum:
- customer
- support
text:
type: string
created_at:
type: string
format: date-time
messages_truncated:
type: boolean
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'401':
description: Missing, invalid, disabled or expired API key (`missing_key`, `invalid_key`, `expired_key`, `key_in_url_not_accepted`)
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'403':
description: Account disabled, source IP outside the key's allowlist, or an account served by a reseller (`support_not_available`)
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
'429':
description: '`rate_limited` — 60 account requests per minute (all keys of the account combined), or support is receiving too many requests right now; honour Retry-After'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
Retry-After:
description: Seconds to wait before retrying. Always present on the per-minute 429 of data, search, captcha and AI; on 503 when the wait is known (capacity, busy)
schema:
type: integer
'503':
description: '`support_unavailable` (nothing was opened) or `support_outcome_unknown` (retry the same request: it returns the ticket and never opens a second one)'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
headers:
X-Request-Id:
description: Request id; success bodies repeat it as `id`, error bodies as `error.request_id`.
schema:
type: string
Retry-After:
description: Seconds to wait before retrying. Always present on the per-minute 429 of data, search, captcha and AI; on 503 when the wait is known (capacity, busy)
schema:
type: integer
'404':
description: '`ticket_not_found` — no such ticket for this key'
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
request_id:
type: string
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.