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

# Fetch Descriptors (v2)

> List every descriptor on your account as a flat, filterable record set: one row per descriptor with its program (`ethoca`, `cdrn`, `rdr`, `amex`, `discover`; `null` for legacy types not tied to a program), status, descriptor name or BIN/CAID, owning merchant id, and timestamps. Filter with `program` and/or `status` (case-insensitive; an unknown value returns a 400 listing the valid ones) and paginate with `page`/`per`. Use `GET /api/enrollment_status` for the per-program roll-up instead; record ids feed `POST /api/unenroll`.

Returns your descriptors as a flat, filterable list — one record per descriptor with its program, status, name or BIN/CAID, and owning merchant id. Filter with the `program` and `status` query parameters; the response is **paginated** using `page` and `per`. For the per-program roll-up (`none` / `pending` / `enrolled`), use [`GET /api/enrollment_status`](/api-reference/enrollment/enrollment-status) instead. Record ids feed [`POST /api/unenroll`](/api-reference/enrollment/unenroll-merchant).


## OpenAPI

````yaml get /api/v2/descriptors
openapi: 3.0.1
info:
  title: Chargeblast API
  version: 0.1.0
servers:
  - url: https://api.chargeblast.com
security: []
tags:
  - name: Credit Requests
  - name: Sync Data
  - name: Alerts
  - name: Enrollment
paths:
  /api/v2/descriptors:
    get:
      tags:
        - Enrollment
      summary: Fetch Descriptors (v2)
      description: >-
        List every descriptor on your account as a flat, filterable record set:
        one row per descriptor with its program (`ethoca`, `cdrn`, `rdr`,
        `amex`, `discover`; `null` for legacy types not tied to a program),
        status, descriptor name or BIN/CAID, owning merchant id, and timestamps.
        Filter with `program` and/or `status` (case-insensitive; an unknown
        value returns a 400 listing the valid ones) and paginate with
        `page`/`per`. Use `GET /api/enrollment_status` for the per-program
        roll-up instead; record ids feed `POST /api/unenroll`.
      operationId: descriptors-v2
      parameters:
        - name: X-API-Key
          required: true
          in: header
          schema:
            type: string
          description: Your API key. Sent in the `X-API-Key` header.
        - name: program
          required: false
          in: query
          schema:
            type: string
            enum:
              - ethoca
              - cdrn
              - rdr
              - amex
              - discover
          description: Filter by program (case-insensitive).
        - name: status
          required: false
          in: query
          schema:
            $ref: '#/components/schemas/PayshieldDescriptorDescriptorStatus'
          description: Filter by descriptor status (case-insensitive).
        - name: page
          required: false
          in: query
          schema:
            type: integer
            default: 1
          description: The page to request. Default 1.
        - name: per
          required: false
          in: query
          schema:
            type: integer
            default: 10
            maximum: 1000
          description: How many records per page. Default 10, max 1000.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2DescriptorsResponse'
        '400':
          description: >-
            Unknown `program` or `status` filter value; the error lists the
            valid ones.
        '401':
          description: Missing or invalid API key.
components:
  schemas:
    PayshieldDescriptorDescriptorStatus:
      type: string
      enum:
        - Pending
        - Enrolled
        - Disabled
        - Surpressed
        - Processing
        - Rejected
        - InReview
        - PendingRemoval
      description: >-
        Descriptor lifecycle state. `PendingRemoval` means an unenroll was
        requested for a previously `Enrolled` descriptor; it stays live until
        provider de-registration is confirmed, then the record is deleted.
    V2DescriptorsResponse:
      type: object
      properties:
        descriptors:
          type: array
          items:
            $ref: '#/components/schemas/DescriptorRecord'
        page:
          type: integer
        per:
          type: integer
        total:
          type: integer
      required:
        - descriptors
        - page
        - per
        - total
    DescriptorRecord:
      type: object
      properties:
        id:
          nullable: true
          type: string
        merchantId:
          nullable: true
          type: string
          description: >-
            Owning merchant (retailer) id, as returned by `GET
            /api/v2/merchants`.
        program:
          type: string
          enum:
            - ethoca
            - cdrn
            - rdr
            - amex
            - discover
          nullable: true
          description: >-
            The alert program this descriptor belongs to. `null` for legacy
            descriptor types (JCB, TC40, …) not tied to a program.
        status:
          $ref: '#/components/schemas/PayshieldDescriptorDescriptorStatus'
        descriptorName:
          nullable: true
          type: string
          description: >-
            The enrolled descriptor string. `null` for RDR records, which are
            keyed by BIN/CAID.
        bin:
          nullable: true
          type: string
          description: RDR only.
        caid:
          nullable: true
          type: string
          description: RDR only.
        createdAt:
          format: date-time
          type: string
          nullable: true
        updatedAt:
          format: date-time
          type: string
          nullable: true
      required:
        - status

````