> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revenuebase.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# View a free contact sample

> Check a sample of matching people before retrieving their contact details.

## Credits and plans

PAYG is Pay-as-you-go. AYCE is All-you-can-eat.

| Usage or limit | PAYG | AYCE |
| - | - | - |
| Masked sample, including SmartSearch filters | **Free**<br />0 credits | **Included**<br />0 credits |
| Rows per request | Up to 100 | Up to 100 |
| Sample rows per API key per UTC day | 100,000 | 100,000 |

AYCE includes [unlimited contact retrieval](/api-reference/start-export#credits-and-plans).
This endpoint's masked-sample limits still apply; use
[Preview](/api-reference/preview) or [Export](/api-reference/start-export)
to retrieve full records on that plan.

Use View to check whether your filter finds the right people before
you retrieve contact details. Names, roles, and company fields let you
assess relevance. Email and mobile values are replaced by availability
booleans.

## When to use View

Call [Count](/api-reference/count) first to size the audience, then
reuse its filter here. You can refine and inspect the sample without
paying for contact details.

| You need | Use |
| - | - |
| A free sample with email/mobile masked | View |
| Full contact rows returned immediately | [Preview](/api-reference/preview), which is charged on PAYG |
| A downloadable file with a row cap | [Export](/api-reference/start-export) |

## Example: inspect two matching contacts

Set your API key as `REVENUEBASE_API_KEY`. This uses the same audience
as the Count example and requests availability for email and mobile.

```bash
curl --request POST 'https://api.revenuebase.ai/v2/contact/view' \
  --header "X-Key: $REVENUEBASE_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "filter": {
      "type": "group",
      "op": "AND",
      "children": [
        {
          "type": "condition",
          "column": "COUNTRY_NAME_PER",
          "operator": "eq",
          "value": "United States"
        },
        {
          "type": "condition",
          "column": "JOB_LEVEL_PER",
          "operator": "eq",
          "value": "VP"
        }
      ]
    },
    "columns": [
      "RBID_PAO",
      "FULL_NAME_PER",
      "JOB_TITLE_PER",
      "COMPANY_NAME_ORG",
      "EMAIL_ADDRESS_PER",
      "CELLPHONE_PER"
    ],
    "limit": 2
  }'
```

Response captured from the local test API on October 13, 2026. Results can change as the dataset or account changes.

```json
{
  "rows": [
    {
      "RBID_PAO": "rb-pab23456t-rb-oadkxzpcq",
      "FULL_NAME_PER": "Matthew Tobin",
      "JOB_TITLE_PER": "Senior Vice President Business Development",
      "COMPANY_NAME_ORG": "Ecapital Corp",
      "hasEmail": true,
      "hasMobile": false
    },
    {
      "RBID_PAO": "rb-pab2346sr-rb-oacopeifk",
      "FULL_NAME_PER": "Katherine Collins",
      "JOB_TITLE_PER": "AVP of Claim Operations",
      "COMPANY_NAME_ORG": "Travelers",
      "hasEmail": true,
      "hasMobile": true
    }
  ],
  "columns": [
    "RBID_PAO",
    "FULL_NAME_PER",
    "JOB_TITLE_PER",
    "COMPANY_NAME_ORG",
    "hasEmail",
    "hasMobile"
  ],
  "columnLabels": {
    "RBID_PAO": "Rbid Person And Organization",
    "FULL_NAME_PER": "Person Full Name",
    "JOB_TITLE_PER": "Job Title",
    "COMPANY_NAME_ORG": "Company Name",
    "hasEmail": "hasEmail",
    "hasMobile": "hasMobile"
  },
  "rowCount": 2,
  "limit": 2
}
```

| Field | What it means |
| - | - |
| `rows` | The sample records. Email/mobile values are never revealed by this endpoint. |
| `hasEmail`, `hasMobile` | Whether the corresponding contact detail is available; these are booleans, not contact details. |
| `RBID_PAO` | The stable person-at-company identifier, included even if omitted from `columns`. Use it as a `personIds` value in Enrich to retrieve a chosen row. |
| `columns`, `columnLabels` | Returned field names and display labels. Masked fields use `hasEmail` / `hasMobile`. |
| `rowCount`, `limit` | Rows returned and the applied sample limit. These are not the full audience total. |

## Limits and errors

* Up to **100 rows per call**. Higher limits are clamped to 100; omit
  `limit` to use that cap.
* A **100,000-row daily budget per API key**, resetting at UTC midnight.
  Read `X-FreePreview-Remaining` to track it. Repeated samples count
  toward this row budget even though they cost no credits.
* `429 FREE_PREVIEW_CAP_REACHED` means the daily budget is exhausted.
  Wait for the reset. Other `429` responses use the ordinary
  [request rate limit](/api-reference/v2/rate-limits).
* `422` means the filter or requested column needs correction.

An empty audience returns an empty sample. View has no pagination
cursor; repeating it does not fetch the next page. Use `includeScores`
when you want similarity information for a SmartSearch sample.

## Next: choose records and estimate the cost

To retrieve selected rows, pass their `RBID_PAO` values as `personIds`
to [Enrich](/api-reference/enrich), with an explicit `reveal` choice.
To download a filtered list, reuse the filter with
[Estimate](/api-reference/estimate-export), set `maxRows`, and choose
whether to buy email, mobile, both, or neither.


## OpenAPI

````yaml /api-reference/v2/contact-openapi.json post /view
openapi: 3.1.0
info:
  title: RevenueBase Velocity API
  version: 0.1.0
servers:
  - url: https://api.revenuebase.ai/v2/contact
    description: Production
security: []
paths:
  /view:
    post:
      summary: View
      description: >-
        Inspect a free masked sample of matching contact rows. Email and mobile
        values are replaced by hasEmail and hasMobile booleans; SmartSearch adds
        no credit charge. The per-call cap is 100 rows and the daily free-row
        budget is 100,000 per API key, resetting at UTC midnight. Reuse the same
        filter for export estimation. View is distinct from paid Preview.
      operationId: view_v1_view_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ViewRequest'
            example:
              filter:
                type: group
                op: AND
                children:
                  - type: condition
                    column: COUNTRY_NAME_PER
                    operator: eq
                    value: United States
                  - type: condition
                    column: JOB_LEVEL_PER
                    operator: eq
                    value: VP
              columns:
                - RBID_PAO
                - FULL_NAME_PER
                - JOB_TITLE_PER
                - COMPANY_NAME_ORG
                - EMAIL_ADDRESS_PER
                - CELLPHONE_PER
              limit: 2
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response View V1 View Post
              example:
                rows:
                  - RBID_PAO: rb-pab23456t-rb-oadkxzpcq
                    FULL_NAME_PER: Matthew Tobin
                    JOB_TITLE_PER: Senior Vice President Business Development
                    COMPANY_NAME_ORG: Ecapital Corp
                    hasEmail: true
                    hasMobile: false
                  - RBID_PAO: rb-pab2346sr-rb-oacopeifk
                    FULL_NAME_PER: Katherine Collins
                    JOB_TITLE_PER: AVP of Claim Operations
                    COMPANY_NAME_ORG: Travelers
                    hasEmail: true
                    hasMobile: true
                columns:
                  - RBID_PAO
                  - FULL_NAME_PER
                  - JOB_TITLE_PER
                  - COMPANY_NAME_ORG
                  - hasEmail
                  - hasMobile
                columnLabels:
                  RBID_PAO: Rbid Person And Organization
                  FULL_NAME_PER: Person Full Name
                  JOB_TITLE_PER: Job Title
                  COMPANY_NAME_ORG: Company Name
                  hasEmail: hasEmail
                  hasMobile: hasMobile
                rowCount: 2
                limit: 2
          headers:
            X-FreePreview-Remaining:
              description: Rows remaining in the API key's daily free sample budget.
              schema:
                type: integer
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
components:
  schemas:
    ViewRequest:
      properties:
        filter:
          anyOf:
            - $ref: '#/components/schemas/GroupNode'
            - type: 'null'
          description: >-
            Reuse the audience filter from Count. Omitted/null selects the
            entire dataset.
        columns:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Columns
          description: >-
            Fields to inspect. Email/mobile fields are masked. RBID_PAO is
            always included as the stable row identifier.
        limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Limit
          description: >-
            Maximum sample rows. Clamped to 1–100; omitted/null uses 100. This
            is a sample size, not an audience total or pagination size.
        includeScores:
          type: boolean
          title: Includescores
          default: false
          description: Include similarity scores when using semantic/lookalike filters.
      type: object
      title: ViewRequest
      description: >-
        Free masked contact sample. Requested email/mobile fields become
        hasEmail/hasMobile booleans. Use paid retrieval to reveal values.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    GroupNode:
      properties:
        type:
          type: string
          const: group
          title: Type
        op:
          type: string
          enum:
            - AND
            - OR
          title: Op
          default: AND
        children:
          items:
            oneOf:
              - $ref: '#/components/schemas/ConditionNode'
              - $ref: '#/components/schemas/GroupNode'
              - $ref: '#/components/schemas/SemanticNode'
              - $ref: '#/components/schemas/LookalikeNode'
            discriminator:
              propertyName: type
              mapping:
                condition: '#/components/schemas/ConditionNode'
                group: '#/components/schemas/GroupNode'
                lookalike: '#/components/schemas/LookalikeNode'
                semantic: '#/components/schemas/SemanticNode'
          type: array
          title: Children
        joinWithPrevious:
          anyOf:
            - type: string
              enum:
                - AND
                - OR
            - type: 'null'
          title: Joinwithprevious
        negate:
          type: boolean
          title: Negate
          default: false
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
      type: object
      required:
        - type
      title: GroupNode
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    ConditionNode:
      properties:
        type:
          type: string
          const: condition
          title: Type
        column:
          type: string
          title: Column
          default: ''
        operator:
          type: string
          enum:
            - eq
            - ne
            - gt
            - gte
            - lt
            - lte
            - contains
            - startsWith
            - endsWith
            - isNull
            - isNotNull
            - in
            - notIn
            - between
          title: Operator
        value:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
            - type: 'null'
          title: Value
        value2:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
            - type: 'null'
          title: Value2
        valueList:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Valuelist
        joinWithPrevious:
          anyOf:
            - type: string
              enum:
                - AND
                - OR
            - type: 'null'
          title: Joinwithprevious
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
      type: object
      required:
        - type
        - operator
      title: ConditionNode
    SemanticNode:
      properties:
        type:
          type: string
          const: semantic
          title: Type
        'on':
          type: string
          enum:
            - company
            - title
          title: 'On'
        text:
          type: string
          title: Text
          default: ''
        maxDistance:
          anyOf:
            - type: number
            - type: 'null'
          title: Maxdistance
        match:
          anyOf:
            - type: string
              enum:
                - exact
                - similar
                - related
                - broad
                - same
            - type: 'null'
          title: Match
        joinWithPrevious:
          anyOf:
            - type: string
              enum:
                - AND
                - OR
            - type: 'null'
          title: Joinwithprevious
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
        negate:
          type: boolean
          title: Negate
          default: false
      type: object
      required:
        - type
        - 'on'
      title: SemanticNode
    LookalikeNode:
      properties:
        type:
          type: string
          const: lookalike
          title: Type
        rbidOrg:
          type: string
          title: Rbidorg
          default: ''
        domain:
          type: string
          title: Domain
          default: ''
        maxDistance:
          anyOf:
            - type: number
            - type: 'null'
          title: Maxdistance
        match:
          anyOf:
            - type: string
              enum:
                - exact
                - similar
                - related
                - broad
                - same
            - type: 'null'
          title: Match
        joinWithPrevious:
          anyOf:
            - type: string
              enum:
                - AND
                - OR
            - type: 'null'
          title: Joinwithprevious
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
        negate:
          type: boolean
          title: Negate
          default: false
      type: object
      required:
        - type
      title: LookalikeNode
      description: |-
        Match people at companies whose NAME-FREE description vector is near the
        given company's vector (velocity.company_vec512_lookalike).
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-Key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.