Skip to main content
Retrieve a paginated list of analyses. Filter by project or status to narrow results, and use cursor-based pagination to iterate through large collections efficiently.

Endpoint

GET https://api.screenscoreai.com/v1/analyses

Query parameters

project_id
string
Return only analyses belonging to this project. If omitted, analyses across all projects are returned.
status
string
Filter by processing status. Accepted values: pending, processing, completed, failed. If omitted, analyses in all states are returned.
limit
integer
default:"20"
Number of results to return per page. Minimum 1, maximum 100. Defaults to 20.
after
string
Pagination cursor. Pass the next_cursor value from the previous response to retrieve the next page. Omit this parameter to start from the beginning.

Example request

curl --request GET \
  --url "https://api.screenscoreai.com/v1/analyses?project_id=proj_01hx4k2m9fvbzq3rcw7ndj6e5t&status=completed&limit=10" \
  --header "Authorization: Bearer YOUR_API_KEY"

Response

data
object[]
required
Array of analysis objects matching the query. Each object has the same fields as the Get analysis response.
next_cursor
string
Cursor to pass as after in the next request to retrieve the following page. null when you have reached the last page.
total
integer
required
Total number of analyses matching the applied filters, across all pages.

Example response

{
  "data": [
    {
      "id": "ana_09jz7p3nqwec1x5vbr4mt8ks2d",
      "project_id": "proj_01hx4k2m9fvbzq3rcw7ndj6e5t",
      "status": "completed",
      "image_url": "https://example.com/screens/homepage-v2.png",
      "label": "Homepage - Variant B",
      "score": 78,
      "breakdown": {
        "visual_clarity": 82,
        "visual_hierarchy": 74,
        "color_contrast": 91,
        "cta_effectiveness": 65,
        "brand_consistency": 80
      },
      "feedback": [
        "The primary CTA button lacks sufficient contrast with the background.",
        "Text hierarchy between the headline and subheading is too similar in weight."
      ],
      "error_message": null,
      "created_at": "2026-04-16T10:23:45Z",
      "completed_at": "2026-04-16T10:23:52Z"
    },
    {
      "id": "ana_02bw9r6yftml4a8vck3pu1ns7h",
      "project_id": "proj_01hx4k2m9fvbzq3rcw7ndj6e5t",
      "status": "completed",
      "image_url": "https://example.com/screens/homepage-v1.png",
      "label": "Homepage - Variant A",
      "score": 64,
      "breakdown": {
        "visual_clarity": 70,
        "visual_hierarchy": 58,
        "color_contrast": 72,
        "cta_effectiveness": 55,
        "brand_consistency": 66
      },
      "feedback": [
        "Low color contrast on body text makes it difficult to read on mobile screens.",
        "The hero section has competing focal points — simplify to direct attention to the CTA."
      ],
      "error_message": null,
      "created_at": "2026-04-15T14:10:02Z",
      "completed_at": "2026-04-15T14:10:09Z"
    }
  ],
  "next_cursor": "cur_eyJsYXN0X2lkIjoiYW5hXzAyYnc5cjZ5ZnRtbDRhOHZjazNwdTFuczd",
  "total": 47
}

Paginating through all results

To iterate through every page, pass the next_cursor from each response as the after parameter in the next request. Stop when next_cursor is null.
Node.js
let cursor = null;
const allAnalyses = [];

do {
  const params = new URLSearchParams({ limit: '100' });
  if (cursor) params.set('after', cursor);

  const response = await fetch(
    `https://api.screenscoreai.com/v1/analyses?${params}`,
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );

  const page = await response.json();
  allAnalyses.push(...page.data);
  cursor = page.next_cursor;
} while (cursor !== null);