Posts
List Instagram posts: an account's posts or reels, a hashtag's top posts, or a location's recent posts.
GET | POST /v1/instagram/postsSend parameters as a query string with GET, or as a JSON body with POST. Both are equivalent.
What to Pass
| Pass | Reads | Notes |
|---|---|---|
username | A creator's posts | type: posts (default) or reels |
hashtag | Top posts under a hashtag | |
location | Recent posts at a location | A numeric location id or URL |
Pass one source per call. Every identifier also takes the page URL.
Parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
cursor | string | Opaque cursor from the previous page's cursor. Pass it alone for the next page. | |
hashtag | string | Top posts under a hashtag: with or without #, or its page URL. | |
location | string | Posts at a location: numeric location id or URL (…/explore/locations/<id>/). One page: Instagram shows the rest only to signed-in users. | |
type | enum | username: the creator's posts (default) or reels. posts reels | |
username | string | Creator @handle (with or without @), or the profile URL. |
Request
curl "https://gateway.apinoa.com/v1/instagram/posts?username=natgeo" \
-H "x-api-key: $APINOA_API_KEY"Response
Returns Page of Post in data. A real response, shortened: arrays keep their first entries and long text is cut.
{
"success": true,
"data": {
"platform": "instagram",
"items": [
{
"platform": "instagram",
"id": "4012207125530714429",
"url": "https://www.instagram.com/p/DeuOR-CjKE9/",
"author": {
"platform": "instagram",
"id": "787132",
"handle": "natgeo",
"displayName": "National Geographic",
"url": "https://www.instagram.com/natgeo/",
"avatarUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-j…",
"verified": true
},
"text": "Some of the best reasons to travel in 2027 are far from the usual destinations. 🌎\n\nNational Geographic’s picks for Best…",
"media": [
{
"type": "image",
"url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-15/858921974_18710195065019133_277441153414192961_n.jpg?stp=dst-jp…",
"altText": "Photo by National Geographic on October 20, 2026. May be an image of outdoors and text."
}
],
"entities": {
"hashtags": [
"BestOfTheWorld"
]
},
"ext": {
"code": "DeuOR-CjKE9",
"pk": "4012207125530714429",
"productType": "feed",
"mediaType": 1
}
}
],
"cursor": "0GWpK_Oa_P5Zvj8DNEztXhzp3kgvgvUDKr1WOtHVY5Ijmkf8MpfCfXxIs6M5DnbCgCuWdbaY9d2TzVbzd70-042QggBFYjD4KgTproeiGlBmfbC_4GiuzdC…"
}
}Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | INVALID_CURSOR | The cursor is not one this operation returned. Start again without it. |
| 400 | INVALID_PARAMS | A parameter is missing, unknown or out of range. The message names it. |
| 401 | UNAUTHORIZED | The x-api-key header is missing, or the key is revoked or unknown. |
| 402 | INSUFFICIENT_BALANCE | The balance does not cover this call. Top up in the dashboard. |
| 404 | NOT_FOUND | The account, post or group does not exist, or is private, deleted or age-restricted. |
| 429 | MARKETPLACE_SATURATED | Too many concurrent calls. Retry after the Retry-After seconds. |
| 502 | UPSTREAM_ERROR | The platform answered with something unusable. Retry with backoff. |
Every code is listed in Errors. Failed calls are not billed.
Pricing
Price $0.001 per call. List price; the rate steps down above 1,000 calls a day.