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

# Mint a GIAI from one of the organization's prefixes

> Self-service GIAI (AI 8004) minting: builds an owner-assigned individual-asset identifier from `company_prefix_id` (which must belong to the caller's organization) + the supplied asset reference, and creates or enriches the backing asset record. Idempotent on the resulting GIAI. Any org member with contribute access may mint (`organization.contribute_organization`).



## OpenAPI

````yaml /openapi/openapi-dashboard.json post /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}/giai
openapi: 3.1.0
info:
  title: Brand Dashboard API
  version: 1.0.0
  description: >
    Endpoints powering the brand dashboard: catalogue completeness, product
    images, nutrition and document management, brand analytics, data export, and
    GS1 Company Prefix management + self-service GIAI minting. Every endpoint is
    scoped to an organization you are a member of — pass an org-scoped API key,
    or authenticate with a session, and you reach exactly the organizations your
    account belongs to. This is the same surface the Closient dashboard UI
    itself uses, so anything you can do in the dashboard you can do here.


    ## Authentication


    All endpoints require an API key passed via the `X-API-Key` HTTP header,
    unless otherwise noted.


    ```

    X-API-Key: csb_<body>_<checksum>

    ```


    Generate API keys in **Settings > API Keys** in your dashboard, or via the
    Account API.

    Session-based (cookie) authentication is also accepted for browser-based
    access.


    ## Rate Limits


    | Tier        | Requests / minute | Requests / day |

    |-------------|-------------------|----------------|

    | Default     | 300               | 10,000         |

    | Custom      | Contact us        | Contact us     |


    Rate-limit headers are included on every response so callers can
    self-throttle without

    hitting our 429s ("informed governor"):


    - `RateLimit-Policy` — every active window, e.g. `300;w=60, 10000;w=86400`

    - `RateLimit-Limit` — quota for the **most-restrictive** currently-active
    window

    - `RateLimit-Remaining` — requests left in that window

    - `RateLimit-Reset` — seconds until that window resets (relative; clock-skew
    safe)


    Legacy `X-RateLimit-*` aliases are also emitted for back-compat.
    `X-RateLimit-Reset`

    keeps the absolute Unix-timestamp shape to avoid breaking existing
    consumers.


    When rate-limited, you receive `429 Too Many Requests` with a
    `retry_after_seconds` field

    in the error envelope and a `Retry-After` header.


    ## Pagination


    List endpoints return paginated results in this envelope:


    ```json

    {
      "data": [...],
      "pagination": {
        "page": 1,
        "page_size": 25,
        "total_count": 342,
        "total_pages": 14,
        "has_next": true,
        "has_previous": false
      }
    }

    ```


    Use `?page=2&page_size=50` query parameters. Maximum page size is 100.


    ## Error Responses


    All errors conform to [RFC 9457 Problem
    Details](https://www.rfc-editor.org/rfc/rfc9457)

    with `Content-Type: application/problem+json`:


    ```json

    {
      "type": "https://closient.com/docs/errors/not_found",
      "title": "Not Found",
      "status": 404,
      "detail": "The requested resource was not found.",
      "error_code": "not_found",
      "retryable": false,
      "timestamp": "2026-03-31T12:00:00+00:00"
    }

    ```


    Common error codes: `unauthorized` (401), `forbidden` (403), `not_found`
    (404),

    `validation_error` (422), `rate_limited` (429), `internal_error` (500).
  termsOfService: https://www.closient.com/terms/
servers:
  - url: https://www.closient.com
security: []
externalDocs:
  description: Closient Documentation
  url: https://docs.closient.com
paths:
  /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}/giai:
    post:
      tags:
        - GS1 Company Prefixes
      summary: Mint a GIAI from one of the organization's prefixes
      description: >-
        Self-service GIAI (AI 8004) minting: builds an owner-assigned
        individual-asset identifier from `company_prefix_id` (which must belong
        to the caller's organization) + the supplied asset reference, and
        creates or enriches the backing asset record. Idempotent on the
        resulting GIAI. Any org member with contribute access may mint
        (`organization.contribute_organization`).
      operationId: apps_dashboard_api_company_prefixes_mint_giai
      parameters:
        - in: path
          name: organization_id
          schema:
            description: UUID of the organization.
            format: shortuuid
            maxLength: 22
            minLength: 22
            pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
            title: Organization Id
            type: string
          required: true
          description: UUID of the organization.
        - in: path
          name: company_prefix_id
          schema:
            description: Id of the GS1 Company Prefix.
            format: shortuuid
            maxLength: 22
            minLength: 22
            pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
            title: Company Prefix Id
            type: string
          required: true
          description: Id of the GS1 Company Prefix.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MintGiaiIn'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MintedAssetOut'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '405':
          description: Method Not Allowed
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '422':
          description: Unprocessable Content
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '429':
          description: Too Many Requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
      security:
        - APIKeyHeaderAuth: []
        - OAuthTokenAuth: []
        - CookieGatedSessionAuth: []
components:
  schemas:
    MintGiaiIn:
      description: >-
        Request body to self-service mint a GIAI from one of the org's prefixes.


        Which prefix to mint from is a path parameter (``company_prefix_id`` on
        the

        endpoint itself), not a body field — it names the resource being acted
        on.
      examples:
        - asset_category: vehicle
          asset_reference: FORKLIFT014
          name: 'Forklift #14'
      properties:
        asset_reference:
          description: >-
            Individual asset reference (CSET-82). Combined with the prefix, at
            most 30 characters total.
          maxLength: 30
          minLength: 1
          title: Asset Reference
          type: string
        name:
          description: 'Human-readable name (e.g. ''Forklift #14'').'
          maxLength: 255
          minLength: 1
          title: Name
          type: string
        description:
          default: ''
          description: Consumer-facing description shown on the hosted page.
          title: Description
          type: string
        asset_category:
          default: ''
          description: Free-form category (e.g. 'vehicle', 'IT equipment', 'tool').
          maxLength: 120
          title: Asset Category
          type: string
        sku:
          default: ''
          description: Manufacturer/vendor SKU or model number. Not a GS1 identifier.
          maxLength: 120
          title: Sku
          type: string
        serial_number:
          default: ''
          description: Manufacturer's serial number, if known.
          maxLength: 120
          title: Serial Number
          type: string
        product_url:
          default: ''
          description: Manufacturer's page for this item, linked from the hosted page.
          title: Product Url
          type: string
      required:
        - asset_reference
        - name
      title: MintGiaiIn
      type: object
    MintedAssetOut:
      description: The individual asset (GIAI) that resulted from a mint request.
      examples:
        - created: true
          giai: 0614141FORKLIFT014
          hosted_page_url: /ia/0614141FORKLIFT014/
          is_conformant: true
          name: 'Forklift #14'
      properties:
        giai:
          description: The minted Global Individual Asset Identifier (AI 8004).
          title: Giai
          type: string
        name:
          description: Human-readable name of the asset.
          title: Name
          type: string
        created:
          description: >-
            True if this call created a new asset; false if it enriched an
            existing one (idempotent).
          title: Created
          type: boolean
        is_conformant:
          description: Whether this GIAI may be presented as GS1-conformant.
          title: Is Conformant
          type: boolean
        hosted_page_url:
          description: Path to the asset's public hosted page.
          title: Hosted Page Url
          type: string
      required:
        - giai
        - name
        - created
        - is_conformant
        - hosted_page_url
      title: MintedAssetOut
      type: object
    ErrorOut:
      description: |-
        RFC 9457 Problem Details response.

        All API errors are returned in this format with Content-Type:
        application/problem+json.
      examples:
        - detail: The requested resource was not found.
          error_code: not_found
          retryable: false
          status: 404
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Not Found
          type: https://closient.com/docs/errors/not_found
        - detail: Validation error.
          details:
            - loc:
                - body
                - name
              msg: Field required
              type: missing
          error_code: validation_error
          retryable: false
          status: 422
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Validation Error
          type: https://closient.com/docs/errors/validation_error
        - detail: Rate limit exceeded. Please try again later.
          error_code: rate_limited
          retry_after: 31
          retryable: true
          status: 429
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Rate Limited
          type: https://closient.com/docs/errors/rate_limited
      properties:
        type:
          description: URI reference identifying the error type.
          title: Type
          type: string
        title:
          description: Short human-readable summary of the error.
          title: Title
          type: string
        status:
          description: HTTP status code.
          title: Status
          type: integer
        detail:
          description: Human-readable explanation of this specific occurrence.
          title: Detail
          type: string
        error_code:
          description: Machine-readable error code (e.g. not_found, unauthorized).
          title: Error Code
          type: string
        retryable:
          default: false
          description: Whether retrying the same request can succeed.
          title: Retryable
          type: boolean
        timestamp:
          description: ISO 8601 timestamp of when the error occurred.
          title: Timestamp
          type: string
        retry_after:
          anyOf:
            - type: integer
            - type: 'null'
          description: Seconds to wait before retrying (when applicable).
          title: Retry After
        owner_action_required:
          anyOf:
            - type: boolean
            - type: 'null'
          description: Whether the error requires account owner intervention.
          title: Owner Action Required
        details:
          description: Additional context (validation errors, etc.).
          title: Details
      required:
        - type
        - title
        - status
        - detail
        - error_code
        - timestamp
      title: ErrorOut
      type: object
  securitySchemes:
    APIKeyHeaderAuth:
      type: apiKey
      in: header
      name: X-API-Key
    OAuthTokenAuth:
      type: http
      scheme: bearer
    CookieGatedSessionAuth:
      type: apiKey
      in: cookie
      name: sessionid

````