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

# Issue blind tokens

> Blind-signs up to 20 blinded messages (RSABSSA-SHA384-PSS-Randomized, RFC 9474) within the wallet's (or attestation code's) daily quota.



## OpenAPI

````yaml /openapi.json post /v1/tokens/issue
openapi: 3.1.0
info:
  title: Arkognito relayer API
  version: arkognito-relayer/1
  description: >-
    HTTP API of an Arkognito relayer and, when it runs with ISSUER=on, the
    blind-token issuer. All bodies are JSON unless noted. CORS is open. Relayers
    do not log request IPs or bodies.
  license:
    name: MIT
    url: https://github.com/soumyacodes007/Arkognito/blob/main/LICENSE
servers:
  - url: https://relay-1.example.com
    description: Your relayer
  - url: http://localhost:8787
    description: Local relayer
security: []
tags:
  - name: Relayer
    description: Submit records and follow their status.
  - name: Issuer
    description: Daily issuer keys and blind token issuance (relayers with ISSUER=on).
  - name: Operations
    description: Health and Oblivious HTTP.
paths:
  /v1/tokens/issue:
    post:
      tags:
        - Issuer
      summary: Issue blind tokens
      description: >-
        Blind-signs up to 20 blinded messages (RSABSSA-SHA384-PSS-Randomized,
        RFC 9474) within the wallet's (or attestation code's) daily quota.
      operationId: issueTokens
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IssueRequest'
      responses:
        '200':
          description: Blind signatures
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueResponse'
        '403':
          description: >-
            Refused: epoch not today, 0 or more than 20 tokens, stale timestamp,
            wrong wallet signature, missing or used attestation code, or quota
            exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    IssueRequest:
      type: object
      required:
        - app
        - epoch
        - wallet
        - blinded
        - ts
        - walletSignature
      properties:
        app:
          type: string
        epoch:
          type: integer
          description: Today's UTC day number.
        wallet:
          $ref: '#/components/schemas/Address'
        blinded:
          type: array
          minItems: 1
          maxItems: 20
          items:
            type: string
            description: Blinded message, base64.
        ts:
          type: integer
          description: Unix milliseconds; must be within 5 minutes of the issuer's clock.
        walletSignature:
          $ref: '#/components/schemas/Hex'
          description: >-
            personal_sign by wallet over the issuance message (see the protocol
            reference).
        attestation:
          type: string
          description: One-time attestation code, when the issuer requires codes.
    IssueResponse:
      type: object
      required:
        - blindSignatures
        - remaining
      properties:
        blindSignatures:
          type: array
          items:
            type: string
            description: Blind signature, base64.
        remaining:
          type: integer
          description: Tokens left in today's quota.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
    Address:
      type: string
      pattern: ^0x[0-9a-fA-F]{40}$
      examples:
        - '0x1111111111111111111111111111111111111111'
    Hex:
      type: string
      pattern: ^0x[0-9a-fA-F]*$

````

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