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

# get_tenant

> Read one tenant. Cost class: cacheable.



## OpenAPI

````yaml /openapi.json get /v1/tenants/{external_ref}
openapi: 3.1.0
info:
  description: >-
    Document intelligence: parse, split, classify, extract, and ground files, or
    build a searchable workspace. Authenticate with ``X-API-Key``.
  title: NDI Platform API
  version: 0.1.0
servers:
  - url: https://ndi-api.nace.ai
security: []
tags: []
paths:
  /v1/tenants/{external_ref}:
    get:
      tags:
        - tenants
      summary: get_tenant
      description: 'Read one tenant. Cost class: cacheable.'
      operationId: get_tenant_v1_tenants__external_ref__get
      parameters:
        - description: The partner's own reference for the tenant, such as its account id.
          in: path
          name: external_ref
          required: true
          schema:
            description: >-
              The partner's own reference for the tenant, such as its account
              id.
            maxLength: 128
            minLength: 1
            pattern: ^\S(.*\S)?$
            title: External Ref
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tenant'
          description: Successful Response
        '504':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Gateway Timeout
        default:
          content:
            application/json:
              example:
                error:
                  code: invalid_request
                  detail: null
                  message: >-
                    Request body has extra fields that this operation does not
                    accept.
                  request_id: req-01j9k2n3p4q5r6s7t8v9
                  retryable: false
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: >-
            Typed error envelope used by every 4xx and 5xx. ``error.code``
            distinguishes the failure; HTTP status is a consequence of the code.
      security:
        - APIKeyHeader: []
components:
  schemas:
    Tenant:
      additionalProperties: false
      description: >-
        One of the partner's child tenants. Send ``X-NDI-Tenant:
        ext:<external_ref>`` to act for it.
      properties:
        created_at:
          description: When the tenant was created.
          format: date-time
          title: Created At
          type: string
        data_retention:
          $ref: '#/components/schemas/GranularRetention'
          description: >-
            The data-retention setting in force for the tenant. A stored
            zero_retention reads as short while this deployment does not offer
            zero retention.
        disabled:
          description: Whether the tenant is disabled. Its data is kept.
          title: Disabled
          type: boolean
        display_name:
          anyOf:
            - type: string
            - type: 'null'
          description: Human-readable name of the tenant.
          title: Display Name
        external_ref:
          description: The partner's own reference for the tenant, unique per partner.
          title: External Ref
          type: string
        id:
          description: NDI's id for the tenant; X-NDI-Tenant accepts it too.
          format: uuid
          title: Id
          type: string
        limits:
          $ref: '#/components/schemas/TenantLimits'
          description: The limits in force for the tenant.
        retention_tier:
          $ref: '#/components/schemas/RetentionTier'
          description: >-
            The tenant's account tier for job retention: a paid tenant's job
            inputs, outputs and processing files are removed 48 hours after the
            job finishes, a free tenant's 7 days after. A failed or cancelled
            job counts from the failure or cancel.
      required:
        - id
        - external_ref
        - display_name
        - disabled
        - limits
        - data_retention
        - retention_tier
        - created_at
      title: Tenant
      type: object
    ErrorEnvelope:
      description: Every non-2xx body on ``/v1``.
      example:
        error:
          code: invalid_request
          detail: null
          message: Request body has extra fields that this operation does not accept.
          request_id: req-01j9k2n3p4q5r6s7t8v9
          retryable: false
      properties:
        error:
          $ref: '#/components/schemas/Error'
      required:
        - error
      title: ErrorEnvelope
      type: object
    GranularRetention:
      description: >-
        Retention for document operations — a **client** setting, not a request
        field.


        A data-handling guarantee a caller can accidentally opt out of on one

        endpoint is not a guarantee, so this is configured per client at
        onboarding

        and appears in no request body.
      enum:
        - short
        - zero_retention
      title: GranularRetention
      type: string
    TenantLimits:
      additionalProperties: false
      description: The limits in force for a tenant.
      properties:
        max_concurrent_jobs:
          description: >-
            Parse, split, classify, categorize, extract, ground and agent jobs
            this tenant may have running at once; more wait in the queue. NDI's
            own per-tenant cap applies when it is lower.
          title: Max Concurrent Jobs
          type: integer
        rpm:
          description: Requests per minute this tenant may make.
          title: Rpm
          type: integer
      required:
        - rpm
        - max_concurrent_jobs
      title: TenantLimits
      type: object
    RetentionTier:
      description: >-
        How long a client's finished jobs keep their content — a **client**
        setting, not a request field.


        ``paid`` keeps it ``PAID_JOB_RETENTION`` after the job finishes,
        ``free``

        ``FREE_JOB_RETENTION`` (``app/platform_api/limits.py``). A client with
        no

        stored tier resolves from its row (``app/db/models/client.py``
        ``on_free_retention_tier``).
      enum:
        - paid
        - free
      title: RetentionTier
      type: string
    Error:
      description: The error object, per spec 12 §1.8.
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
        detail:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          description: Structured payload, when the code carries one.
          title: Detail
        message:
          description: Human- and model-readable; says what to do differently.
          title: Message
          type: string
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Per-request correlation id; matches the ``X-Request-Id`` header.
            Null only when the error was minted outside any HTTP request, e.g.
            by a worker.
          title: Request Id
        retryable:
          description: Whether retrying the identical request could succeed.
          title: Retryable
          type: boolean
      required:
        - code
        - message
        - retryable
      title: Error
      type: object
    ErrorCode:
      description: |-
        Every error the ``/v1`` surface can return.

        Clients must treat this as an **open** enum: a new member is an additive
        change (spec 12 §9), and a client that crashes on an unknown code makes
        every future error a breaking change.
      enum:
        - invalid_request
        - unsupported_file_type
        - file_too_large
        - invalid_schema
        - invalid_sql
        - invalid_path_prefix
        - command_not_permitted
        - batch_too_large
        - domain_validation_failed
        - default_label_required
        - wait_required_for_zero_retention
        - ledger_decision_invalid
        - tenant_required
        - partner_required
        - workspace_not_found
        - file_not_found
        - job_not_found
        - upload_not_found
        - node_not_found
        - schema_not_found
        - domain_not_found
        - session_not_found
        - access_label_not_found
        - ledger_understanding_not_found
        - ledger_table_not_found
        - tenant_not_found
        - path_conflict
        - schema_version_conflict
        - access_label_name_taken
        - workspace_name_taken
        - access_label_in_use
        - upload_expired
        - file_not_ingested
        - workspace_deleting
        - workspace_not_deletable
        - ingestion_in_progress
        - job_not_cancellable
        - confirmation_required
        - domain_not_published
        - domain_in_use
        - reserved_domain_slug
        - kg_not_built
        - kg_build_in_progress
        - ledger_understanding_in_progress
        - ledger_understanding_version_outdated
        - session_busy
        - tenant_limit_reached
        - range_not_satisfiable
        - result_expired
        - access_denied
        - tenant_disabled
        - access_backstop_violation
        - access_mode_not_implemented
        - rate_limited
        - concurrency_limit_reached
        - quota_exceeded
        - corrupt_file
        - zero_byte_file
        - encrypted_file
        - csv_dialect_ambiguous
        - csv_parse_failed
        - parse_failed
        - ocr_failed
        - conversion_failed
        - sheetless_workbook
        - unplayable_media
        - unclassified_pages
        - job_cancelled
        - job_timeout
        - upstream_unavailable
        - internal_error
        - unauthorized
        - not_implemented
      title: ErrorCode
      type: string
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-Key
      type: apiKey

````

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