> ## 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.

# Verify a chip and issue a session token

> Verify a chip tap and return chip, unit, and session details for follow-up flows.



## OpenAPI

````yaml /openapi.json post /v1/chips/{chip_id}
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/{chip_id}:
    post:
      tags:
        - Chips
      summary: Verify a chip and issue a session token
      description: >-
        Verify a chip tap and return chip, unit, and session details for
        follow-up flows.
      parameters:
        - schema:
            type: string
            pattern: ^[0-9A-Fa-f]{10}$
            description: Chip identifier from the tap URL.
            example: ABCDEF0123
          required: true
          name: chip_id
          in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyChipRequest'
            example:
              e: C78566198547116F3A715DC1C62AF96F
              dry_run: false
      responses:
        '200':
          description: Chip verified; session token issued (or null on dry_run).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyChipResponse'
              example:
                id: 12345678-1234-4567-8901-234567890abc
                session_token:
                  token: end_sess_AbCd_example_token
                  expires_at: '2026-05-12T12:44:56.000Z'
                  scope:
                    chip_id: ABCDEF0123
                    unit_id: 7f8a3c10-1111-4111-8111-111111111111
                    organization_id: 99887766-aabb-4ccd-8eef-001122334455
                chip:
                  chip_id: ABCDEF0123
                  scan_count: 47
                unit:
                  id: 7f8a3c10-1111-4111-8111-111111111111
                  external_id: unit-001
                  name: Example Unit
                  attributes:
                    custom_attribute: value
                  collection:
                    id: 8e1a7f50-90ab-4cde-8012-3456789abcde
                    name: Example Collection
                    external_id: collection-001
                    contract:
                      address: '0x1111111111111111111111111111111111111111'
                      chain_id: 84532
                      status: active
                    token:
                      status: active
                      serial: 5
                redirect_url: https://domain.com/verify/ABCDEF0123
                dry_run: false
      security:
        - ApiKeyBearer: []
components:
  schemas:
    VerifyChipRequest:
      type: object
      properties:
        e:
          type: string
          pattern: ^[0-9A-Fa-f]{32}$
          example: C78566198547116F3A715DC1C62AF96F
        dry_run:
          type: boolean
          default: false
        ttl:
          type:
            - integer
            - 'null'
          minimum: 60
          maximum: 3600
          description: >-
            Session-token TTL override in seconds. Must be between 60 and 3600
            inclusive; out-of-range values return 400 validation.failed.
          example: 600
      required:
        - e
      example:
        e: C78566198547116F3A715DC1C62AF96F
        dry_run: false
    VerifyChipResponse:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          format: uuid
          description: Scan identifier. null when dry_run=true (no Scan record created).
          example: 12345678-1234-4567-8901-234567890abc
        session_token:
          $ref: '#/components/schemas/VerifyChipSessionToken'
        chip:
          type: object
          properties:
            chip_id:
              type: string
              pattern: ^[0-9A-Fa-f]{10}$
              example: ABCDEF0123
            scan_count:
              type: integer
              minimum: 0
          required:
            - chip_id
            - scan_count
        unit:
          type: object
          properties:
            id:
              type: string
              format: uuid
            external_id:
              type:
                - string
                - 'null'
            name:
              type:
                - string
                - 'null'
            attributes:
              type:
                - object
                - 'null'
              additionalProperties: {}
            collection:
              $ref: '#/components/schemas/CollectionMembership'
          required:
            - id
            - external_id
            - name
            - attributes
            - collection
        redirect_url:
          type:
            - string
            - 'null'
          format: uri
          description: >-
            Canonical verify URL on the org's verified domain. null when no
            verified domain exists.
          example: https://domain.com/verify/ABCDEF0123
        dry_run:
          type: boolean
      required:
        - id
        - session_token
        - chip
        - unit
        - redirect_url
        - dry_run
      example:
        id: 12345678-1234-4567-8901-234567890abc
        session_token:
          token: end_sess_AbCd_example_token
          expires_at: '2026-05-12T12:44:56.000Z'
          scope:
            chip_id: ABCDEF0123
            unit_id: 7f8a3c10-1111-4111-8111-111111111111
            organization_id: 99887766-aabb-4ccd-8eef-001122334455
        chip:
          chip_id: ABCDEF0123
          scan_count: 47
        unit:
          id: 7f8a3c10-1111-4111-8111-111111111111
          external_id: unit-001
          name: Example Unit
          attributes:
            custom_attribute: value
          collection:
            id: 8e1a7f50-90ab-4cde-8012-3456789abcde
            name: Example Collection
            external_id: collection-001
            contract:
              address: '0x1111111111111111111111111111111111111111'
              chain_id: 84532
              status: active
            token:
              status: active
              serial: 5
        redirect_url: https://domain.com/verify/ABCDEF0123
        dry_run: false
    VerifyChipSessionToken:
      type:
        - object
        - 'null'
      properties:
        token:
          type: string
          example: end_sess_AbCd_example_token
        expires_at:
          type: string
          format: date-time
          example: '2026-05-12T12:44:56.000Z'
        scope:
          type: object
          properties:
            chip_id:
              type: string
              pattern: ^[0-9A-Fa-f]{10}$
              example: ABCDEF0123
            unit_id:
              type: string
              format: uuid
              example: 7f8a3c10-1111-4111-8111-111111111111
            organization_id:
              type: string
              format: uuid
              example: 99887766-aabb-4ccd-8eef-001122334455
          required:
            - chip_id
            - unit_id
            - organization_id
      required:
        - token
        - expires_at
        - scope
      description: >-
        Opaque session token scoped to (orgId, chipId, apiKeyId, scanId). null
        on dry_run.
    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`).

````