# Instagram 账号画像 API (instagram.persona)

- Canonical page: https://everyinfra.com/instagram-api/persona
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "instagram", "action": "persona", "params": {...}}
- Price: $0.000556 per call ($0.56 per 1,000 requests); failed calls and empty results are not charged
- Returns: single object
- Related: Same parameters and fields as instagram.profile. The response also has a top-level `persona` object: an AI-written profile of the account based on its profile details and recent posts.
- Mode: sync; add "mode": "async" for slow tasks

Instagram 账号画像在主页资料之外，再给一个 persona 对象：所属行业、行业下的细分领域、真实性判断（通常附一句理由），以及一段话的账号概述。它回答「这是个什么样的账号、值不值得合作」，达人营销团队拿一串候选 handle 批量跑一遍，不必逐个点开主页翻简介和帖子，就能先分出赛道、筛掉可疑号，人工只看要谈的那几个。

主页上那套原始字段照样随响应返回，选了画像就不用再单独调主页详情。账号名填 handle，不带 @，也可以直接给完整主页链接。平台自带的 `category` 和画像写的行业是两套口径，入库分两列存；前者沿用原平台体系，后者是模型读完内容写的判断，两者差得远的账号再人工点开看。

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=instagram&action=persona

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| username | not declared | yes | not declared | Instagram 账号 handle，建议不带 @ 或完整主页 URL。profile/persona/user_posts/reels 查询账号数据；followers 只查粉丝数量，followers_list/following_list 才查粉丝/关注账号列表。 |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| username | 用户名（@handle）。 |
| display_name | 显示名，可能与 username 不同。 |
| bio | 个人简介，账号自己填写的文本。可能含换行和 emoji。 |
| follower_count | 粉丝数。null 表示不公开，不等于 0。 |
| following_count | 关注数。null 表示不公开，不等于 0。 |
| post_count | 发布内容总数。null 表示不公开，不等于 0。 |
| is_private | 是否私密账号。 |
| is_verified | 是否为平台认证账号（蓝V等）。null 表示无法判定。 |
| is_business | 是否为商家账号。 |
| is_professional | 是否为专业账号（商家或创作者）。 |
| category | 分类名称，取值为原平台的分类体系，未做跨平台归一。 |
| external_url | 主页外链。 |
| avatar_url | 头像图片链接。部分平台给的是带尺寸参数的 CDN 链接，可能有时效。 |
| user_id | 用户在原平台的唯一 ID。 |
| avatar_hd_url | 高清头像链接（avatar_url 是小图）。 |
| external_urls | 简介里的全部外链：url、title（external_url 只是第一个）。 |
| has_reels | 是否发过 Reels。 |
| highlight_count | 精选快拍（Highlights）个数。 |
| recent_posts | platform-native meaning |

## Top-level persona object

The response also has a persona object at the top level, next to results, for both synchronous calls and async jobs (mode: async): an AI-written profile of the account based on its profile details and up to 6 of its most recent posts, in English. It is null when it cannot be generated, and results are returned as usual.

| field | meaning |
|---|---|
| persona.industry | 所属行业。 |
| persona.niche | 行业里的细分领域。 |
| persona.authenticity | 真实性判断，通常附一句理由。 |
| persona.summary | 一段话的账号画像。 |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "instagram",
  "action": "persona",
  "params": {
    "username": "nasa"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "instagram",
        "action": "persona",
        "params": {
            "username": "nasa",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-09-26T08:56:04Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "instagram",
  "action": "persona",
  "results": {
    "username": "nasa",
    "display_name": "NASA",
    "bio": "Making the seemingly impossible, possible. ✨",
    "follower_count": 104336090,
    "following_count": 89,
    "post_count": 4934,
    "is_private": false,
    "is_verified": true,
    "is_business": false,
    "is_professional": false,
    "external_url": "https://www.nasa.gov",
    "avatar_url": "https://scontent.cdninstagram.com/•••",
    "recent_posts": [
      {
        "post_id": "DdHyaYAifb6",
        "url": "https://www.instagram.com/p/DdHyaYAifb6",
        "text": "Cementing their names in history.\n\nThe Artemis III crew is leaving their mark — literally. The astronauts recently signed their names on the hardware that will be inside their Orion spacecraft during their low Earth orbit mission, launching in 2027.\n\nImage descriptions:\n\n1. The A…",
        "media_type": "image",
        "like_count": 0,
        "comment_count": 0,
        "view_count": 0,
        "author_username": "nasa",
        "posted_at": "2026-09-10T00:00:00+00:00"
      },
      {
        "post_id": "DdWyDLcGiqo",
        "url": "https://www.instagram.com/p/DdWyDLcGiqo",
        "text": "Southern Hemisphere Milky Way galaxy view from the @••• cupola. This 3s exposure series captured two of my favorite cupola views, the particularly dense Milky Way galaxy as seen from the Southern Hemisphere, and the bright, colorful lights of squid fishing boats (here, the brig…",
        "media_type": "image",
        "like_count": 0,
        "comment_count": 0,
        "view_count": 0,
        "author_username": "•••",
        "posted_at": "2026-09-16T00:00:00+00:00"
      },
      {
        "post_id": "DdT_4GMka0z",
        "url": "https://www.instagram.com/p/DdT_4GMka0z",
        "text": "In a class of their own\n\nHidden within this star-forming nebula (captured by our Webb telescope in one of its largest images to date) are strange objects called brown dwarfs. Generally less massive than stars and more massive than planets, they are neither. They form the same way…",
        "media_type": "image",
        "like_count": 0,
        "comment_count": 0,
        "view_count": 0,
        "author_username": "•••",
        "posted_at": "2026-09-15T00:00:00+00:00"
      }
    ]
  },
  "persona": {
    "industry": …,
    "niche": …,
    "authenticity": …,
    "summary": …
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### 画像和只读原始资料，选哪个更合适？

看你要不要归类意见。两者主页字段相同，差别只在画像多出的那个对象，里面写着行业、细分领域、真实性判断和概述。手里只需要粉丝数、简介这类原始值，选主页详情就行；要给一批账号分门别类、写初筛意见，用画像。主页详情有的字段这边一个不少，从那边切过来，原先解析主页数据的代码不用改，只是多读一个对象。原始值和模型判断同在一份响应里，复核时也不用再发第二次请求。可以这样分工：初筛阶段跑画像，入选的账号之后改用主页详情定期记数。

### `authenticity` 写的真实性判断能直接当结论吗？

建议只当初筛参考。它是 AI 依据主页资料和最近几条帖子写的，通常附一句理由，存档时连理由一起保留，日后复核才知道当时凭什么下结论。拍板合作前，用同一份响应里的数据再核一遍：粉丝数和发帖数是否相称，最近帖子的互动是否正常。计数为空表示没公开，这时只能多看帖子。理由写得含糊、或者和你看到的帖子对不上的，挪进人工复核组，别直接淘汰；整批跑完后抽几个判为可信的号亲自看一遍，再决定这批结果能信几分。

### 怎样用 `industry` 和 `niche` 拉一个赛道的候选名单？

批量读一组账号，先按行业分大类，再用细分领域往下切，切到你要的赛道为止；赛道定得越窄，越要以细分领域为准。再结合 `is_business` 和 `category` 把商家号和个人创作者分开。`summary` 那段概述可以原样贴进初筛表的备注列，复核的人不用打开主页也知道这个号在做什么。画像依据的是读取当时的主页和近期帖子，名单要长期用，记下读取日期，隔段时间重跑一遍，看归类是否还成立。

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=instagram
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
