Apinoa Docs

Getting Started

Create an API key, make your first call, and learn the conventions every endpoint shares.

View raw .mdx

Quick Start

1. Create an Account

Sign up at apinoa.com and verify your email address. No card is needed.

2. Add Credit

Calls are billed from a prepaid balance at the rate on the pricing page; there are no plans to choose. Dashboard > Balance shows what is left and tops it up. To evaluate first, request free credit from the Free Credit card on your dashboard: up to $1 per account in total, including the $0.10 from step 3.

3. Create an API Key

The quickest way is from your terminal. Run this in your project directory:

npx apinoa-mcp login

It opens a page where you sign in to apinoa (or create an account), enter the code it shows and approve. The key is then written to .env as APINOA_API_KEY. An account's first key made this way, or by signing in to the hosted MCP server, comes with $0.10 of evaluation credit, once per account. Authentication has the details.

Or go to Dashboard > API keys and create a key. It is shown once, at creation, so store it right away:

export APINOA_API_KEY="myapp_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"

One key works for every API. The examples in these docs read it from the APINOA_API_KEY environment variable: export it as above, or load the .env that npx apinoa-mcp login wrote.

4. Make Your First Call

curl "https://gateway.apinoa.com/v1/walmart/search?query=wool+socks" \
  -H "x-api-key: $APINOA_API_KEY"

The SDKs wrap every operation, and the MCP server gives Claude Code, Codex and Cursor the whole API.

5. Read the Response

Every response has success, then data (or error). A search returns a SearchResult; shortened, it looks like this:

{
  "success": true,
  "data": {
    "marketplace": "walmart",
    "query": "wool socks",
    "page": { "index": 1, "size": 47, "total": 4871 },
    "items": [
      {
        "marketplace": "walmart",
        "id": "344144554",
        "title": "Genuine Dickies Men's Wool Thermal Crew Sock, 3 Pack, Shoe Size 6-12",
        "price": { "currency": "USD", "amount": 15.98 },
        "rating": { "average": 4.7, "count": 551 },
        "inStock": true
      }
    ]
  }
}

6. Switch Platforms

The platform is a segment of the path. The key, the parameter names and the response shape stay the same:

curl "https://gateway.apinoa.com/v1/amazon/search?query=wool+socks" -H "x-api-key: $APINOA_API_KEY"
curl "https://gateway.apinoa.com/v1/shopify/search?query=wool+socks" -H "x-api-key: $APINOA_API_KEY"

Conventions

These hold for every endpoint in these docs.

Base URL

https://gateway.apinoa.com/v1/{platform}/{operation}

{platform} is a marketplace (amazon, walmart, shopify, tiktokshop, aliexpress), a social platform (tiktok, instagram, youtube, reddit, x, threads, linkedin), a search engine (google, bing, naver and the others) or an AI answer engine (chatgpt, gemini, google-aio, google-ai-mode, naver-ai-brief, naver-ai-tab). {operation} is lowercase, with words joined by hyphens (image-search). GET /v1/marketplaces lists every platform and operation.

GET or POST

Every operation accepts its parameters either as a query string with GET or as a JSON body with POST; the two are equivalent. The exceptions are image search, which is POST only because an image does not fit in a URL, and AI answers, which take their inputs as a JSON body.

curl -X POST "https://gateway.apinoa.com/v1/walmart/search" \
  -H "x-api-key: $APINOA_API_KEY" \
  -H "content-type: application/json" \
  -d '{"query": "wool socks", "priceMax": 30}'

An unknown parameter is a 400 that names it, never silently ignored.

The Envelope

Every response is JSON with success, then either data or error:

{
  "success": false,
  "error": { "code": "INVALID_PARAMS", "message": "(root): Unrecognized key(s) in object: 'nope'" },
  "requestId": "8d76f93c85cc4e9f911e2d0de23334c4"
}

error.code is stable and documented in Errors; error.message is for people. Quote the requestId (also sent as the x-request-id header) if you contact support.

Response Headers

HeaderMeaning
x-request-idThe request's id, the same as requestId in an error body
x-apinoa-costThe units this call was billed
x-api-versionThe API version that answered (v1)

Absent Means Unknown

A field the platform did not state is left out, never filled with a default. An absent price is not zero, and an absent metrics.likes is a hidden count, not zero likes. Prices are decimal amounts in major units (12.97), with their currency. Times are ISO 8601, in UTC.

Paging

A list answers with a page. Depending on the operation, ask for the next one with:

  • page — a 1-based page number, on operations that page by number (most marketplace searches).
  • cursor — the cursor the previous page returned, on operations that page by cursor (Shopify, every SNS list). Pass it on its own; it carries everything the first call asked for. No cursor in a response means there is no next page.

Each endpoint's Parameters table shows which one it takes.

Pricing

Each call is billed in units at its API's unit price: Pricing lists every API's price, and each endpoint's page states what one call costs. The rate steps down above 1,000 calls a day. Most calls cost one unit; each endpoint's Pricing section says when one can cost more. A call that fails is not billed.

Next Steps

  • Marketplace API: the shared operations and which marketplace has which
  • SNS API: the eight shared operations across seven platforms
  • SERP API: search results pages from 16 search engines in one schema
  • AI Answers API: what ChatGPT, Gemini, Google and Naver's AI answer to a prompt
  • SDKs and MCP: TypeScript, Python, the MCP server and the OpenAPI document
  • Image Translate: translate the text inside product images
  • Authentication: sending and protecting your key
  • Errors: every error code and what to do about it

On this page