---
title: "Read the results of a task, a page at a time"
method: GET
path: "/v2/tasks/{taskId}/rows"
tags: ["Bulk"]
---

# Read the results of a task, a page at a time

`GET /v2/tasks/{taskId}/rows`

## Request

- Base URL: `https://api.reversecontact.com`
- URL: `https://api.reversecontact.com/v2/tasks/{taskId}/rows`
- Auth: HTTP bearer

The results of an enrich_persons task in the order sent, one TaskResultLine per item, as in the NDJSON file, readable from the start of the run. While the task runs, a page stops at the first item not finished: items is empty, with Retry-After, while the next one runs, and a cursor never skips an item. A cancelled task still finishes the items it had started, within the hour: a page waits for them the same way. Pass nextCursor back as cursor; it is null once nothing more will come. A page can hold fewer items than limit (at most 100, 2 MB of JSON). A cursor keeps working once the task settles. A task stored before reading by page existed: 409 TASK_RESULTS_FORMAT_UNAVAILABLE, its CSV stays available at /v2/tasks/{taskId}/results. Too many pages read at once: 429 TASK_ROWS_BUSY, retry after Retry-After. Credits: 0 (free).

## Path parameters

- `taskId` string, uuid, required: Task id

## Query parameters

- `cursor` string: nextCursor of the previous page. Absent: the first item. A cursor of another task: 400 TASK_INVALID_INPUT.
- `limit` integer: Items per page, at most 100.

## Response `200`

One page of results

- object
  - `success` true, required
  - `data` object, required
    - `items` TaskResultLine[], required: The items of this page, in the order sent
      - `row` integer, required: Position of the item in the task, from 1 (the order sent)
      - `input` object, required: What was sent for this item, externalId included (empty fields left out)
      - `status` string, required: What happened, as the rc_status column: enriched, partial, not_found, invalid_input, duplicate, insufficient_credits, skipped, data_subject_blocked, rate_limited, error or unknown. running: an item a cancelled task had started and not finished yet, which ends within the hour
      - `message` string, required: The same text as the rc_message column, with the credits it cost
      - `creditsConsumed` number, required: Credits this item cost
      - `person` union, required: The person in the /v2/enrich/persons shape: the full profile (isFullProfile true) or the light shape. Null when none was found, or when the task did not ask for the profile.
        - EnrichedPersonFull: Full person profile shape returned by fetch.
          - `id` string, required: Reverse Contact person id (prs_...)
          - `publicId` string, required: Social public slug
          - `memberId` string: Upstream member identifier when available
          - `linkedinUrl` string, required: Public Social profile URL
          - `firstName` string, nullable
          - `lastName` string, nullable
          - `headline` string, nullable
          - `summary` string, nullable
          - `pronoun` string, nullable
          - `isOpenToWork` boolean: Whether the profile is flagged open to work
          - `hasPremium` boolean: Whether the profile has Social Premium
          - `hasVerificationBadge` boolean: Whether the profile has a verification badge
          - `isInRemembrance` boolean: Whether the profile is in remembrance
          - `photoUrl` string, nullable
          - `backgroundUrl` string, nullable
          - `creationDate` string, nullable
          - `followersCount` integer, nullable
          - `connectionsCount` integer, nullable
          - `location` PersonLocation
            - `city` string, nullable
            - `state` string, nullable
            - `country` string, nullable
            - `countryCode` string, nullable
            - `rawLocation` string, nullable
          - `currentPosition` object, nullable
            - `title` string, nullable
            - `description` string, nullable
            - `contractType` string, nullable
            - `companyId` string, nullable: Reverse Contact company id (com_...)
            - `companyName` string, nullable
            - `companyLinkedinId` string, nullable
            - `companyUrl` string, nullable
            - `companyLocation` string, nullable
            - `companyLogoUrl` string, nullable
            - `startEndDate` object, nullable
              - …
          - `experience` object[]
            - `title` string, nullable
            - `description` string, nullable
            - `contractType` string, nullable
            - `companyId` string, nullable: Reverse Contact company id (com_...)
            - `companyName` string, nullable
            - `companyLinkedinId` string, nullable
            - `companyUrl` string, nullable
            - `companyLocation` string, nullable
            - `companyLogoUrl` string, nullable
            - `startEndDate` object, nullable
              - …
          - `education` object[]
            - `degreeName` string, nullable
            - `fieldOfStudy` string, nullable
            - `description` string, nullable
            - `grade` string, nullable
            - `schoolName` string, nullable
            - `schoolUrl` string, nullable
            - `schoolLogoUrl` string, nullable
            - `startEndDate` object, nullable
              - …
          - `skills` string[]
          - `languages` object[]
            - `language` string, nullable
            - `proficiency` string, nullable
          - `certifications` object[]
            - `name` string, nullable
            - `organizationName` string, nullable
            - `organizationUrl` string, nullable
            - `issuedDate` string, nullable
          - `recommendations` object[]
            - `caption` string, nullable
            - `description` string, nullable
            - `authorFullname` string, nullable
            - `authorUrl` string, nullable
          - `testScores` object[]
            - `testTitle` string, nullable
            - `score` string, nullable
            - `date` string, nullable
          - `currentPositionTitle` string, nullable
          - `currentCompanyId` string, nullable
          - `currentCompanyName` string, nullable
          - `currentCompanyLinkedinId` string, nullable
          - `updateDate` string, nullable: Last update timestamp (ISO 8601)
        - EnrichedPersonLight: Light enrich shape: identity and current role. Used for data.person when the full profile could not be assembled (data.isFullProfile is false), and for an alternative candidate whose full profile could not be retrieved in time.
          - `id` string, required: Reverse Contact person id (prs_...)
          - `publicId` string, required: Social public slug
          - `linkedinUrl` string, required: Public Social profile URL
          - `firstName` string, nullable
          - `lastName` string, nullable
          - `headline` string, nullable
          - `currentPositionTitle` string, nullable
          - `currentCompanyId` string, nullable
          - `currentCompanyName` string, nullable
          - `currentCompanyLinkedinId` string, nullable
          - `updateDate` string, nullable: Last update timestamp (ISO 8601)
          - `location` PersonLocation
            - `city` string, nullable
            - `state` string, nullable
            - `country` string, nullable
            - `countryCode` string, nullable
            - `rawLocation` string, nullable
      - `isFullProfile` boolean, required: True when person is the full profile
      - `linkedinUrl` string: The matched profile URL, present when the task did not ask for the profile
      - `contactEmail` object: Present when the task asked for contact_email
        - `status` string, nullable, required: found, not_found, error or skipped
        - `value` string, nullable, required: The email found
        - `personalValue` string, nullable, required: With emailType any: the personal email, next to the professional one
      - `contactPhone` object: Present when the task asked for contact_phone
        - `status` string, nullable, required: found, not_found, error or skipped
        - `value` string, nullable, required: The phone number found
        - `type` string, nullable, required: The kind of phone number
    - `nextCursor` string, nullable, required: Where to read next; null once nothing more will come
    - `status` 'queued' | 'running' | 'paused' | 'completed' | 'cancelled' | 'failed', required: The task status when the page was read
  - `error` unknown, required
  - `quotas` V2Quotas, required
    - `creditsConsumed` number, required: Credits used for this request after pricing resolution
    - `workspace` object, required
      - `id` string, required: Workspace identifier
      - `credits` V2Credits, required
        - `total` number, required: Total credits in your plan
        - `used` number, required: Credits consumed so far
        - `left` number, required: Remaining credits
      - `hasUnlimitedCredits` boolean, required: Whether workspace credits are unlimited
      - `allowDailyOvercost` boolean, required: Whether the workspace may exceed its daily cap (Enterprise only)
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
    - `key` object, nullable, required
      - `id` string, required: API key identifier
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `creditLimits` object, required: Credit limits set on this API key. Each is null when the key has no such limit.
        - `daily` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `monthly` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `total` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
  - `metadata` V2Metadata, required
    - `requestId` string, required: Unique identifier for this request
    - `executionTimeMs` integer, required: Total execution time in milliseconds
    - `updatedAt` string: Last upstream update timestamp (ISO 8601). Present only when available.

## Other responses

- `400`: Invalid JSON body or endpoint-specific business validation
- `401`: Missing or invalid API key or OAuth access token
- `402`: No credits left. Purchase more to continue.
- `403`: Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)
- `404`: Data not found
- `409`: TASK_RESULTS_FORMAT_UNAVAILABLE: the task was stored before reading by page existed, its CSV stays available
- `422`: Schema or validation error, unresolved internal id, or disposable email domain
- `429`: TASK_ROWS_BUSY: too many pages read at once on the server. Or the rate limit, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait Retry-After (error.details.retryAfter) seconds, then retry.
- `451`: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.

---

[API](https://skmtc.dev/scrapin/apis/reverse-contact-api.md) - [All operations](https://skmtc.dev/scrapin/apis/reverse-contact-api/llms.txt) - [OpenAPI document](https://skmtc.dev/scrapin/apis/reverse-contact-api/revisions/7d02242af2a9?raw)
