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

# One link

> Requires a token with the `links:read` permission.



## OpenAPI

````yaml /openapi.json get /api/v1/links/{id}
openapi: 3.0.0
info:
  description: >-
    Every request carries `Authorization: Bearer utmk_…`. The token fixes the
    workspace; no request names one. Every operation declares `x-permission`,
    the token permission it requires.
  title: UTM Builder API
  version: '1'
servers:
  - url: https://app.utmkit.co
    variables: {}
security:
  - bearer: []
tags: []
paths:
  /api/v1/links/{id}:
    get:
      tags:
        - links
      summary: One link
      description: Requires a token with the `links:read` permission.
      operationId: UtmBuilderWeb.API.V1.LinkController.show
      parameters:
        - description: ''
          in: path
          name: id
          required: true
          schema:
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
          description: Link
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Error
      callbacks: {}
components:
  schemas:
    Link:
      properties:
        android_url:
          nullable: true
          type: string
        campaign_id:
          nullable: true
          type: integer
        created_at:
          format: date-time
          type: string
        created_by:
          properties:
            api_token_id:
              nullable: true
              type: integer
            user_id:
              type: integer
          type: object
        destination:
          type: string
        expires_at:
          format: date-time
          nullable: true
          type: string
        id:
          type: integer
        ios_url:
          nullable: true
          type: string
        note:
          nullable: true
          type: string
        qr_url:
          description: the short URL with the scan marker
          format: uri
          type: string
        short_code:
          type: string
        short_url:
          format: uri
          type: string
        state:
          enum:
            - live
            - pending
            - blocked
            - expired
          type: string
        tags:
          description: the link's tags, by name without regard to case
          items:
            properties:
              color:
                enum:
                  - gray
                  - red
                  - orange
                  - amber
                  - green
                  - teal
                  - blue
                  - purple
                type: string
              name:
                type: string
            type: object
          type: array
        utm_campaign:
          nullable: true
          type: string
        utm_content:
          nullable: true
          type: string
        utm_medium:
          nullable: true
          type: string
        utm_source:
          nullable: true
          type: string
        utm_term:
          nullable: true
          type: string
      title: Link
      type: object
    Error:
      description: Every refusal. `code` is the closed set of FR-019.
      properties:
        error:
          properties:
            code:
              enum:
                - unauthenticated
                - subscription_required
                - subscription_ended
                - missing_permission
                - role_forbids
                - plan_forbids
                - rate_limited
                - governance_refused
                - scanner_refused
                - limit_reached
                - duplicate_link
                - not_found
                - invalid_input
              type: string
            details:
              additionalProperties: true
              description: field → messages, on invalid_input
              nullable: true
              type: object
            message:
              type: string
            permission:
              nullable: true
              type: string
            retry_after_seconds:
              nullable: true
              type: integer
          required:
            - code
            - message
          type: object
      required:
        - error
      title: Error
      type: object
  securitySchemes:
    bearer:
      description: utmk_<lookup><secret>, minted on /tokens
      scheme: bearer
      type: http

````