EveryInfra Support API

Human support tickets opened with any API key; free

GitHub OpenAPI

Operations 2

POST /api/v1/support/tickets Open a human support ticket #
GET /api/v1/support/tickets/{ticket_id} A support ticket and its messages #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/everyinfra-com:everyinfra-com-support-api"
All apis
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.

Get an API 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 Specification

everyinfra-com-support-api-openapi.yml Raw ↑
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.