TwitterAPIs Docs
API ReferenceAccount

List Feedback API | Page Your Own Reports

Returns the calling account's own feedback reports, newest first, keyset-paginated on (created_at desc, id desc). Each item carries the same summary fields as GET feedback/{id} (id, type, title, area, status, response, created_at, updated_at) and never details or evidence, so paging this endpoint can never turn into a bulk export of a report's full body: read one by id to get that. Free, never metered, and shares the 10-per-minute limiter with POST feedback and GET feedback/{id}. Cost: Free per call.

GET feedback lists the calling account's own feedback reports, newest first: id, type, title, area, status, response, created_at and updated_at per item, never details or evidence. It takes limit (1-100, default 25), cursor, status (new, triaged, shipped, declined) and type (bug, idea, missing_capability), all optional, and returns count (rows in this page), limit and next_cursor (null on the last page). Free, scoped to the calling account, never metered.

GET
/feedback

Authorization

bearerAuth
AuthorizationBearer <token>

Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.

In: header

Query Parameters

limit?integer

Max reports to return, 1 to 100. Defaults to 25. Anything else is rejected with 400 naming limit.

cursor?string

Opaque continuation token from a previous response's next_cursor. Omit it to start from the newest report. A cursor that cannot be decoded is 400 naming cursor, never a silently empty page.

status?string

Filter to one of new, triaged, shipped or declined. Anything else is rejected with 400 naming status.

type?string

Filter to one of bug, idea or missing_capability. Anything else is rejected with 400 naming type.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/feedback?limit=25&cursor=eyJjcmVhdGVkX2F0IjoiMjAyNi0wOS0wMVQwODo0NDoxMi4wMDBaIiwiaWQiOiI3YzllNjY3OSJ9&status=new&type=bug"
{  "feedback": [    {      "id": "9a2b6e31-9b7b-4a44-8d19-2b6ec1c9a411",      "type": "bug",      "title": "tweet/thread returns 500 on a quoted reply",      "area": "tweet/thread",      "status": "triaged",      "response": "Reproduced. The quoted post was deleted mid-thread; a fix is in review.",      "created_at": "2026-09-04T10:15:00.000Z",      "updated_at": "2026-09-04T14:02:11.000Z"    },    {      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",      "type": "idea",      "title": "add a webhook event for monitor degraded state",      "area": "monitor webhooks",      "status": "new",      "response": null,      "created_at": "2026-09-01T08:44:12.000Z",      "updated_at": "2026-09-01T08:44:12.000Z"    }  ],  "count": 2,  "limit": 25,  "next_cursor": null}
{  "error": "invalid_request",  "field": "limit",  "message": "limit must be an integer from 1 to 100 (got \"0\")."}
{  "error": "Invalid API key"}
{  "error": "Too many requests. Limit: 10 per minute."}
{  "error": "upstream_unavailable",  "message": "The feedback service is temporarily unavailable. Retry shortly."}
{  "error": "Internal server error"}

Pricing

UnitPrice
Per callFree

When to use

Use it to build an inbox or dashboard over everything an account's agent has ever reported, or to check for anything still status=new since the last run, instead of tracking every id POST feedback has ever returned. It still answers only the summary fields: call GET feedback/{id} for one report's full details and evidence once you have its id from a page here.

Notes

  • Served from the API root: https://api.twitterapis.com/feedback. It is NOT under /twitter.
  • Scoped to the calling account: a report filed by another account never appears here, the same scoping GET feedback/{id} enforces with its 404.
  • Free. Never metered: paging this endpoint does not touch credits_used or total_requests.
  • Rate limited to 10 requests per minute per API key, the same bucket shared by POST feedback and GET feedback/{id}.
  • Both Authorization: Bearer <key> and x-api-key: <key> are accepted.
  • Every 400 names the field: {"error": "invalid_request", "field": "limit", "message": "limit must be an integer from 1 to 100 (got "0")."} for an out-of-range limit; the same shape applies to status ({"field": "status", "message": "status must be one of new, triaged, shipped, declined (got "open")."}), type ({"field": "type", "message": "type must be one of bug, idea, missing_capability (got "feature")."}), and cursor ({"field": "cursor", "message": "cursor could not be decoded."}). An unreadable cursor is always this 400, never a silently empty page.
  • Matched to redditapis on purpose: the {feedback, count, limit} envelope and the default limit of 25 mirror GET /feedback on redditapis.com, so a customer integrating the same feedback flow on either product gets the same response shape.
  • Every item carries only the summary fields feedback/{id} also returns (never details or evidence): a list call can never become a way to bulk-export a report's full body. Read one by id when you need that.

Pagination

Pass the returned next_cursor back as the cursor parameter to get the next page. Pagination is keyset on (created_at desc, id desc), so a report filed between two of your calls never reshuffles a page you already fetched. Stop when next_cursor is null -- not on an empty feedback array, since a limit larger than the remaining rows can return a final page that is non-empty and still carries a null next_cursor.

  • Send Feedback: File a bug, idea or missing-capability report from the tool you are using, typically drafted by your AI agent and sent after you review it.
  • Feedback Status: Read one feedback report you filed: its current status and the team's response, if any.
  • Account Info: Your credit balance, lifetime usage, and account details for the API key making the call.

FAQ

Can I list every report my account has filed?

Yes. GET feedback returns every report on the account, newest first, paginated with limit and cursor. Filter with status or type to narrow it, for example status=new to see what has not been triaged yet.

Why doesn't a list item include details or evidence?

By design. Those fields can carry a long repro or a payload dump, and returning them on every row of a list would turn one call into a bulk export of everything the account has ever written. Read GET feedback/{id} for one report when you need its full body.

How do I know I've reached the last page?

next_cursor is null. Treat that as the only stop signal: because limit can return a final page that still has rows in it, an empty feedback array is not how you tell a partial page from a finished one here.

Why does the envelope look like {feedback, count, limit} instead of this API's usual response shape?

It is deliberately matched to GET /feedback on redditapis.com. Both products expose the same product-feedback mechanism to an AI agent working against either API, so the response shape and the default limit of 25 are shared rather than reinvented per product.