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

# Pair a chip

> Creates a chip in your organization paired to the unit you specify.



## OpenAPI

````yaml /openapi.json post /v1/chips
openapi: 3.1.0
info:
  title: Endstate API
  version: v1
  description: Endstate developer API for chip verification and ownership workflows.
servers:
  - url: https://api2.endstate.io
    description: Production
security: []
paths:
  /v1/chips:
    post:
      tags:
        - Chips
      summary: Pair a chip
      description: Creates a chip in your organization paired to the unit you specify.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateChipRequest'
            example:
              unit_id: 22222222-2222-2222-2222-222222222222
              is_test: true
      responses:
        '201':
          description: Created chip.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateChipResponse'
              example:
                chip_id: ABCDEF0123
                is_test: true
                unit:
                  id: 22222222-2222-2222-2222-222222222222
                  external_id: unit-001
                  name: Example Unit
                  attributes: null
                  created_at: '2026-05-16T12:00:00.000Z'
                  collection:
                    id: 8e1a7f50-90ab-4cde-8012-3456789abcde
                    name: Example Collection
                    external_id: collection-001
                    contract:
                      address: '0x1111111111111111111111111111111111111111'
                      chain_id: 84532
                      status: active
                    token:
                      status: pending
                      serial: null
                scan_count: 0
                created_at: '2026-05-16T12:00:00.000Z'
      security:
        - ApiKeyBearer: []
components:
  schemas:
    CreateChipRequest:
      anyOf:
        - type: object
          properties:
            unit_id:
              type: string
              format: uuid
              description: Unit (resource) the chip is paired to.
              example: 11111111-1111-1111-1111-111111111111
            is_test:
              type: boolean
              enum:
                - true
          required:
            - unit_id
            - is_test
          additionalProperties: false
        - type: object
          properties:
            unit_id:
              type: string
              format: uuid
              description: Unit (resource) the chip is paired to.
              example: 11111111-1111-1111-1111-111111111111
            chip_id:
              type: string
              pattern: ^[0-9A-F]{10}$
              description: Chip identifier from the tap URL.
              example: ABCDEF0123
            e:
              type: string
              pattern: ^[0-9A-F]{32}$
              description: PICC e-value from the tap URL.
              example: C78566198547116F3A715DC1C62AF96F
            is_test:
              type: boolean
              enum:
                - false
          required:
            - unit_id
            - chip_id
            - e
          additionalProperties: false
      description: >-
        Request to pair a chip to a unit. Pass `is_test: true` for a test chip,
        or `chip_id` + `e` (from the tap URL) for an encoded chip. Always
        requires `unit_id`.
    CreateChipResponse:
      type: object
      properties:
        chip_id:
          type: string
          pattern: ^[0-9A-F]{10}$
          description: Chip identifier from the tap URL.
          example: ABCDEF0123
        is_test:
          type: boolean
        unit:
          $ref: '#/components/schemas/ChipUnitSnapshot'
        scan_count:
          type: integer
          minimum: 0
        created_at:
          type: string
          format: date-time
      required:
        - chip_id
        - is_test
        - unit
        - scan_count
        - created_at
    ChipUnitSnapshot:
      type: object
      properties:
        id:
          type: string
          format: uuid
        external_id:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
        attributes:
          type:
            - object
            - 'null'
          additionalProperties: {}
        created_at:
          type: string
          format: date-time
        redirect_url:
          type:
            - string
            - 'null'
          format: uri
          description: >-
            Tap redirect URL for this unit; takes precedence over
            product/collection/org defaults.
          example: https://brand.example/p
        collection:
          allOf:
            - $ref: '#/components/schemas/CollectionMembership'
            - description: >-
                The unit's collection. Null only for units created before
                collections existed.
      required:
        - id
        - external_id
        - name
        - attributes
        - created_at
        - redirect_url
        - collection
      description: >-
        Snapshot of the paired unit, including its collection and issuance
        status. Poll the unit (GET /v1/units/{unit_id}) until
        `collection.token.status` is `active`. Issuance has no failure status on
        this surface — if the unit stays `pending` well beyond a few minutes,
        stop polling and contact support.
    CollectionMembership:
      type:
        - object
        - 'null'
      properties:
        id:
          type: string
          format: uuid
        name:
          type:
            - string
            - 'null'
        external_id:
          type:
            - string
            - 'null'
        contract:
          type: object
          properties:
            address:
              type: string
              description: Unique address identifying the collection.
              example: '0x1111111111111111111111111111111111111111'
            chain_id:
              type: integer
              example: 84532
            status:
              type: string
              enum:
                - deploying
                - active
                - failed
              description: >-
                Collection lifecycle status. `deploying` while the collection is
                being provisioned; `active` once it is ready to use.
              example: active
          required:
            - address
            - chain_id
            - status
        token:
          $ref: '#/components/schemas/UnitToken'
      required:
        - id
        - name
        - external_id
        - contract
        - token
      description: >-
        The unit's collection and issuance status. Null only for units created
        before collections existed.
    UnitToken:
      type: object
      properties:
        status:
          type: string
          enum:
            - pending
            - active
          description: >-
            Issuance state of this unit within the collection. `pending` until
            the unit is issued; `active` once issued. There is no failure
            status: a unit whose issuance cannot complete stays `pending` — if a
            unit remains `pending` well beyond a few minutes, stop polling and
            contact support.
          example: pending
        serial:
          type:
            - integer
            - 'null'
          description: >-
            Collection-scoped serial number. Assigned when the unit becomes
            `active`; null until then.
          example: 5
      required:
        - status
        - serial
  securitySchemes:
    ApiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: end_sk
      description: >-
        Use `Authorization: Bearer end_sk_*` for partner API keys (e.g.
        `end_sk_AbCd_example_api_key`).

````