Instagram: users, posts, reels, stories, and comments. All endpoints are read-only GET requests and return public Instagram data — no account of your own is required.
Base URL: https://api.pullbay.com/
Endpoints
Users
GET /instagram/userid/{handle}
Resolve a handle to a numeric user ID
—
GET /instagram/user/handle/{handle}
Get a user profile by handle
—
GET /instagram/user/{id}
Get a user profile by numeric ID
—
Posts & Reels
GET /instagram/user/{id}/posts
Get posts published by a user
Cursor / maxItems
GET /instagram/user/{id}/posts/tagged
Get posts a user is tagged in
Cursor / maxItems
GET /instagram/user/{id}/reels
Get reels published by a user
Cursor / maxItems
GET /instagram/post/code/{code}
Get a single post by shortcode
—
Stories
GET /instagram/user/{id}/stories
Get a user's currently-active stories
—
Comments
GET /instagram/post/{id}/comments
Get comments on a post
Cursor / maxItems
Resolve User ID
Returns whether a handle is available and, if it exists, the resolved Instagram user ID. This is the common entry point for the rest of the service — see Resolving a handle to a user ID below.
Request
Parameters
handle
string
Yes
Instagram handle, without @, 1–100 characters (e.g. instagram)
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get User By Handle
Returns an Instagram user profile by handle (without @).
Request
Parameters
handle
string
Yes
Instagram handle, without @, 1–100 characters (e.g. instagram)
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get User By ID
Returns an Instagram user profile by numeric user ID.
Request
Parameters
id
string
Yes
Numeric Instagram user ID, 1–100 characters (e.g. 25025320)
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get User Posts
Returns posts published by an Instagram user. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Numeric Instagram user ID, 1–100 characters
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
cursor
string
No
Pagination cursor from a previous response. Mutually exclusive with maxItems
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of posts returned, not the number of requests.
Get User Tagged Posts
Returns posts where the Instagram user is tagged. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Numeric Instagram user ID, 1–100 characters
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
cursor
string
No
Pagination cursor from a previous response. Mutually exclusive with maxItems
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of posts returned, not the number of requests.
Get User Reels
Returns reels published by an Instagram user. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Numeric Instagram user ID, 1–100 characters
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
cursor
string
No
Pagination cursor from a previous response. Mutually exclusive with maxItems
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of reels returned, not the number of requests.
Get Post By Shortcode
Returns a single Instagram post by its shortcode (the segment after /p/ in the URL).
Request
Parameters
code
string
Yes
Post shortcode, 1–100 characters (e.g. CzABCdef123)
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get User Stories
Returns the user's currently-active Instagram stories (non-paginated — stories expire after 24 hours, so the full set is always returned in one call).
Request
Parameters
id
string
Yes
Numeric Instagram user ID, 1–100 characters
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Post Comments
Returns comments on an Instagram post. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Numeric Instagram post ID, 1–100 characters
maxItems
integer
No
One-shot bulk pull, 1–500 results. Mutually exclusive with cursor
cursor
string
No
Pagination cursor from a previous response. Mutually exclusive with maxItems
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of comments returned, not the number of requests.
Object Schemas
User ID lookup object
isAvailable
boolean
Whether the handle exists/is in use
handle
string
The handle that was looked up
id
string
Numeric Instagram user ID. Present only when isAvailable is true
User object
type
string
Always user
isAvailable
boolean
Whether the profile is available
id
string
Numeric Instagram user ID
username
string
Handle, without @
fullName
string
Display name
biography
string
Bio text
profilePicUrl
string
Profile picture URL
website
string
Link in bio
category
string
Business/category label (e.g. App page)
cityName
string
City shown on profile, nullable
isPrivate
boolean
Whether the account is private
isVerified
boolean
Whether the account has a verified badge
isBusiness
boolean
Whether the account is a business account
hasVideos
boolean
Whether the account has published videos
hasGuides
boolean
Whether the account has published guides
postCount
integer
Total post count
followerCount
integer
Follower count
followingCount
integer
Following count
totalReelsCount
integer
Total reel count
bioLinks
array
Links shown in the bio
Post owner object
Lightweight user reference embedded in posts and stories.
id
string
Numeric Instagram user ID
username
string
Handle, without @
fullName
string
Display name
profilePicUrl
string
Profile picture URL
isVerified
boolean
Whether the account has a verified badge
isPrivate
boolean
Whether the account is private
Post object
type
string
photo / video / carousel / reel
id
string
Numeric post ID
code
string
Shortcode (the segment after /p/ in the URL)
url
string
Permalink to the post
caption
string
Caption text
createdAt
integer
Unix timestamp (seconds) the post was published
likeCount
integer
Like count
commentCount
integer
Comment count
isAvailable
boolean
Whether the post is still available
isCarousel
boolean
Whether the post is a multi-media carousel
isVideo
boolean
Whether the post is a video
isPinned
boolean
Whether the post is pinned to the profile
isPaidPartnership
boolean
Whether the post is a paid partnership
isLikeAndViewCountsDisabled
boolean
Whether like/view counts are hidden
location
object
Tagged location, nullable
image
object
Image media data, nullable
video
object
Video media data, nullable
audio
object
Audio track data, nullable
carouselMedia
array
Per-slide media for carousel posts
Comment object
type
string
Always comment
id
string
Comment ID
userId
string
Numeric ID of the commenter
message
string
Comment text
createdAt
string (date-time)
When the comment was posted
likeCount
integer
Like count
replyCount
integer
Reply count
isRanked
boolean
Whether the comment is algorithmically ranked/pinned
user
object
Commenter reference (id, username, fullName, profilePicUrl, isPrivate, isVerified)
Story object
type
string
photo / video
id
string
Story ID
code
string
Shortcode
createdAt
integer
Unix timestamp (seconds) the story was posted
expiringAt
integer
Unix timestamp (seconds) the story expires
duration
number
Duration in seconds
hasAudio
boolean
Whether the story has audio
hasTranslation
boolean
Whether translated text is available
canReshare
boolean
Whether the story can be reshared
canReply
boolean
Whether replies are allowed
isVideo
boolean
Whether the story is a video
image
object
Image media data, nullable
video
object
Video media data, nullable
audio
object
Audio track data, nullable
link
object
Attached link sticker data, nullable
comments
array
Comments left on the story
mentions
array
Mentioned accounts
hashtags
array
Tagged hashtags
Errors
All non-2xx responses share the same envelope:
400
Bad request — missing/invalid parameters
402
Insufficient credits
404
User, post, or story not found
Resolving a handle to a user ID
Every endpoint except the two handle-based lookups (GET /instagram/user/handle/{handle} and GET /instagram/userid/{handle}) requires a numeric user ID, not a handle. If you only have a handle:
Call
GET /instagram/userid/{handle}to resolve it to a numericidand confirmisAvailableistrue.Use that
idfor posts, tagged posts, reels, and stories endpoints (/instagram/user/{id}/...).
If you already need the full profile anyway, GET /instagram/user/handle/{handle} returns both the profile and the numeric id in one call, saving a round trip.
Pagination
List endpoints (posts, tagged posts, reels, comments) support cursor-based pagination: pass
cursorfrom the previous response'spagination.cursorto get the next page, or usemaxItemsfor a one-shot bulk pull instead.cursorandmaxItemsare mutually exclusive.pagination.hasNextPageindicates whether more results are available.The user and story endpoints (profile lookups, active stories, single post by shortcode) are not paginated — they always return the full result in one call.
Last updated