---
title: "Check whether an Instagram user follows the account"
method: GET
path: "/v1/accounts/{accountId}/follow-status/{userId}"
tags: ["Accounts"]
---

# Check whether an Instagram user follows the account

`GET /v1/accounts/{accountId}/follow-status/{userId}`

Resolves the follow relationship between an Instagram user and the connected
account, plus their public profile counters.

`userId` is the Instagram-scoped id (IGSID) Meta gives you on a webhook:
`sender.id` on `message.received`, `comment.author.id` on `comment.received`.

**Meta only answers for people who have MESSAGED the account.** Commenting grants
no consent, so a commenter who has never DMed you is unresolvable - that is a
platform rule, not a limitation of this endpoint. When it cannot be resolved the
response is still `200` with `isFollower: null` and an `unavailableReason`, because
"unknown" is a normal state to branch on:

  * `consent_required` - the user has never messaged this account.
  * `dm_access_disabled` - the account owner turned off Instagram Direct API access.
  * `not_messageable` - the id is not a messaging-scoped id.
  * `error` - a transient Graph API failure.

To gate a comment automation on this, use the automation's `audience` rules instead
of calling this per comment - they run the same lookup only on comments that
actually match a keyword, and can ask the commenter to confirm with one tap.

Answers are cached briefly per (account, user). Pass `refresh=true` right after
asking someone to follow, so a follow from a moment ago is visible.

## Path parameters

- `accountId` string, required
- `userId` string, required

## Query parameters

- `refresh` boolean

## Response `200`

Follow status (fields are null when Meta would not resolve it)

- object
  - `userId` string, required
  - `accountId` string, required
  - `isFollower` boolean, nullable, required — The user follows this account. Null = unknown, never "no".
  - `isFollowedByAccount` boolean, nullable — This account follows the user.
  - `followerCount` integer, nullable
  - `isVerified` boolean, nullable
  - `username` string, nullable
  - `name` string, nullable
  - `unavailableReason` 'consent_required' | 'dm_access_disabled' | 'not_messageable' | 'error' | 'null', nullable — Why the follow relationship could not be resolved. Null when it was.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Resource not found

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/15e893e69e8c/schema)
