Getting Started
Create an API key, make your first call, and learn the conventions every endpoint shares.
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 loginIt 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
| Header | Meaning |
|---|---|
x-request-id | The request's id, the same as requestId in an error body |
x-apinoa-cost | The units this call was billed |
x-api-version | The 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— thecursorthe 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. Nocursorin 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