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

# Get the default resolution rule

> Return the implicit, system-managed default rule — the baseline fallback the resolver applies when no user-created rule matches a scan (a redirect to the brand's Closient-hosted page, C-3956). The default rule is a sentinel, not a stored row: it has no ``id`` and cannot be created, edited, deleted, or reordered. Clients render it at the bottom of the rules list, below all user rules, and use ``system: true`` to flag it as non-editable. Returns ``404`` if the organization doesn't exist or the caller lacks VIEW permission. The default is the same for every organization, so this endpoint is unfiltered.



## OpenAPI

````yaml /openapi/openapi-resolver.json get /resolver/api/v1/organizations/{organization_id}/resolution-rules/default
openapi: 3.1.0
info:
  title: Resolver API
  version: 1.0.0
  description: >
    GS1 Digital Link resolution with content negotiation and linkset support.


    ## 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: []
tags:
  - name: Resolver
    description: GS1 Digital Link resolution with content negotiation and linkset support.
  - name: Custom URLs
    description: >-
      Reusable custom-URL catalog (C-3339) — create, list, edit, and delete the
      custom redirect destinations that resolution rules point at.
  - name: Verification
    description: >-
      Serial verification (`gs1:verificationService`) — tiered, rate-limited
      responses for serialized GTIN scans. Experimental v1; see the
      verification-service guide.
  - name: Resolver Custom Hostnames
    description: >-
      BYO domain (C-4058) — register a customer-owned hostname, publish the
      CNAME records, verify ownership, and serve an org's Digital Link QRs from
      its own DNS.
externalDocs:
  description: Closient Documentation
  url: https://docs.closient.com
paths:
  /resolver/api/v1/organizations/{organization_id}/resolution-rules/default:
    get:
      tags:
        - Resolver
      summary: Get the default resolution rule
      description: >-
        Return the implicit, system-managed default rule — the baseline fallback
        the resolver applies when no user-created rule matches a scan (a
        redirect to the brand's Closient-hosted page, C-3956). The default rule
        is a sentinel, not a stored row: it has no ``id`` and cannot be created,
        edited, deleted, or reordered. Clients render it at the bottom of the
        rules list, below all user rules, and use ``system: true`` to flag it as
        non-editable. Returns ``404`` if the organization doesn't exist or the
        caller lacks VIEW permission. The default is the same for every
        organization, so this endpoint is unfiltered.
      operationId: apps_resolver_api_resolver_get_default_resolution_rule_endpoint
      parameters:
        - in: path
          name: organization_id
          schema:
            description: UUID of the organization. Caller must have VIEW permission.
            format: shortuuid
            maxLength: 22
            minLength: 22
            pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
            title: Organization Id
            type: string
          required: true
          description: UUID of the organization. Caller must have VIEW permission.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DefaultResolutionRuleOut'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
      security:
        - APIKeyHeaderAuth: []
        - OAuthTokenAuth: []
        - SessionAuth: []
components:
  schemas:
    DefaultResolutionRuleOut:
      description: >-
        The implicit, system-managed default rule (C-3336).


        Represents the baseline fallback the resolver always applies when no

        user-created rule matches a scan: a redirect to the brand's
        Closient-hosted

        page (C-3956), falling back to the product page when the brand has no

        published page. It is a sentinel, not a database row — it has no ``id``,

        cannot be created, edited, deleted, or reordered, and exists purely so
        the

        brand portal can render it at the bottom of the rules list and clients
        can

        explain the fallback to users.
      examples:
        - description: >-
            Applies when no other rule matches. Redirects to the brand's
            Closient-hosted page for the scanned item.
          destination_type: HOSTED_PAGE
          enabled: true
          order_index: 999999
          scope_type: BRAND
          system: true
      properties:
        system:
          default: true
          description: >-
            Always ``true`` — discriminates the default rule from user-managed
            rules.
          title: System
          type: boolean
        scope_type:
          $ref: '#/components/schemas/ScopeTypeEnum'
          description: >-
            Always ``BRAND`` — the implicit host rule applies at the brand scope
            as the last resort.
        enabled:
          default: true
          description: Always ``true`` — the fallback can't be disabled.
          title: Enabled
          type: boolean
        destination_type:
          $ref: '#/components/schemas/DestinationTypeEnum'
          description: >-
            Always ``HOSTED_PAGE`` — the fallback redirects to the brand's
            hosted page.
        order_index:
          description: >-
            Sentinel ordering value that keeps the default sorted after every
            user rule.
          title: Order Index
          type: integer
        description:
          description: >-
            Human-readable explanation of the fallback behaviour, suitable for a
            tooltip / info panel.
          title: Description
          type: string
      required:
        - scope_type
        - destination_type
        - order_index
        - description
      title: DefaultResolutionRuleOut
      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
    ScopeTypeEnum:
      description: |-
        Hierarchy level at which a resolution rule applies.

        Mirrors :class:`apps.resolver.models.ScopeType`. Ordered from least
        specific (``ORGANIZATION``) to most specific (``SERIAL``); the
        resolver evaluator walks scopes most-specific first so a per-serial
        override beats a per-product override beats a brand-wide override.
      enum:
        - ORGANIZATION
        - BRAND
        - PRODUCT
        - BATCH
        - SERIAL
      title: ScopeTypeEnum
      type: string
    DestinationTypeEnum:
      enum:
        - HOSTED_PAGE
        - CUSTOM_URL
      title: DestinationTypeEnum
      type: string
  securitySchemes:
    APIKeyHeaderAuth:
      type: apiKey
      in: header
      name: X-API-Key
    OAuthTokenAuth:
      type: http
      scheme: bearer
    SessionAuth:
      type: apiKey
      in: cookie
      name: sessionid

````