Instagram Profile Search API
Resolve a brand or @handle to one public Instagram profile — stable id, bio, links, and stats (not niche discovery).
Pass an account name, @handle, or profile URL (e.g. nike, @nasa, instagram.com/natgeo) and this endpoint resolves it to the matching public Instagram account — a name→username resolver, not a Google-style niche discovery search (queries like "fitness coach" will not return a creator list). A leading underscore on q is stripped (_glowprotocol → glowprotocol); underscores in the middle of a handle stay. Response: mode=resolve (the only mode; Instagram keyword search is login-gated), users[0] with platform, id (numeric), username, displayName, url (canonical https://www.instagram.com/{user}/), bio, bioLinks[], externalUrl, fbid, businessAddress{cityName, streetAddress, latitude, longitude, zipCode} when Instagram exposes them, followers/following/postCount, verified, isPrivate, isBusinessAccount/isProfessionalAccount, avatar, and imageExpiresAt when the CDN oe= param is present. Sparse keys (bio, bioLinks, externalUrl, businessAddress, categoryName, relatedProfiles, likeAndViewCountsDisabled) are omitted, not nulled, when the account has no value. relatedProfiles only appears when Instagram's logged-out graph sends edge_related_profiles — many public accounts including nike omit it, so it is not a creator-search substitute. No nextCursor — resolve returns at most one user. A handle Instagram confirms does not exist is 200 with users=[] and handleStatus not_found at 0 credits. When the lookup itself fails (Instagram rate limit or timeout) the answer is 503 UPSTREAM_UNAVAILABLE with retryable=true at 0 credits — an empty users[] always means the account was checked and is not there. A q that cannot be an Instagram username (no letters, digits, periods or underscores) is 400 BAD_REQUEST. Flat 1 credit on a hit. Cache is on by default (24h shared cache, 0 credits on hit) because a resolve answer barely changes — pass cache=false to force a fresh upstream lookup. The uncached path resolves the profile live; set client timeouts ≥15s, not 10s.
Request
- Base URL: https://api.captapi.com
- URL: https://api.captapi.com/v1/instagram/profile-search
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Query parameters
Account name, @handle, or profile URL to resolve (min 2 characters). A leading _, accents (misión → mision), spaces and URL query strings (?igsh=…) are stripped. A q with no usable username characters is 400 BAD_REQUEST. Not a niche keyword search.
Serve from the 24h shared cache when available (0 credits on hit). Default true — set false to always fetch fresh.
Response
Success. The data object for this endpoint.
Changes
No recorded changes to this operation across all 3 revisions of this API.