---
title: "Users who liked a tweet"
method: POST
path: "/tweet/{tweetId}/favorites"
tags: ["Tweets"]
---

# Users who liked a tweet

`POST /tweet/{tweetId}/favorites`

## Request

- Base URL: `https://api.twittrapi.com`
- URL: `https://api.twittrapi.com/tweet/{tweetId}/favorites`
- Auth: API key in header `X-API-KEY`

Accounts that liked one of your own tweets.

Paginated: pass the bottom cursor of one page as cursor to get the next. Each page is one billed call.

Works only for your own tweets. X shows who liked a tweet only to its author, so the request runs as the account in cookie. For anyone else's tweet the list is empty.

The like count of any tweet is in the tweet itself (favorite_count, or counts.likes in the simple format).

Reference: https://www.twittrapi.com/docs/reference/tweet-tweetid-favorites

## Path parameters

- `tweetId` string, required

## Query parameters

- `format` 'raw' | 'simple'

## Request body

- object
  - `cookie` string, required: Cookie header of the X account that posted the tweet. Must contain auth_token and ct0; guest_id is used when present.
  - `proxy` string, required: Your proxy, format http://user:pass@host:port. The request to X goes out through it. Used only for this request.
  - `count` integer: Users per page, up to 100.
  - `cursor` string: Bottom cursor from the previous page.

## Response `200`

Raw JSON of X's Favoriters query.

With format=simple: Collection of User objects: {data: [User], nextCursor, previousCursor, hasNextPage}.

- union: format=simple: the simple-format schema. Default (raw): X's JSON, passthrough.
  - UserPage: Simple format: a page of users
    - `data` User[], required
      - `id` string, required
      - `username` string, required: Handle without @
      - `name` string, required: Display name
      - `description` string, required: Bio, t.co links expanded
      - `location` string, required
      - `url` string, nullable, required: Website, expanded
      - `createdAt` string, date-time, nullable, required
      - `avatarUrl` string, nullable, required
      - `bannerUrl` string, nullable, required
      - `verified` boolean, required: Blue check
      - `verifiedType` string, nullable, required: e.g. Business or Government
      - `protected` boolean, required: Private account
      - `counts` object, required
        - `followers` integer, required
        - `following` integer, required
        - `tweets` integer, required
        - `likes` integer, required
        - `media` integer, required
        - `listed` integer, required
      - `pinnedTweetIds` string[], required
      - `isAutomated` boolean, required
    - `nextCursor` string, nullable, required: Pass as cursor for the next page; null on the last page
    - `previousCursor` string, nullable, required: X's top cursor, for polling newer items
    - `hasNextPage` boolean, required
  - RawPassthrough: X's own JSON (raw format, the default), passed through unchanged. The shape is X's and can change; see https://www.twittrapi.com/docs/response-format.

## Other responses

- `400`: GET, or cookie or proxy missing. Refunded.
- `401`: Missing or unknown API key. Not charged.
- `402`: No balance left, or the trial expired. Not charged. Top up in the dashboard.
- `403`: Key deactivated, or the endpoint is not in your plan (trial keys and account actions). Not charged.
- `422`: tweetId is not numeric.
- `429`: Rate limit for your key exceeded. Not charged. No Retry-After header: back off exponentially.
- `500`: Something failed on our side or between us and X. Refunded (400, 407, 408, 409 or a 5xx error are refunded). Retry with backoff.

---

[API](https://skmtc.dev/twittrapi/apis/twittrapi-api.md) · [All operations](https://skmtc.dev/twittrapi/apis/twittrapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/twittrapi/apis/twittrapi-api/revisions/0618e38b54c2?raw)
