components:
  parameters:
    DatetimeFormatHeader:
      description: Accepted for backwards compatibility; has no effect. Response datetimes
        are always normalized to UTC and serialized as RFC 3339 with a `Z` suffix,
        whether or not this header is sent.
      example: rfc3339
      in: header
      name: X-Datetime-Format
      required: false
      schema:
        enum:
        - rfc3339
        type: string
  schemas:
    AggregationResult:
      properties:
        field:
          anyOf:
          - type: string
          - type: 'null'
          title: Field
        name:
          title: Name
          type: string
        other_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Other Count
        rows:
          anyOf:
          - items:
              $ref: '#/components/schemas/AggregationRow'
            type: array
          - type: 'null'
          title: Rows
        type:
          title: Type
          type: string
        value:
          anyOf:
          - type: number
          - type: 'null'
          title: Value
        values:
          anyOf:
          - additionalProperties:
              type: number
            type: object
          - type: 'null'
          title: Values
      required:
      - name
      - type
      title: AggregationResult
      type: object
    AggregationRow:
      properties:
        count:
          title: Count
          type: integer
        key:
          title: Key
          type: string
      required:
      - key
      - count
      title: AggregationRow
      type: object
    AggregationsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: aggregations
          default: aggregations
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/AggregationsContextPayload'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: AggregationsContext
      type: object
    AggregationsContextCreate:
      properties:
        kind:
          const: aggregations
          default: aggregations
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/AggregationsContextPayload'
      required:
      - payload
      title: AggregationsContextCreate
      type: object
    AggregationsContextPayload:
      properties:
        aggregations:
          items:
            $ref: '#/components/schemas/AggregationResult'
          title: Aggregations
          type: array
        question:
          title: Question
          type: string
        total:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total
      required:
      - question
      - aggregations
      title: AggregationsContextPayload
      type: object
    AgreementType:
      enum:
      - terms_and_conditions
      - master_service_agreement
      - acting_as_trader
      - parking_agreement
      title: AgreementType
      type: string
    AiInferenceUsageBucket:
      properties:
        groups:
          items:
            $ref: '#/components/schemas/AiInferenceUsageGroup'
          title: Groups
          type: array
        period_start:
          format: date
          title: Period Start
          type: string
      required:
      - period_start
      - groups
      title: AiInferenceUsageBucket
      type: object
    AiInferenceUsageGroup:
      description: 'Public per-model AI inference usage. Deliberately excludes billing-gateway''s

        internal COGS fields (cost_amount, per-million rates, has_rate).'
      properties:
        cache_read_tokens:
          title: Cache Read Tokens
          type: integer
        cache_write_tokens:
          title: Cache Write Tokens
          type: integer
        input_tokens:
          title: Input Tokens
          type: integer
        model:
          title: Model
          type: string
        output_tokens:
          title: Output Tokens
          type: integer
        request_count:
          title: Request Count
          type: integer
      required:
      - model
      - input_tokens
      - output_tokens
      - cache_read_tokens
      - cache_write_tokens
      - request_count
      title: AiInferenceUsageGroup
      type: object
    AiInferenceUsageSeriesResponse:
      properties:
        buckets:
          items:
            $ref: '#/components/schemas/AiInferenceUsageBucket'
          title: Buckets
          type: array
        end_date:
          format: date
          title: End Date
          type: string
        granularity:
          $ref: '#/components/schemas/UsageGranularity'
        product:
          const: ai_inference
          default: ai_inference
          title: Product
          type: string
        start_date:
          format: date
          title: Start Date
          type: string
      required:
      - granularity
      - start_date
      - end_date
      - buckets
      title: AiInferenceUsageSeriesResponse
      type: object
    AiInferenceUsageSummaryResponse:
      properties:
        end_date:
          format: date
          title: End Date
          type: string
        groups:
          items:
            $ref: '#/components/schemas/AiInferenceUsageGroup'
          title: Groups
          type: array
        product:
          const: ai_inference
          default: ai_inference
          title: Product
          type: string
        start_date:
          format: date
          title: Start Date
          type: string
      required:
      - start_date
      - end_date
      - groups
      title: AiInferenceUsageSummaryResponse
      type: object
    AllocationMethodType:
      enum:
      - fcfs
      - auction
      - lottery
      title: AllocationMethodType
      type: string
    AllowedNumberOfNameserverBase:
      properties:
        max:
          description: Maximum number of nameserver per domain name
          title: Max
          type: integer
        min:
          description: Minimum number of nameserver per domain name
          minimum: 0.0
          title: Min
          type: integer
      required:
      - min
      - max
      title: AllowedNumberOfNameserverBase
      type: object
    AssignablePublicRole:
      enum:
      - admin
      - viewer
      - domain_manager
      - dns_manager
      - billing_manager
      title: AssignablePublicRole
      type: string
    AttributeCondition:
      properties:
        field:
          $ref: '#/components/schemas/RegistryHandleAttributeType'
          description: The attribute key to evaluate
        operator:
          $ref: '#/components/schemas/ConditionOperator'
          description: The comparison operator
        value:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          description: The value(s) to compare against
          title: Value
      required:
      - field
      - operator
      - value
      title: AttributeCondition
      type: object
    AttributeType:
      enum:
      - enum
      - string
      - boolean
      - datetime
      - integer
      - country_code
      - uri_template
      title: AttributeType
      type: string
    Auth:
      description: 'Pre-login OAuth bootstrap. The SPA resolves this document by hostname
        before login and uses

        `client_id` (the org''s `wl-<organization_id>` Keycloak client) + `authority`
        (the OIDC issuer on

        the customer''s auth host) to start the flow; absent, it falls back to the
        default dashboard client.


        System-owned: written only by onboarding (via branding-service''s set-auth
        endpoint), never by a

        customer document write - branding-service preserves this block across customer
        upserts.'
      properties:
        authority:
          anyOf:
          - type: string
          - type: 'null'
          title: Authority
        client_id:
          anyOf:
          - pattern: ^[a-zA-Z0-9._-]{1,255}$
            type: string
          - type: 'null'
          title: Client Id
      title: Auth
      type: object
    BatchSortField:
      enum:
      - created_on
      - started_at
      - finished_at
      title: BatchSortField
      type: string
    BatchStatus:
      enum:
      - pending
      - complete
      title: BatchStatus
      type: string
    BillingMetadata:
      properties:
        billing_model:
          anyOf:
          - type: string
          - type: 'null'
          description: Payment terms for the organization.
          title: Billing Model
        credit_limit:
          anyOf:
          - type: integer
          - type: 'null'
          description: Credit limit for the organization.
          title: Credit Limit
        customer_number:
          anyOf:
          - type: integer
          - type: 'null'
          description: Customer account number for the organization.
          title: Customer Number
      title: BillingMetadata
      type: object
    BillingMode:
      enum:
      - consolidated
      - independent
      title: BillingMode
      type: string
    BillingTransactionAction:
      enum:
      - create
      - transfer
      - import
      - renew
      - restore
      - trade
      - application
      - service_fee
      - upgrade_fee
      - wallet_top_up
      title: BillingTransactionAction
      type: string
    BillingTransactionProductType:
      enum:
      - domain
      - zones
      - email_forward
      - domain_forward
      - account_wallet
      - vanity_nameserver
      - whitelabel_branding
      - whitelabel_branding_plus
      - ras_domain_lifecycle
      - ams_domain_lifecycle
      title: BillingTransactionProductType
      type: string
    BillingTransactionResponse:
      properties:
        action:
          $ref: '#/components/schemas/BillingTransactionAction'
          description: The action performed in the transaction
        amount:
          description: The amount of the transaction including VAT
          pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Amount
          type: string
        billing_transaction_id:
          examples:
          - billing_transaction_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^billing_transaction_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Billing Transaction Id
          type: string
          x-typeid-prefix: billing_transaction
        completed_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date/time the transaction completed
          title: Completed On
        created_on:
          description: The date/time the transaction was created
          format: date-time
          title: Created On
          type: string
        currency:
          $ref: '#/components/schemas/Currency'
          description: The currency of the transaction
        price:
          description: The price of the product without sales tax
          pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Price
          type: string
        product_reference:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The reference of the product
          title: Product Reference
        product_type:
          $ref: '#/components/schemas/BillingTransactionProductType'
          description: The type of product
        status:
          $ref: '#/components/schemas/BillingTransactionStatus'
          default: pending
          description: The status of the transaction
        tax_amount:
          description: The tax amount of the transaction
          pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Tax Amount
          type: string
        tax_rate:
          description: The tax rate of the transaction
          pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Tax Rate
          type: string
        unit:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The unit for `volume` (e.g. 'y' for years when renewing a domain);
            null when not applicable
          title: Unit
        updated_on:
          description: The date/time the transaction was updated
          format: date-time
          title: Updated On
          type: string
        volume:
          description: The quantity the transaction covers, expressed in `unit` (e.g.
            1 for a one-year domain renewal)
          pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Volume
          type: string
      required:
      - product_type
      - product_reference
      - action
      - volume
      - amount
      - price
      - tax_rate
      - tax_amount
      title: BillingTransactionResponse
      type: object
    BillingTransactionSortField:
      enum:
      - product_type
      - action
      - status
      - created_on
      - completed_on
      title: BillingTransactionSortField
      type: string
    BillingTransactionStatus:
      enum:
      - pending
      - succeeded
      - failed
      - canceled
      title: BillingTransactionStatus
      type: string
    Body_upload_whitelabel_asset_v1_whitelabel_branding_assets_post:
      properties:
        file:
          contentMediaType: application/octet-stream
          description: Asset file (image/font)
          title: File
          type: string
      required:
      - file
      title: Body_upload_whitelabel_asset_v1_whitelabel_branding_assets_post
      type: object
    Brand:
      properties:
        logo:
          anyOf:
          - $ref: '#/components/schemas/Logo'
          - type: 'null'
        name:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          title: Name
      title: Brand
      type: object
    BrandingAsset:
      properties:
        asset_id:
          description: Opaque handle used to delete or reference the asset
          title: Asset Id
          type: string
        asset_url:
          description: Public URL of the asset
          title: Asset Url
          type: string
        content_type:
          anyOf:
          - type: string
          - type: 'null'
          description: MIME type of the asset
          title: Content Type
        size_bytes:
          description: Asset size in bytes
          title: Size Bytes
          type: integer
        updated_on:
          description: Last-modified timestamp
          format: date-time
          title: Updated On
          type: string
      required:
      - asset_id
      - asset_url
      - size_bytes
      - updated_on
      title: BrandingAsset
      type: object
    BrandingDocument:
      properties:
        auth:
          anyOf:
          - $ref: '#/components/schemas/Auth'
          - type: 'null'
        brand:
          anyOf:
          - $ref: '#/components/schemas/Brand'
          - type: 'null'
        content:
          anyOf:
          - $ref: '#/components/schemas/Content'
          - type: 'null'
        theme:
          anyOf:
          - $ref: '#/components/schemas/Theme'
          - type: 'null'
        version:
          default: 1
          title: Version
          type: integer
      title: BrandingDocument
      type: object
    BrowserStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
        unique:
          title: Unique
          type: integer
      required:
      - key
      - total
      - unique
      title: BrowserStatsBucket
      type: object
    BulkObjectTagChanges:
      properties:
        add:
          description: Tag IDs to add to the objects.
          items:
            examples:
            - tag_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: tag
          maxItems: 1000
          title: Add
          type: array
        objects:
          description: Object references to operate on. TypeIDs and resource names
            may be mixed.
          items:
            description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
              name (e.g. example.com)
            examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            - example.com
            type: string
          maxItems: 1000
          minItems: 1
          title: Objects
          type: array
        remove:
          description: Tag IDs to remove from the objects.
          items:
            examples:
            - tag_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: tag
          maxItems: 1000
          title: Remove
          type: array
        replace:
          anyOf:
          - items:
              examples:
              - tag_01h45ytscbebyvny4gc8cr8ma2
              format: typeid
              pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
              type: string
              x-typeid-prefix: tag
            maxItems: 1000
            type: array
          - type: 'null'
          description: Tag IDs to set as the complete tag set for the objects, replacing
            any existing tags. Mutually exclusive with 'add' and 'remove'. An empty
            list removes all tags.
          title: Replace
        type:
          $ref: '#/components/schemas/TagType'
          description: The object/tag type (e.g. DOMAIN, CONTACT, ZONE)
      required:
      - type
      - objects
      title: BulkObjectTagChanges
      type: object
    ClaimsNotice:
      properties:
        claims:
          description: List of trademark claims
          items:
            $ref: '#/components/schemas/TmClaim'
          title: Claims
          type: array
        claims_key:
          description: The claims key used to retrieve this claims notice
          title: Claims Key
          type: string
        claims_notice_acceptance_hash:
          description: Hash to accept the claims notice
          title: Claims Notice Acceptance Hash
          type: string
        label:
          description: Domain name label covered by this claims notice
          title: Label
          type: string
        notice_footer:
          default: ''
          description: Claims notice form footer text
          title: Notice Footer
          type: string
        notice_footer_url:
          default: ''
          description: Claims notice form footer URL
          title: Notice Footer Url
          type: string
        notice_intro:
          default: ''
          description: Introductory text for the claims notice
          title: Notice Intro
          type: string
        notice_not_exact_match_intro:
          default: ''
          description: Introductory text for the non-exact match section
          title: Notice Not Exact Match Intro
          type: string
        notice_title:
          default: ''
          description: Title for the claims notice
          title: Notice Title
          type: string
        rendered_html:
          default: ''
          description: The rendered trademark claims notice HTML
          title: Rendered Html
          type: string
      required:
      - claims_key
      - claims_notice_acceptance_hash
      - label
      title: ClaimsNotice
      type: object
    ClaimsNoticesRequest:
      properties:
        claims_keys:
          description: List of claims keys to retrieve claims notices for, for the
            time being limited to one claims key
          items:
            type: string
          maxItems: 1
          minItems: 1
          title: Claims Keys
          type: array
      required:
      - claims_keys
      title: ClaimsNoticesRequest
      type: object
    ClaimsNoticesResponse:
      properties:
        claims_notices:
          items:
            $ref: '#/components/schemas/ClaimsNotice'
          title: Claims Notices
          type: array
      required:
      - claims_notices
      title: ClaimsNoticesResponse
      type: object
    ClearVanityNameserverSetDefaultRes:
      properties:
        cleared:
          description: True if an ACTIVE default was unset; False on an idempotent
            no-op (org had no default).
          title: Cleared
          type: boolean
      required:
      - cleared
      title: ClearVanityNameserverSetDefaultRes
      type: object
    CommandError:
      properties:
        code:
          anyOf:
          - type: string
          - type: 'null'
          description: Stable semantic error code for known failure modes (e.g. 'ERROR_BATCH_EMPTY');
            null for ad-hoc failures. Matches the 'code' field in top-level error
            responses.
          title: Code
        error:
          description: Error message
          title: Error
          type: string
        index:
          description: Index of the failed command in the request
          title: Index
          type: integer
        instance_index:
          anyOf:
          - type: integer
          - type: 'null'
          description: Index within the bulk command's instances[] for per-instance
            failures
          title: Instance Index
        resource_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Resource identifier (zone name, domain name, contact email)
            for per-instance failures
          title: Resource Key
        type:
          anyOf:
          - type: string
          - type: 'null'
          description: RFC 9457 problem type identifier derived from the exception
            class (e.g. 'value', 'batch-empty'). Matches the 'type' field in top-level
            error responses.
          title: Type
      required:
      - index
      - error
      title: CommandError
      type: object
    Communication:
      properties:
        timedelta:
          description: The Timedeltas of when to send a verification notice of the
            Communication Channel [+0D, +4D, +12D, +15D, +27D]
          items:
            type: string
          title: Timedelta
          type: array
        type:
          description: Which Communication channel is used for the Verification [email]
          title: Type
          type: string
      required:
      - type
      - timedelta
      title: Communication
      type: object
    ComplianceStatus:
      enum:
      - preparing
      - pending
      - approved
      - disapproved
      - expired
      title: ComplianceStatus
      type: string
    ConditionOperator:
      enum:
      - equals
      - not_equals
      - in
      - not_in
      title: ConditionOperator
      type: string
    ContactAttestReq:
      properties:
        attestations:
          items:
            $ref: '#/components/schemas/ContactAttestVerificationReq'
          maxItems: 50
          minItems: 0
          title: Attestations
          type: array
      required:
      - attestations
      title: ContactAttestReq
      type: object
    ContactAttestRes:
      properties:
        verifications:
          items:
            $ref: '#/components/schemas/ContactVerificationStatus'
          title: Verifications
          type: array
      required:
      - verifications
      title: ContactAttestRes
      type: object
    ContactAttestVerificationReq:
      properties:
        attestation_reference:
          maxLength: 255
          minLength: 0
          title: Attestation Reference
          type: string
        claim:
          $ref: '#/components/schemas/ContactVerificationClaim'
        eid:
          anyOf:
          - $ref: '#/components/schemas/ContactVerificationEidInformation'
          - type: 'null'
        method:
          $ref: '#/components/schemas/ContactVerificationMethod'
        proof:
          $ref: '#/components/schemas/ContactVerificationProof'
      required:
      - claim
      - method
      - proof
      - attestation_reference
      title: ContactAttestVerificationReq
      type: object
    ContactAttributeDefinition:
      description: Definition of a possible attribute for a TLD.
      properties:
        conditions:
          anyOf:
          - items:
              $ref: '#/components/schemas/AttributeCondition'
            type: array
          - type: 'null'
          description: Conditions that must ALL be true for this attribute to be active.
            None means always active.
          title: Conditions
        contact_roles:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainContactType'
            type: array
          - type: 'null'
          description: Contact roles this attribute applies to. None means all roles.
          title: Contact Roles
        key:
          $ref: '#/components/schemas/RegistryHandleAttributeType'
          description: Unique identifier for the attribute
        required:
          default: false
          description: Whether this attribute is required when its conditions are
            met
          title: Required
          type: boolean
        type:
          $ref: '#/components/schemas/AttributeType'
          description: Type of the attribute (e.g., 'enum', 'string', 'boolean')
        values:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Allowed values for enum types
          title: Values
      required:
      - key
      - type
      title: ContactAttributeDefinition
      type: object
    ContactAttributeLinkDetail:
      properties:
        attributes:
          additionalProperties:
            type: string
          description: The attributes from the linked set
          propertyNames:
            $ref: '#/components/schemas/RegistryHandleAttributeType'
          title: Attributes
          type: object
        contact_attribute_set_id:
          description: The attribute set linked to the contact
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
        label:
          description: The label of the linked attribute set
          title: Label
          type: string
        tld:
          description: The TLD this link applies to
          title: Tld
          type: string
      required:
      - contact_attribute_set_id
      - label
      - tld
      - attributes
      title: ContactAttributeLinkDetail
      type: object
    ContactAttributeLinkResponse:
      properties:
        contact_attribute_link_id:
          description: The unique identifier of the link
          examples:
          - contact_attribute_link_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_link_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Link Id
          type: string
          x-typeid-prefix: contact_attribute_link
        contact_attribute_set_id:
          description: The attribute set linked to the contact
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
        contact_id:
          description: The contact this link belongs to
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        tld:
          description: The TLD this link applies to
          title: Tld
          type: string
      required:
      - contact_attribute_link_id
      - contact_id
      - contact_attribute_set_id
      - tld
      - created_on
      title: ContactAttributeLinkResponse
      type: object
    ContactAttributeSetCreate:
      properties:
        attributes:
          additionalProperties:
            type: string
          description: Key-value map of contact attributes for this set
          propertyNames:
            $ref: '#/components/schemas/RegistryHandleAttributeType'
          title: Attributes
          type: object
        label:
          description: A human-readable label explaining the purpose of this attribute
            set
          maxLength: 255
          minLength: 1
          title: Label
          type: string
        tld:
          description: The TLD this attribute set applies to (e.g. 'de', '.de', 'DE')
          title: Tld
          type: string
      required:
      - label
      - attributes
      - tld
      title: ContactAttributeSetCreate
      type: object
    ContactAttributeSetResponse:
      properties:
        attributes:
          additionalProperties:
            type: string
          description: Key-value map of contact attributes for this set
          propertyNames:
            $ref: '#/components/schemas/RegistryHandleAttributeType'
          title: Attributes
          type: object
        contact_attribute_set_id:
          description: The unique identifier of the attribute set
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        label:
          description: A human-readable label explaining the purpose of this attribute
            set
          maxLength: 255
          minLength: 1
          title: Label
          type: string
        linked_contacts:
          default: 0
          description: Number of contacts linked to this attribute set
          title: Linked Contacts
          type: integer
        organization_id:
          description: The organization that owns this attribute set
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        tld:
          description: The TLD this attribute set applies to
          title: Tld
          type: string
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
      required:
      - label
      - attributes
      - contact_attribute_set_id
      - organization_id
      - tld
      - created_on
      - updated_on
      title: ContactAttributeSetResponse
      type: object
    ContactAttributeSetSortField:
      enum:
      - label
      - tld
      - created_on
      - updated_on
      title: ContactAttributeSetSortField
      type: string
    ContactAttributeSetUpdate:
      properties:
        label:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: A human-readable label explaining the purpose of this attribute
            set
          title: Label
      title: ContactAttributeSetUpdate
      type: object
    ContactConfigBase:
      properties:
        max:
          description: Maximum contacts per domain name
          minimum: 0.0
          title: Max
          type: integer
        min:
          description: Minimum contacts per domain name
          minimum: 0.0
          title: Min
          type: integer
        type:
          $ref: '#/components/schemas/DomainContactType'
          description: The type of contact
      required:
      - type
      - min
      - max
      title: ContactConfigBase
      type: object
    ContactCreate:
      properties:
        city:
          description: The city of the contact
          maxLength: 255
          minLength: 1
          title: City
          type: string
        country:
          description: The country of the contact (ISO 3166-1 alpha-2, plus XK for
            Kosovo)
          pattern: ^\w{2}$
          title: Country
          type: string
        disclose:
          description: Whether the contact details should be disclosed. The Disclose
            function may not work with all TLDs. Some registries still display the
            data in Whois if, for example, the organization field is filled in.
          title: Disclose
          type: boolean
        email:
          description: Contact email address (as submitted)
          format: email
          title: Email
          type: string
        fax:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The contacts's fax number
          title: Fax
        first_name:
          description: The first name of the contact
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The last name of the contact
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        org:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The organization of the contact
          title: Org
        phone:
          description: The contact's phone number
          examples:
          - '+1.2125552368'
          format: phone
          title: Phone
          type: string
        postal_code:
          description: The postal code of the contact
          maxLength: 255
          minLength: 1
          title: Postal Code
          type: string
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The state of the contact
          title: State
        street:
          description: The address of the contact
          maxLength: 255
          minLength: 1
          title: Street
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The title of the contact
          title: Title
      required:
      - first_name
      - last_name
      - email
      - phone
      - street
      - city
      - postal_code
      - country
      - disclose
      title: ContactCreate
      type: object
    ContactCreateBulkCommand:
      properties:
        command:
          const: contact_create_bulk
          default: contact_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ContactCreateBulkPayload'
          description: Bulk contact creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ContactCreateBulkCommand
      type: object
    ContactCreateBulkInstance:
      properties:
        city:
          description: City
          maxLength: 255
          minLength: 1
          title: City
          type: string
        country:
          anyOf:
          - pattern: ^\w{2}$
            type: string
          - type: 'null'
          description: Override country for this contact
          title: Country
        disclose:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override disclose setting for this contact
          title: Disclose
        email:
          description: Email address of the contact
          format: email
          title: Email
          type: string
        fax:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: Fax number in international format
          title: Fax
        first_name:
          description: First name of the contact
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: Last name of the contact
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        org:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Override organization for this contact
          title: Org
        phone:
          description: Phone number in international format
          format: phone
          title: Phone
          type: string
        postal_code:
          description: Postal code
          maxLength: 255
          minLength: 1
          title: Postal Code
          type: string
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Override state for this contact
          title: State
        street:
          description: Street address
          maxLength: 255
          minLength: 1
          title: Street
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Override title for this contact
          title: Title
      required:
      - first_name
      - last_name
      - email
      - phone
      - street
      - city
      - postal_code
      title: ContactCreateBulkInstance
      type: object
    ContactCreateBulkPayload:
      properties:
        instances:
          description: List of contacts to create (1-1000)
          items:
            $ref: '#/components/schemas/ContactCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/ContactCreateBulkTemplate'
          description: Shared settings for all contacts
      required:
      - template
      - instances
      title: ContactCreateBulkPayload
      type: object
    ContactCreateBulkTemplate:
      properties:
        country:
          description: The country of the contacts (ISO 3166-1 alpha-2, plus XK for
            Kosovo)
          pattern: ^\w{2}$
          title: Country
          type: string
        disclose:
          description: Whether contact details should be disclosed in WHOIS
          title: Disclose
          type: boolean
        org:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Organization name
          title: Org
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: State/province
          title: State
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Contact title
          title: Title
      required:
      - country
      - disclose
      title: ContactCreateBulkTemplate
      type: object
    ContactCreateCommand:
      properties:
        command:
          const: contact_create
          default: contact_create
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ContactCreatePayloadData'
          description: Contact creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ContactCreateCommand
      type: object
    ContactCreatePayloadData:
      properties:
        city:
          description: The city of the contact
          maxLength: 255
          minLength: 1
          title: City
          type: string
        country:
          description: The country of the contact (ISO 3166-1 alpha-2, plus XK for
            Kosovo)
          pattern: ^\w{2}$
          title: Country
          type: string
        disclose:
          description: Whether the contact details should be disclosed. The Disclose
            function may not work with all TLDs. Some registries still display the
            data in Whois if, for example, the organization field is filled in.
          title: Disclose
          type: boolean
        email:
          description: Contact email address (as submitted)
          format: email
          title: Email
          type: string
        fax:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The contacts's fax number
          title: Fax
        first_name:
          description: The first name of the contact
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The last name of the contact
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        org:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The organization of the contact
          title: Org
        phone:
          description: The contact's phone number
          examples:
          - '+1.2125552368'
          format: phone
          title: Phone
          type: string
        postal_code:
          description: The postal code of the contact
          maxLength: 255
          minLength: 1
          title: Postal Code
          type: string
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The state of the contact
          title: State
        street:
          description: The address of the contact
          maxLength: 255
          minLength: 1
          title: Street
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The title of the contact
          title: Title
      required:
      - first_name
      - last_name
      - email
      - phone
      - street
      - city
      - postal_code
      - country
      - disclose
      title: ContactCreatePayloadData
      type: object
    ContactCreateWorkerPayload:
      properties:
        contact:
          $ref: '#/components/schemas/ContactCreatePayloadData'
        operation:
          title: Operation
          type: string
        type:
          enum:
          - contact_create
          - contact_create_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - contact
      title: ContactCreateWorkerPayload
      type: object
    ContactCreateWorkerResult:
      properties:
        contact_id:
          title: Contact Id
          type: string
        type:
          enum:
          - contact_create
          - contact_create_bulk
          title: Type
          type: string
      required:
      - type
      - contact_id
      title: ContactCreateWorkerResult
      type: object
    ContactHandle:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/RegistryHandleAttributeType'
            type: object
          - type: 'null'
          description: Additional attributes related to the contact
          title: Attributes
        contact_id:
          description: The contact id of the contact
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      required:
      - contact_id
      title: ContactHandle
      type: object
    ContactIdList:
      additionalProperties:
        examples:
        - contact_01h45ytscbebyvny4gc8cr8ma2
        format: typeid
        pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
        type: string
        x-typeid-prefix: contact
      description: The contacts of the domain
      propertyNames:
        $ref: '#/components/schemas/DomainContactType'
      type: object
    ContactIncludeField:
      enum:
      - tags
      title: ContactIncludeField
      type: string
    ContactResponse:
      properties:
        attribute_sets:
          description: Linked attribute sets for this contact
          items:
            $ref: '#/components/schemas/ContactAttributeLinkDetail'
          title: Attribute Sets
          type: array
        city:
          description: The city of the contact
          maxLength: 255
          minLength: 1
          title: City
          type: string
        contact_id:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        country:
          description: The country of the contact (ISO 3166-1 alpha-2, plus XK for
            Kosovo)
          pattern: ^\w{2}$
          title: Country
          type: string
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        disclose:
          description: Whether the contact details should be disclosed. The Disclose
            function may not work with all TLDs. Some registries still display the
            data in Whois if, for example, the organization field is filled in.
          title: Disclose
          type: boolean
        email:
          description: Contact email address (as submitted)
          format: email
          title: Email
          type: string
        fax:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The contacts's fax number
          title: Fax
        first_name:
          description: The first name of the contact
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The last name of the contact
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        org:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The organization of the contact
          title: Org
        organization_id:
          default: None
          description: The organization that owns the domain
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        phone:
          description: The contact's phone number
          examples:
          - '+1.2125552368'
          format: phone
          title: Phone
          type: string
        postal_code:
          description: The postal code of the contact
          maxLength: 255
          minLength: 1
          title: Postal Code
          type: string
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The state of the contact
          title: State
        status_tags:
          anyOf:
          - items:
              $ref: '#/components/schemas/StatusTagResponse'
            type: array
          - type: 'null'
          description: Status tags assigned to this contact. Only included when ?include=tags
            is specified.
          title: Status Tags
        street:
          description: The address of the contact
          maxLength: 255
          minLength: 1
          title: Street
          type: string
        tags:
          anyOf:
          - items:
              $ref: '#/components/schemas/TagEnrichedResponse'
            type: array
          - type: 'null'
          description: Tags assigned to this contact
          title: Tags
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The title of the contact
          title: Title
      required:
      - first_name
      - last_name
      - email
      - phone
      - street
      - city
      - postal_code
      - country
      - disclose
      title: ContactResponse
      type: object
    ContactSortField:
      enum:
      - first_name
      - last_name
      - email
      - created_on
      title: ContactSortField
      type: string
    ContactType:
      enum:
      - owner
      - agent
      - third party
      title: ContactType
      type: string
    ContactVerificationApiResponse:
      properties:
        canceled_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was cancelled
          title: Canceled On
        contact_id:
          default: None
          description: The contact that is being verified
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        contact_verification_id:
          examples:
          - contact_verification_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_verification_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Verification Id
          type: string
          x-typeid-prefix: contact_verification
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        status:
          $ref: '#/components/schemas/EmailVerificationStatus'
          default: pending
          description: Current status of the email verification
        token:
          description: The token to verify the email address
          maxLength: 256
          minLength: 35
          title: Token
          type: string
        type:
          $ref: '#/components/schemas/VerificationType'
          description: 'The type of verification: ''api'' for retrieving token via
            API, ''email'' for retrieving via email'
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        verified_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was verified
          title: Verified On
      required:
      - token
      - type
      title: ContactVerificationApiResponse
      type: object
    ContactVerificationClaim:
      enum:
      - NAME
      - ADDRESS
      - EMAIL
      - PHONE
      - LEGAL_ENTITY
      title: ContactVerificationClaim
      type: string
    ContactVerificationEidInformation:
      properties:
        eid_scheme:
          title: Eid Scheme
          type: string
        level_of_assurance:
          $ref: '#/components/schemas/LevelOfAssurance'
      required:
      - eid_scheme
      - level_of_assurance
      title: ContactVerificationEidInformation
      type: object
    ContactVerificationEmailResponse:
      properties:
        canceled_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was cancelled
          title: Canceled On
        contact_id:
          default: None
          description: The contact that is being verified
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        contact_verification_id:
          examples:
          - contact_verification_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_verification_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Verification Id
          type: string
          x-typeid-prefix: contact_verification
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        status:
          $ref: '#/components/schemas/EmailVerificationStatus'
          default: pending
          description: Current status of the email verification
        type:
          $ref: '#/components/schemas/VerificationType'
          description: 'The type of verification: ''api'' for retrieving token via
            API, ''email'' for retrieving via email'
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        verified_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was verified
          title: Verified On
      required:
      - type
      title: ContactVerificationEmailResponse
      type: object
    ContactVerificationMethod:
      enum:
      - AUTH
      - VDIG
      - ELECTRONIC_DOCUMENT
      - PHYSICAL_DOCUMENT
      - BVR
      - PVR
      - DATA
      - REACHABILITY
      title: ContactVerificationMethod
      type: string
    ContactVerificationProof:
      enum:
      - IDCARD
      - PASSPORT
      - POPULATION_REGISTER
      - RESIDENCE_PERMIT
      - PROOF_OF_ARRIVAL
      - DRIVERS_LICENCE
      - COMPANY_REGISTER
      - COMPANY_STATEMENT
      - BANK_ACCOUNT
      - ONLINE_PAYMENT_ACCOUNT
      - UTILITY_ACCOUNT
      - BANK_STATEMENT
      - TAX_STATEMENT
      - WRITTEN_ATTESTATION
      - DIGITAL_ATTESTATION
      - POSTAL_VER_TRANSACTION_LOG
      - EMAIL_VER_TRANSACTION_LOG
      - PHONE_VER_TRANSACTION_LOG
      - ADDRESS_DATABASE
      title: ContactVerificationProof
      type: string
    ContactVerificationResponse:
      properties:
        canceled_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was cancelled
          title: Canceled On
        contact_id:
          default: None
          description: The contact that is being verified
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        contact_verification_id:
          examples:
          - contact_verification_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_verification_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Verification Id
          type: string
          x-typeid-prefix: contact_verification
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        status:
          $ref: '#/components/schemas/EmailVerificationStatus'
          default: pending
          description: Current status of the email verification
        type:
          $ref: '#/components/schemas/VerificationType'
          description: 'The type of verification: ''api'' for retrieving token via
            API, ''email'' for retrieving via email'
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        verified_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date the verification was verified
          title: Verified On
      required:
      - type
      title: ContactVerificationResponse
      type: object
    ContactVerificationState:
      enum:
      - UNVERIFIED
      - VERIFIED
      - IN_PROGRESS
      - EXPIRED
      title: ContactVerificationState
      type: string
    ContactVerificationStatus:
      properties:
        attestation_reference:
          anyOf:
          - type: string
          - type: 'null'
          title: Attestation Reference
        claim:
          $ref: '#/components/schemas/ContactVerificationClaim'
        eid:
          anyOf:
          - $ref: '#/components/schemas/ContactVerificationEidInformation'
          - type: 'null'
        expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Expires On
        method:
          anyOf:
          - $ref: '#/components/schemas/ContactVerificationMethod'
          - type: 'null'
        proof:
          anyOf:
          - $ref: '#/components/schemas/ContactVerificationProof'
          - type: 'null'
        state:
          $ref: '#/components/schemas/ContactVerificationState'
        verified_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Verified On
      required:
      - claim
      - state
      title: ContactVerificationStatus
      type: object
    ContactsBase:
      properties:
        authinfo_required:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the registry requires authinfo for contact creation
          title: Authinfo Required
        authinfo_supported:
          default: true
          description: Whether the registry supports authinfo for contact creation
          title: Authinfo Supported
          type: boolean
        is_thick:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the registry supports thick contacts
          title: Is Thick
        possible_attributes:
          description: List of possible attributes that can be set for this TLD
          items:
            $ref: '#/components/schemas/ContactAttributeDefinition'
          title: Possible Attributes
          type: array
        privacy_proxy:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether a privacy service is allowed
          title: Privacy Proxy
        registrant_change:
          anyOf:
          - $ref: '#/components/schemas/RegistrantChangeType'
          - type: 'null'
          description: Whether the registrant can change through update or trade
        support_check:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the registry supports contact checks
          title: Support Check
        support_client_contact_id:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the registry supports client defined contact ID
          title: Support Client Contact Id
        support_transfer:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the registry supports contact transfer
          title: Support Transfer
        supported_postal_types:
          anyOf:
          - items:
              $ref: '#/components/schemas/PostalAddressType'
            type: array
          - type: 'null'
          description: Supported postal address types
          title: Supported Postal Types
        supported_roles:
          anyOf:
          - items:
              $ref: '#/components/schemas/ContactConfigBase'
            type: array
          - type: 'null'
          description: Supported contact roles
          title: Supported Roles
        transfer_supported_roles:
          anyOf:
          - items:
              $ref: '#/components/schemas/ContactConfigBase'
            type: array
          - type: 'null'
          description: Supported contact roles for transfer operations. Falls back
            to supported_roles if not specified.
          title: Transfer Supported Roles
        update_supported_roles:
          anyOf:
          - items:
              $ref: '#/components/schemas/ContactConfigBase'
            type: array
          - type: 'null'
          description: Supported contact roles for update operations. Falls back to
            supported_roles if not specified.
          title: Update Supported Roles
      title: ContactsBase
      type: object
    ContactsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: contacts
          default: contacts
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarContact_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: ContactsContext
      type: object
    ContactsContextCreate:
      properties:
        kind:
          const: contacts
          default: contacts
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarContact_'
      required:
      - payload
      title: ContactsContextCreate
      type: object
    Content:
      properties:
        email_blocks:
          anyOf:
          - patternProperties:
              ^[a-z0-9_]+$:
                patternProperties:
                  ^[a-z0-9_]+$:
                    patternProperties:
                      ^[a-z]{2}(-[a-z]{2})?$:
                        maxLength: 2000
                        type: string
                    type: object
                type: object
            type: object
          - type: 'null'
          title: Email Blocks
        footer:
          anyOf:
          - $ref: '#/components/schemas/Footer'
          - type: 'null'
        legal:
          anyOf:
          - $ref: '#/components/schemas/Legal'
          - type: 'null'
        signature:
          anyOf:
          - type: string
          - type: 'null'
          title: Signature
        support:
          anyOf:
          - $ref: '#/components/schemas/Support'
          - type: 'null'
      title: Content
      type: object
    ContextListResponse:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            discriminator:
              mapping:
                aggregations: '#/components/schemas/AggregationsContext'
                contacts: '#/components/schemas/ContactsContext'
                domain_forwards: '#/components/schemas/DomainForwardsContext'
                domain_recommendations: '#/components/schemas/DomainRecommendationsContext'
                domains: '#/components/schemas/DomainsContext'
                email_forwards: '#/components/schemas/EmailForwardsContext'
                zones: '#/components/schemas/ZonesContext'
              propertyName: kind
            oneOf:
            - $ref: '#/components/schemas/ZonesContext'
            - $ref: '#/components/schemas/ContactsContext'
            - $ref: '#/components/schemas/DomainsContext'
            - $ref: '#/components/schemas/DomainForwardsContext'
            - $ref: '#/components/schemas/EmailForwardsContext'
            - $ref: '#/components/schemas/DomainRecommendationsContext'
            - $ref: '#/components/schemas/AggregationsContext'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: ContextListResponse
      type: object
    ContextMeta:
      properties:
        processing_time_ms:
          anyOf:
          - type: integer
          - type: 'null'
          title: Processing Time Ms
        total:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total
      title: ContextMeta
      type: object
    ContextPayload_DomainForward_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/DomainForward'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[DomainForward]
      type: object
    ContextPayload_DomainSearchSuggestionWithPrice_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/DomainSearchSuggestionWithPrice'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[DomainSearchSuggestionWithPrice]
      type: object
    ContextPayload_EmailForwardResponse_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/EmailForwardResponse'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[EmailForwardResponse]
      type: object
    ContextPayload_RegistrarContact_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/RegistrarContact'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[RegistrarContact]
      type: object
    ContextPayload_RegistrarDomain_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/RegistrarDomain'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[RegistrarDomain]
      type: object
    ContextPayload_RegistrarZone_:
      properties:
        meta:
          anyOf:
          - $ref: '#/components/schemas/ContextMeta'
          - type: 'null'
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
        results:
          items:
            $ref: '#/components/schemas/RegistrarZone'
          title: Results
          type: array
      required:
      - results
      title: ContextPayload[RegistrarZone]
      type: object
    Conversation:
      properties:
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        last_message_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Message At
        message_count:
          default: 0
          title: Message Count
          type: integer
        metadata:
          additionalProperties: true
          title: Metadata
          type: object
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        summary:
          anyOf:
          - type: string
          - type: 'null'
          description: Optional rolling summary maintained by the memory service.
          title: Summary
        title:
          anyOf:
          - type: string
          - type: 'null'
          description: Human-readable conversation title.
          title: Title
        updated_at:
          format: date-time
          title: Updated At
          type: string
        user_id:
          title: User Id
          type: string
      required:
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - updated_at
      title: Conversation
      type: object
    ConversationCreateRequest:
      properties:
        metadata:
          additionalProperties: true
          title: Metadata
          type: object
        title:
          anyOf:
          - maxLength: 200
            type: string
          - type: 'null'
          title: Title
      title: ConversationCreateRequest
      type: object
    ConversationListResponse:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/Conversation'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: ConversationListResponse
      type: object
    ConversationPatchRequest:
      properties:
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Metadata
        title:
          anyOf:
          - maxLength: 200
            type: string
          - type: 'null'
          title: Title
      title: ConversationPatchRequest
      type: object
    CreateJobBatchResponse:
      properties:
        batch_id:
          description: TypeID identifying this batch
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
        duplicates:
          description: Per-command details for duplicates, including pointers to the
            existing jobs/batches
          items:
            $ref: '#/components/schemas/DuplicateCommand'
          title: Duplicates
          type: array
        errors:
          description: Details of failed commands
          items:
            $ref: '#/components/schemas/CommandError'
          title: Errors
          type: array
        jobs_created:
          description: Number of jobs successfully created
          title: Jobs Created
          type: integer
        jobs_duplicated:
          default: 0
          description: Number of commands skipped because their idempotency_key matched
            a previously-submitted job
          title: Jobs Duplicated
          type: integer
        jobs_failed:
          description: Number of jobs that failed to create
          title: Jobs Failed
          type: integer
        status_url:
          description: "URL to check batch status. May 404 if jobs_created is 0 \u2014\
            \ see duplicates[].existing_batch_id for prior batches."
          title: Status Url
          type: string
        total_commands:
          description: Total commands in the batch
          title: Total Commands
          type: integer
      required:
      - batch_id
      - jobs_created
      - jobs_failed
      - total_commands
      - status_url
      title: CreateJobBatchResponse
      type: object
    CreateReportReq:
      properties:
        registrar_credential_id:
          anyOf:
          - examples:
            - registrar_credential_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^registrar_credential_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: registrar_credential
          - type: 'null'
          title: Registrar Credential Id
        report_type:
          $ref: '#/components/schemas/ReportType'
          default: domain_inventory
      title: CreateReportReq
      type: object
    Currency:
      enum:
      - USD
      - EUR
      title: Currency
      type: string
    CustomRoleCreate:
      description: Request body for creating a custom role.
      properties:
        description:
          anyOf:
          - type: string
          - type: 'null'
          description: Description of the custom role.
          title: Description
        name:
          description: Display name of the custom role as provided by the user (e.g.
            'Support Staff').
          maxLength: 64
          minLength: 1
          title: Name
          type: string
        permissions:
          description: Permissions the role grants, as `resource:scope` (e.g. `domains:read`).
            The escalation-bearing admin/owner permissions cannot be granted.
          items:
            $ref: '#/components/schemas/PublicPermission'
          title: Permissions
          type: array
      required:
      - name
      - permissions
      title: CustomRoleCreate
      type: object
    CustomRoleLabel:
      type: string
    CustomRoleUpdate:
      description: 'Request body for updating a custom role. Omitted fields are left
        unchanged; `permissions`

        is a full replacement set when provided.'
      properties:
        description:
          anyOf:
          - type: string
          - type: 'null'
          description: New description.
          title: Description
        name:
          anyOf:
          - maxLength: 64
            minLength: 1
            type: string
          - type: 'null'
          description: New display name.
          title: Name
        permissions:
          anyOf:
          - items:
              $ref: '#/components/schemas/PublicPermission'
            type: array
          - type: 'null'
          description: Full replacement set of `resource:scope` permissions the role
            grants.
          title: Permissions
      title: CustomRoleUpdate
      type: object
    DeletePolicyType:
      enum:
      - immediate
      - expiration
      title: DeletePolicyType
      type: string
    DnsChangeAction:
      enum:
      - create_zone
      - delete_zone
      - create_record
      - delete_record
      - enable_dnssec
      - disable_dnssec
      title: DnsChangeAction
      type: string
    DnsChangeResponse:
      properties:
        action:
          $ref: '#/components/schemas/DnsChangeAction'
        record_data:
          anyOf:
          - type: string
          - type: 'null'
          title: Record Data
        rrset_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Rrset Name
        rrset_type:
          anyOf:
          - $ref: '#/components/schemas/DnsRrsetType'
          - type: 'null'
        ttl:
          anyOf:
          - type: integer
          - type: 'null'
          title: Ttl
      required:
      - action
      - rrset_name
      - rrset_type
      - record_data
      - ttl
      title: DnsChangeResponse
      type: object
    DnsChangesResponse:
      properties:
        changes:
          items:
            $ref: '#/components/schemas/DnsChangeResponse'
          title: Changes
          type: array
        changeset_id:
          anyOf:
          - format: uuid
            type: string
          - type: 'null'
          title: Changeset Id
        dnssec_registry_publish:
          anyOf:
          - $ref: '#/components/schemas/DnssecRegistryPublishOutcome'
          - type: 'null'
        num_changes:
          title: Num Changes
          type: integer
        zone_name:
          title: Zone Name
          type: string
      required:
      - zone_name
      - changeset_id
      - num_changes
      - changes
      title: DnsChangesResponse
      type: object
    DnsConfigurationBase:
      properties:
        allowed_number_of_nameserver:
          $ref: '#/components/schemas/AllowedNumberOfNameserverBase'
        czds_available:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether the zone is available in CZDS
          title: Czds Available
        dnssec_allowed:
          description: Whether the registry supports DNSSEC
          title: Dnssec Allowed
          type: boolean
        dnssec_mandatory:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether DNSSEC is mandatory for a domain name
          title: Dnssec Mandatory
        dnssec_mode:
          anyOf:
          - $ref: '#/components/schemas/DnssecModeType'
          - type: 'null'
          description: DNSSEC mode
        dnssec_submit_digest_types:
          anyOf:
          - items:
              type: integer
            minItems: 1
            type: array
          - type: 'null'
          description: 'Which DS digest types we submit to the registry for zones
            we host, in order of preference: the first listed type the zone has a
            DS record for is submitted, later entries are fallbacks. Absent means
            submit every digest type the zone publishes. This is our submission policy,
            not the set of digest types the registry accepts.'
          title: Dnssec Submit Digest Types
        host_objects:
          description: Whether the registry supports host objects or use attributes
          title: Host Objects
          type: boolean
        host_parent_check_tlds:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: TLDs that require parent-host checks (ns1.example.com => example.com)
          title: Host Parent Check Tlds
        registry_nameserver_check:
          description: Whether the registry checks the nameserver configuration
          title: Registry Nameserver Check
          type: boolean
        registry_root_nameserver_update:
          description: Number of hours until the root zone is updated, 0 = real-time
          minimum: 0.0
          title: Registry Root Nameserver Update
          type: integer
      required:
      - allowed_number_of_nameserver
      - registry_nameserver_check
      - dnssec_allowed
      - registry_root_nameserver_update
      - host_objects
      title: DnsConfigurationBase
      type: object
    DnsProtectedReason:
      enum:
      - SYSTEM_MANAGED_SOA
      - SYSTEM_MANAGED_NS
      - EMAIL_FORWARD
      - DOMAIN_FORWARD
      - WHITELABEL
      - GENERIC
      title: DnsProtectedReason
      type: string
    DnsRecordCreate:
      properties:
        rdata:
          title: Rdata
          type: string
      required:
      - rdata
      title: DnsRecordCreate
      type: object
    DnsRecordDTO:
      properties:
        rdata:
          description: The record data (e.g., IP address, domain name)
          title: Rdata
          type: string
      required:
      - rdata
      title: DnsRecordDTO
      type: object
    DnsRecordPatchOp:
      properties:
        op:
          $ref: '#/components/schemas/PatchOp'
        record:
          $ref: '#/components/schemas/DnsRrsetWithOneRecordPatch'
      required:
      - op
      - record
      title: DnsRecordPatchOp
      type: object
    DnsRecordResponse:
      properties:
        protected:
          default: false
          description: Whether the record is protected
          title: Protected
          type: boolean
        protected_reason:
          anyOf:
          - $ref: '#/components/schemas/DnsProtectedReason'
          - type: 'null'
          description: Reason why the record is protected
        rdata:
          title: Rdata
          type: string
      required:
      - rdata
      title: DnsRecordResponse
      type: object
    DnsRrsetCreate:
      properties:
        name:
          title: Name
          type: string
        records:
          items:
            $ref: '#/components/schemas/DnsRecordCreate'
          title: Records
          type: array
        ttl:
          title: Ttl
          type: integer
        type:
          $ref: '#/components/schemas/DnsRrsetType'
      required:
      - name
      - type
      - ttl
      - records
      title: DnsRrsetCreate
      type: object
    DnsRrsetDTO:
      properties:
        name:
          description: The RRset name (e.g., '@', 'www')
          title: Name
          type: string
        records:
          description: List of records in this RRset
          items:
            $ref: '#/components/schemas/DnsRecordDTO'
          title: Records
          type: array
        ttl:
          description: Time to live in seconds
          title: Ttl
          type: integer
        type:
          $ref: '#/components/schemas/DnsRrsetType'
          description: The RRset type
      required:
      - name
      - type
      - ttl
      title: DnsRrsetDTO
      type: object
    DnsRrsetPatch:
      properties:
        name:
          title: Name
          type: string
        records:
          items:
            $ref: '#/components/schemas/DnsRecordCreate'
          title: Records
          type: array
        ttl:
          title: Ttl
          type: integer
        type:
          $ref: '#/components/schemas/DnsRrsetType'
      required:
      - name
      - type
      - ttl
      - records
      title: DnsRrsetPatch
      type: object
    DnsRrsetPatchOp:
      properties:
        op:
          $ref: '#/components/schemas/PatchOp'
        rrset:
          $ref: '#/components/schemas/DnsRrsetPatch'
      required:
      - op
      - rrset
      title: DnsRrsetPatchOp
      type: object
    DnsRrsetResponse:
      properties:
        name:
          title: Name
          type: string
        protected:
          default: false
          description: Whether the RRset is protected
          title: Protected
          type: boolean
        protected_reason:
          anyOf:
          - $ref: '#/components/schemas/DnsProtectedReason'
          - type: 'null'
          description: Reason why the RRset is protected
        records:
          items:
            $ref: '#/components/schemas/DnsRecordResponse'
          title: Records
          type: array
        ttl:
          title: Ttl
          type: integer
        type:
          $ref: '#/components/schemas/DnsRrsetType'
      required:
      - name
      - type
      - ttl
      title: DnsRrsetResponse
      type: object
    DnsRrsetType:
      enum:
      - A
      - AAAA
      - ALIAS
      - CAA
      - CNAME
      - DNSKEY
      - DS
      - MX
      - NS
      - PTR
      - TXT
      - SOA
      - SRV
      - TLSA
      - SMIMEA
      - URI
      - HTTPS
      - SVCB
      - NAPTR
      - SSHFP
      - CERT
      title: DnsRrsetType
      type: string
    DnsRrsetWithOneRecordPatch:
      properties:
        name:
          title: Name
          type: string
        rdata:
          title: Rdata
          type: string
        ttl:
          title: Ttl
          type: integer
        type:
          $ref: '#/components/schemas/DnsRrsetType'
      required:
      - rdata
      - name
      - type
      - ttl
      title: DnsRrsetWithOneRecordPatch
      type: object
    DnsZoneCreate:
      properties:
        dnssec_status:
          $ref: '#/components/schemas/DnssecStatus'
          default: disabled
        name:
          title: Name
          type: string
        rrsets:
          items:
            $ref: '#/components/schemas/DnsRrsetCreate'
          title: Rrsets
          type: array
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Optional vanity NS set to brand this zone's apex NS + SOA with.
            When omitted, the org's default ACTIVE set (if any) is used; when no default
            exists the system default NS is used.
          title: Vanity Nameserver Set Id
      required:
      - name
      title: DnsZoneCreate
      type: object
    DnsZoneCreateBulkCommand:
      properties:
        command:
          const: dns_zone_create_bulk
          default: dns_zone_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZoneCreateBulkPayload'
          description: Bulk DNS zone creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZoneCreateBulkCommand
      type: object
    DnsZoneCreateBulkInstance:
      properties:
        dnssec_status:
          anyOf:
          - $ref: '#/components/schemas/DnssecStatus'
          - type: 'null'
          description: Override DNSSEC status for this zone
        name:
          description: The DNS zone name (e.g., example.com)
          title: Name
          type: string
        rrsets:
          anyOf:
          - items:
              $ref: '#/components/schemas/DnsRrsetCreate'
            type: array
          - type: 'null'
          description: Override RRsets for this zone
          title: Rrsets
      required:
      - name
      title: DnsZoneCreateBulkInstance
      type: object
    DnsZoneCreateBulkPayload:
      properties:
        instances:
          description: List of zones to create (1-1000)
          items:
            $ref: '#/components/schemas/DnsZoneCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DnsZoneCreateBulkTemplate'
          description: Shared RRsets for all zones
      required:
      - template
      - instances
      title: DnsZoneCreateBulkPayload
      type: object
    DnsZoneCreateBulkTemplate:
      properties:
        dnssec_status:
          $ref: '#/components/schemas/DnssecStatus'
          default: disabled
          description: DNSSEC status for all zones
        rrsets:
          description: DNS record sets to create
          items:
            $ref: '#/components/schemas/DnsRrsetCreate'
          title: Rrsets
          type: array
      title: DnsZoneCreateBulkTemplate
      type: object
    DnsZoneCreateCommand:
      properties:
        command:
          const: dns_zone_create
          default: dns_zone_create
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZoneCreatePayloadData'
          description: DNS zone creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZoneCreateCommand
      type: object
    DnsZoneCreatePayloadData:
      properties:
        dnssec_status:
          $ref: '#/components/schemas/DnssecStatus'
          default: disabled
        name:
          title: Name
          type: string
        rrsets:
          items:
            $ref: '#/components/schemas/DnsRrsetCreate'
          title: Rrsets
          type: array
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Optional vanity NS set to brand this zone's apex NS + SOA with.
            When omitted, the org's default ACTIVE set (if any) is used; when no default
            exists the system default NS is used.
          title: Vanity Nameserver Set Id
      required:
      - name
      title: DnsZoneCreatePayloadData
      type: object
    DnsZoneCreateWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        type:
          enum:
          - dns_zone_create
          - dns_zone_create_bulk
          title: Type
          type: string
        zone:
          $ref: '#/components/schemas/DnsZoneCreatePayloadData'
      required:
      - type
      - operation
      - zone
      title: DnsZoneCreateWorkerPayload
      type: object
    DnsZoneCreateWorkerResult:
      properties:
        type:
          enum:
          - dns_zone_create
          - dns_zone_create_bulk
          title: Type
          type: string
        zone_name:
          title: Zone Name
          type: string
      required:
      - type
      - zone_name
      title: DnsZoneCreateWorkerResult
      type: object
    DnsZoneDTO:
      properties:
        created_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Zone creation timestamp
          title: Created On
        dnssec_status:
          $ref: '#/components/schemas/DnssecStatus'
          default: disabled
          description: DNSSEC status
        name:
          description: The zone name (e.g., 'example.com')
          title: Name
          type: string
        rrsets:
          description: List of RRsets in the zone
          items:
            $ref: '#/components/schemas/DnsRrsetDTO'
          title: Rrsets
          type: array
        updated_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Zone last update timestamp
          title: Updated On
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Vanity NS set branding this zone's apex, or null for system
            default NS
          title: Vanity Nameserver Set Id
      required:
      - name
      title: DnsZoneDTO
      type: object
    DnsZonePatchRecordsBulkCommand:
      properties:
        command:
          const: dns_zone_patch_records_bulk
          default: dns_zone_patch_records_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZonePatchRecordsBulkPayload'
          description: DNS zone patch records bulk payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZonePatchRecordsBulkCommand
      type: object
    DnsZonePatchRecordsBulkInstance:
      properties:
        ops:
          items:
            $ref: '#/components/schemas/DnsRecordPatchOp'
          maxItems: 100
          minItems: 1
          title: Ops
          type: array
        zone_name:
          description: DNS zone name to patch
          title: Zone Name
          type: string
      required:
      - zone_name
      - ops
      title: DnsZonePatchRecordsBulkInstance
      type: object
    DnsZonePatchRecordsBulkPayload:
      properties:
        instances:
          items:
            $ref: '#/components/schemas/DnsZonePatchRecordsBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: DnsZonePatchRecordsBulkPayload
      type: object
    DnsZonePatchRecordsWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        type:
          const: dns_zone_patch_records_bulk
          title: Type
          type: string
        zone:
          $ref: '#/components/schemas/DnsZonePatchRecordsBulkInstance'
      required:
      - type
      - operation
      - zone
      title: DnsZonePatchRecordsWorkerPayload
      type: object
    DnsZonePatchRrsetsBulkCommand:
      properties:
        command:
          const: dns_zone_patch_rrsets_bulk
          default: dns_zone_patch_rrsets_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZonePatchRrsetsBulkPayload'
          description: DNS zone patch rrsets bulk payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZonePatchRrsetsBulkCommand
      type: object
    DnsZonePatchRrsetsBulkInstance:
      properties:
        ops:
          items:
            $ref: '#/components/schemas/DnsRrsetPatchOp'
          maxItems: 100
          minItems: 1
          title: Ops
          type: array
        zone_name:
          description: DNS zone name to patch
          title: Zone Name
          type: string
      required:
      - zone_name
      - ops
      title: DnsZonePatchRrsetsBulkInstance
      type: object
    DnsZonePatchRrsetsBulkPayload:
      properties:
        instances:
          items:
            $ref: '#/components/schemas/DnsZonePatchRrsetsBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: DnsZonePatchRrsetsBulkPayload
      type: object
    DnsZonePatchRrsetsWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        type:
          const: dns_zone_patch_rrsets_bulk
          title: Type
          type: string
        zone:
          $ref: '#/components/schemas/DnsZonePatchRrsetsBulkInstance'
      required:
      - type
      - operation
      - zone
      title: DnsZonePatchRrsetsWorkerPayload
      type: object
    DnsZoneRecordsPatchOps:
      properties:
        ops:
          items:
            $ref: '#/components/schemas/DnsRecordPatchOp'
          title: Ops
          type: array
      required:
      - ops
      title: DnsZoneRecordsPatchOps
      type: object
    DnsZoneResponse:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        dns_zone_id:
          description: The unique identifier of the zone
          examples:
          - zone_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^zone_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Dns Zone Id
          type: string
          x-typeid-prefix: zone
        dnssec_status:
          $ref: '#/components/schemas/DnssecStatus'
          default: disabled
        domain_parts:
          $ref: '#/components/schemas/DomainNameParts'
        name:
          title: Name
          type: string
        rrsets:
          items:
            $ref: '#/components/schemas/DnsRrsetResponse'
          title: Rrsets
          type: array
        tags:
          anyOf:
          - items:
              $ref: '#/components/schemas/TagEnrichedResponse'
            type: array
          - type: 'null'
          description: Tags assigned to this zone. Only included when ?include=tags
            is specified.
          title: Tags
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Vanity NS set whose apex NS + SOA brand this zone, or null
            when the zone uses the system default nameservers.
          title: Vanity Nameserver Set Id
      required:
      - name
      - dns_zone_id
      title: DnsZoneResponse
      type: object
    DnsZoneRestampVanityNsBulkCommand:
      properties:
        command:
          const: dns_zone_restamp_vanity_ns_bulk
          default: dns_zone_restamp_vanity_ns_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZoneRestampVanityNsBulkPayload'
          description: Bulk DNS zone vanity NS restamp payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZoneRestampVanityNsBulkCommand
      type: object
    DnsZoneRestampVanityNsBulkInstance:
      properties:
        name:
          description: The DNS zone name to restamp (e.g., example.com)
          title: Name
          type: string
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: 'Override the template''s set for this zone: a set id to brand
            with, or null to unbrand this zone to system defaults. Omit the field
            entirely to inherit the template''s value.'
          title: Vanity Nameserver Set Id
      required:
      - name
      title: DnsZoneRestampVanityNsBulkInstance
      type: object
    DnsZoneRestampVanityNsBulkPayload:
      properties:
        instances:
          description: List of zones to restamp (1-1000)
          items:
            $ref: '#/components/schemas/DnsZoneRestampVanityNsBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DnsZoneRestampVanityNsBulkTemplate'
          description: Shared vanity NS set for all zones
      required:
      - template
      - instances
      title: DnsZoneRestampVanityNsBulkPayload
      type: object
    DnsZoneRestampVanityNsBulkTemplate:
      properties:
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Vanity NS set to restamp every zone's apex NS + SOA with, or
            null to unbrand all zones back to OpusDNS system default nameservers.
            An instance may override this.
          title: Vanity Nameserver Set Id
      title: DnsZoneRestampVanityNsBulkTemplate
      type: object
    DnsZoneRestampVanityNsWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        type:
          const: dns_zone_restamp_vanity_ns_bulk
          title: Type
          type: string
        zone:
          $ref: '#/components/schemas/DnsZoneRestampVanityNsBulkInstance'
      required:
      - type
      - operation
      - zone
      title: DnsZoneRestampVanityNsWorkerPayload
      type: object
    DnsZoneRrsetsCreate:
      properties:
        rrsets:
          items:
            $ref: '#/components/schemas/DnsRrsetCreate'
          title: Rrsets
          type: array
      title: DnsZoneRrsetsCreate
      type: object
    DnsZoneRrsetsPatchOps:
      properties:
        ops:
          items:
            $ref: '#/components/schemas/DnsRrsetPatchOp'
          title: Ops
          type: array
      required:
      - ops
      title: DnsZoneRrsetsPatchOps
      type: object
    DnsZoneSummary:
      properties:
        total_zones:
          description: Total number of DNS zones
          title: Total Zones
          type: integer
        zones_by_dnssec:
          additionalProperties:
            type: integer
          description: Count of zones by DNSSEC status
          propertyNames:
            $ref: '#/components/schemas/DnssecStatus'
          title: Zones By Dnssec
          type: object
      required:
      - total_zones
      title: DnsZoneSummary
      type: object
    DnsZoneUpdateBulkCommand:
      properties:
        command:
          const: dns_zone_update_bulk
          default: dns_zone_update_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZoneUpdateBulkPayload'
          description: Bulk DNS zone update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZoneUpdateBulkCommand
      type: object
    DnsZoneUpdateBulkInstance:
      properties:
        dnssec_status:
          anyOf:
          - $ref: '#/components/schemas/DnssecStatus'
          - type: 'null'
          description: Override DNSSEC status for this zone
        name:
          description: The DNS zone name (e.g., example.com)
          title: Name
          type: string
        rrsets:
          anyOf:
          - items:
              $ref: '#/components/schemas/DnsRrsetCreate'
            type: array
          - type: 'null'
          description: Override RRsets for this zone. Omit to inherit the template
            (or leave records unchanged if the template also omits rrsets). Provide
            an empty list to delete all records.
          title: Rrsets
      required:
      - name
      title: DnsZoneUpdateBulkInstance
      type: object
    DnsZoneUpdateBulkPayload:
      properties:
        instances:
          description: List of zones to update (1-1000)
          items:
            $ref: '#/components/schemas/DnsZoneUpdateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DnsZoneUpdateBulkTemplate'
          description: Shared RRsets for all zones
      required:
      - template
      - instances
      title: DnsZoneUpdateBulkPayload
      type: object
    DnsZoneUpdateBulkTemplate:
      properties:
        dnssec_status:
          anyOf:
          - $ref: '#/components/schemas/DnssecStatus'
          - type: 'null'
          description: DNSSEC status for all zones
        rrsets:
          anyOf:
          - items:
              $ref: '#/components/schemas/DnsRrsetCreate'
            type: array
          - type: 'null'
          description: DNS record sets to apply to every zone. Omit to leave each
            zone's RRsets unchanged (useful for bulk DNSSEC toggles). Provide an empty
            list to delete all records.
          title: Rrsets
      title: DnsZoneUpdateBulkTemplate
      type: object
    DnsZoneUpdateCommand:
      properties:
        command:
          const: dns_zone_update
          default: dns_zone_update
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DnsZoneUpdatePayloadData'
          description: DNS zone update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DnsZoneUpdateCommand
      type: object
    DnsZoneUpdatePayloadData:
      properties:
        dnssec_status:
          anyOf:
          - $ref: '#/components/schemas/DnssecStatus'
          - type: 'null'
        name:
          title: Name
          type: string
        rrsets:
          items:
            $ref: '#/components/schemas/DnsRrsetCreate'
          title: Rrsets
          type: array
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Optional vanity NS set to brand this zone's apex NS + SOA with.
            When omitted, the org's default ACTIVE set (if any) is used; when no default
            exists the system default NS is used.
          title: Vanity Nameserver Set Id
      required:
      - name
      title: DnsZoneUpdatePayloadData
      type: object
    DnsZoneUpdateWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        type:
          enum:
          - dns_zone_update
          - dns_zone_update_bulk
          title: Type
          type: string
        zone:
          $ref: '#/components/schemas/DnsZoneUpdatePayloadData'
      required:
      - type
      - operation
      - zone
      title: DnsZoneUpdateWorkerPayload
      type: object
    DnsZoneVanitySetUpdateRes:
      properties:
        zone:
          $ref: '#/components/schemas/DnsZoneDTO'
          description: The zone after restamping
      required:
      - zone
      title: DnsZoneVanitySetUpdateRes
      type: object
    DnssecAlgorithm:
      enum:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 10
      - 12
      - 13
      - 14
      - 15
      - 16
      - 17
      - 23
      title: DnssecAlgorithm
      type: integer
    DnssecDigestType:
      enum:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      title: DnssecDigestType
      type: integer
    DnssecModeType:
      enum:
      - DS
      - DNSKEY
      title: DnssecModeType
      type: string
    DnssecRecordType:
      enum:
      - ds_data
      - key_data
      title: DnssecRecordType
      type: string
    DnssecRegistryPublishOutcome:
      description: 'Fate of the DS/DNSKEY submission that follows signing a zone.


        DEFERRED means the zone is signed but the parent holds no DS yet: the registry

        rejected the submission because the public nameservers had not served the
        new key

        material yet, and a background job is retrying. A signed zone with no DS at
        the

        parent resolves as unsigned, so the intermediate state is safe.


        WITHDRAWN means the zone stopped being signed while the DS was in flight,
        so the DS

        was taken back off the parent: the enablement did not take effect. It is kept
        apart

        from SKIPPED because SKIPPED also covers "there was nothing to submit", and
        a caller

        must not render an enablement that was undone as a success.


        FAILED means the zone is signed and nothing is working towards a DS. Only
        the zone

        create path can report it, because that is the one caller that cannot propagate
        the

        error. Null means the response makes no statement about a registry DS submission.'
      enum:
      - published
      - deferred
      - skipped
      - withdrawn
      - failed
      title: DnssecRegistryPublishOutcome
      type: string
    DnssecStatus:
      enum:
      - enabled
      - disabled
      title: DnssecStatus
      type: string
    DomainAttributeKey:
      enum:
      - auto_renew_period
      - music_registrant_attestation
      - nic_it_compliance_confirmation
      - travel_industry_acknowledgement
      - verification_required
      - de_general_request_contact
      - de_abuse_contact
      - nor_id_applicant_version
      - nor_id_applicant_accept_name
      - nor_id_applicant_accept_date
      - nor_id_declaration
      - nor_id_declaration_token
      - punktum_dk_terms_acceptance
      - punktum_dk_tracking_no
      - internet_ee_registrant_agreement
      - promotion
      - promotion_eligibility
      - domain_contact_attributes
      - registry_reseller_id
      title: DomainAttributeKey
      type: string
    DomainAvailability:
      properties:
        domain:
          title: Domain
          type: string
        error:
          anyOf:
          - $ref: '#/components/schemas/DomainAvailabilityError'
          - type: 'null'
          description: Error details when status is 'error', e.g. why a domain is
            invalid
        status:
          $ref: '#/components/schemas/DomainAvailabilityStatus'
      required:
      - domain
      - status
      title: DomainAvailability
      type: object
    DomainAvailabilityError:
      properties:
        message:
          description: Human-readable error message
          title: Message
          type: string
        type:
          description: Error type identifier, e.g. validation_error or check_error
          title: Type
          type: string
      required:
      - type
      - message
      title: DomainAvailabilityError
      type: object
    DomainAvailabilityMeta:
      properties:
        processing_time_ms:
          title: Processing Time Ms
          type: integer
        total:
          title: Total
          type: integer
      required:
      - total
      - processing_time_ms
      title: DomainAvailabilityMeta
      type: object
    DomainAvailabilityRequest:
      properties:
        domains:
          items:
            maxLength: 1024
            type: string
          maxItems: 1000
          minItems: 1
          title: Domains
          type: array
      required:
      - domains
      title: DomainAvailabilityRequest
      type: object
    DomainAvailabilityStatus:
      enum:
      - available
      - unavailable
      - market_available
      - tmch_claim
      - error
      - unknown
      title: DomainAvailabilityStatus
      type: string
    DomainCheckResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/common__models__domain__domain__DomainAvailabilityResponse'
          title: Results
          type: array
      required:
      - results
      title: DomainCheckResponse
      type: object
    DomainClientStatus:
      enum:
      - clientTransferProhibited
      - clientUpdateProhibited
      - clientDeleteProhibited
      - clientRenewProhibited
      - clientHold
      title: DomainClientStatus
      type: string
    DomainContactHandles:
      additionalProperties:
        items:
          $ref: '#/components/schemas/ContactHandle'
        type: array
      description: The contacts of the domain
      propertyNames:
        $ref: '#/components/schemas/DomainContactType'
      type: object
    DomainContactResponse:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/RegistryHandleAttributeType'
            type: object
          - type: 'null'
          description: Registry-specific attributes supplied inline for this contact
            in this role. Omitted when the contact was submitted without inline attributes;
            attributes taken from a linked contact attribute set are not reported
            here.
          title: Attributes
        contact_id:
          description: The contact id of the contact
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
        contact_type:
          $ref: '#/components/schemas/DomainContactType'
          description: The type of contact
      required:
      - contact_id
      - contact_type
      title: DomainContactResponse
      type: object
    DomainContactType:
      enum:
      - registrant
      - admin
      - tech
      - billing
      title: DomainContactType
      type: string
    DomainCreate:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code used for the domain
          title: Auth Code
        claims_notice_acceptance_hash:
          anyOf:
          - type: string
          - type: 'null'
          description: During the claims phase domain names that match a trademark
            registered in the Trademark Clearinghouse require an acceptance by the
            registrant.
          title: The accept_hash of the related claims notice
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          description: The contacts of the domain
          title: Contacts
        create_zone:
          default: false
          description: Create a zone for the domain on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        name:
          description: The domain to be created
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          $ref: '#/components/schemas/DomainPeriod'
          description: The registration period of the domain
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - name
      - renewal_mode
      - contacts
      - period
      title: DomainCreate
      type: object
    DomainCreateBulkCommand:
      properties:
        command:
          const: domain_create_bulk
          default: domain_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainCreateBulkPayload'
          description: Bulk domain creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainCreateBulkCommand
      type: object
    DomainCreateBulkInstance:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Override attributes for this domain.\n\nAdditional attributes\
            \ of the domain, keyed by attribute name. Values are strings.\n\nCustomer-settable\
            \ keys:\n\n- `auto_renew_period`: `monthly` or `yearly`. All TLDs on create,\
            \ transfer-in and update. Selects the\n  period of the next renewal; the\
            \ current expiry date does not move. On transfer-in without `period` it\
            \ also sets the\n  period added by the transfer. Omitted on create or\
            \ transfer-in, it follows the term being bought: a one-month\n  `period`\
            \ renews monthly and anything else yearly, except a longer month-unit\
            \ term, which leaves it unset: the next\n  renewal then charges the term\
            \ that was bought where the TLD still renews for that term, and the product's\
            \ default\n  billing period otherwise. Supplying `monthly` where the TLD\
            \ sells no one-month renewal is rejected on create,\n  transfer-in and\
            \ update; a `monthly` stored before that rule applied is ignored at renewal.\n\
            - `music_registrant_attestation`: `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: Override auth code for this domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - type: 'null'
          description: Override contacts for this domain
        create_zone:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override create_zone for this domain
          title: Create Zone
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation. Required only
            for premium domains; must be set per-instance because each premium domain
            has its own price.
        name:
          description: The domain to be created
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: Override nameservers for this domain
          title: Nameservers
        period:
          anyOf:
          - $ref: '#/components/schemas/DomainPeriod'
          - type: 'null'
          description: Override registration period for this domain
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: Override renewal mode for this domain
      required:
      - name
      title: DomainCreateBulkInstance
      type: object
    DomainCreateBulkPayload:
      properties:
        instances:
          description: List of domains to create (1-1000)
          items:
            $ref: '#/components/schemas/DomainCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DomainCreateBulkTemplate'
          description: Shared settings for all domains
      required:
      - template
      - instances
      title: DomainCreateBulkPayload
      type: object
    DomainCreateBulkTemplate:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code used for the domain
          title: Auth Code
        contacts:
          $ref: '#/components/schemas/DomainContactHandles'
        create_zone:
          default: false
          description: Create a zone on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          $ref: '#/components/schemas/DomainPeriod'
          description: The registration period of the domain
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - period
      - contacts
      - renewal_mode
      title: DomainCreateBulkTemplate
      type: object
    DomainCreateCommand:
      properties:
        command:
          const: domain_create
          default: domain_create
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainCreatePayloadData'
          description: Domain creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainCreateCommand
      type: object
    DomainCreatePayloadData:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code used for the domain
          title: Auth Code
        claims_notice_acceptance_hash:
          anyOf:
          - type: string
          - type: 'null'
          description: During the claims phase domain names that match a trademark
            registered in the Trademark Clearinghouse require an acceptance by the
            registrant.
          title: The accept_hash of the related claims notice
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          description: The contacts of the domain
          title: Contacts
        create_zone:
          default: false
          description: Create a zone for the domain on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        name:
          description: The domain to be created
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          $ref: '#/components/schemas/DomainPeriod'
          description: The registration period of the domain
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - name
      - renewal_mode
      - contacts
      - period
      title: DomainCreatePayloadData
      type: object
    DomainCreateWorkerPayload:
      properties:
        domain:
          $ref: '#/components/schemas/DomainCreatePayloadData'
        operation:
          title: Operation
          type: string
        type:
          enum:
          - domain_create
          - domain_create_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - domain
      title: DomainCreateWorkerPayload
      type: object
    DomainCreateWorkerResult:
      properties:
        domain_id:
          title: Domain Id
          type: string
        type:
          enum:
          - domain_create
          - domain_create_bulk
          title: Type
          type: string
      required:
      - type
      - domain_id
      title: DomainCreateWorkerResult
      type: object
    DomainDnssecDataCreate:
      properties:
        algorithm:
          $ref: '#/components/schemas/DnssecAlgorithm'
          description: DNSSEC algorithm used
        digest:
          anyOf:
          - type: string
          - type: 'null'
          description: Digest value for DS records
          title: Digest
        digest_type:
          anyOf:
          - $ref: '#/components/schemas/DnssecDigestType'
          - type: 'null'
          description: Digest type for DS records
        flags:
          anyOf:
          - type: integer
          - type: 'null'
          description: DNSKEY flags for key records
          title: Flags
        key_tag:
          anyOf:
          - type: integer
          - type: 'null'
          description: Key tag for DS records
          title: Key Tag
        protocol:
          anyOf:
          - type: integer
          - type: 'null'
          description: Protocol field for key records (typically 3)
          title: Protocol
        public_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Base64-encoded public key for key records
          title: Public Key
        record_type:
          $ref: '#/components/schemas/DnssecRecordType'
          description: Type of DNSSEC record (DS or Key)
      required:
      - record_type
      - algorithm
      title: DomainDnssecDataCreate
      type: object
    DomainDnssecDataResponse:
      properties:
        algorithm:
          $ref: '#/components/schemas/DnssecAlgorithm'
          description: DNSSEC algorithm used
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        digest:
          anyOf:
          - type: string
          - type: 'null'
          description: Digest value for DS records
          title: Digest
        digest_type:
          anyOf:
          - $ref: '#/components/schemas/DnssecDigestType'
          - type: 'null'
          description: Digest type for DS records
        domain_dnssec_data_id:
          examples:
          - domain_dnssec_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_dnssec_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Dnssec Data Id
          type: string
          x-typeid-prefix: domain_dnssec
        domain_id:
          default: None
          description: The domain this DNSSEC record belongs to
          examples:
          - domain_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Id
          type: string
          x-typeid-prefix: domain
        flags:
          anyOf:
          - type: integer
          - type: 'null'
          description: DNSKEY flags for key records
          title: Flags
        key_tag:
          anyOf:
          - type: integer
          - type: 'null'
          description: Key tag for DS records
          title: Key Tag
        protocol:
          anyOf:
          - type: integer
          - type: 'null'
          description: Protocol field for key records (typically 3)
          title: Protocol
        public_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Base64-encoded public key for key records
          title: Public Key
        record_type:
          $ref: '#/components/schemas/DnssecRecordType'
          description: Type of DNSSEC record (DS or Key)
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
      required:
      - record_type
      - algorithm
      title: DomainDnssecDataResponse
      type: object
    DomainForward:
      properties:
        created_on:
          format: date-time
          title: Created On
          type: string
        domain_forward_id:
          examples:
          - domain_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Forward Id
          type: string
          x-typeid-prefix: domain_forward
        enabled:
          title: Enabled
          type: boolean
        hostname:
          title: Hostname
          type: string
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetResponse'
          - type: 'null'
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetResponse'
          - type: 'null'
        parking_id:
          anyOf:
          - examples:
            - parking_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: parking
          - type: 'null'
          title: Parking Id
        updated_on:
          format: date-time
          title: Updated On
          type: string
      required:
      - domain_forward_id
      - hostname
      - enabled
      - updated_on
      - created_on
      title: DomainForward
      type: object
    DomainForwardBrowserStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/BrowserStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardBrowserStatsResponse
      type: object
    DomainForwardCreateBulkCommand:
      properties:
        command:
          const: domain_forward_create_bulk
          default: domain_forward_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainForwardCreateBulkPayload'
          description: Bulk domain forward create payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainForwardCreateBulkCommand
      type: object
    DomainForwardCreateBulkInstance:
      properties:
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override enabled setting for this hostname
          title: Enabled
        hostname:
          description: Hostname to create forward for
          title: Hostname
          type: string
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: Override HTTP redirects
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: Override HTTPS redirects
      required:
      - hostname
      title: DomainForwardCreateBulkInstance
      type: object
    DomainForwardCreateBulkPayload:
      properties:
        instances:
          description: List of domain forwards to create (1-1000)
          items:
            $ref: '#/components/schemas/DomainForwardCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DomainForwardCreateBulkTemplate'
          description: Shared settings for all domain forwards
      required:
      - template
      - instances
      title: DomainForwardCreateBulkPayload
      type: object
    DomainForwardCreateBulkTemplate:
      properties:
        auto_create_zone:
          default: false
          description: Create apex DNS zone automatically when missing
          title: Auto Create Zone
          type: boolean
        enabled:
          default: false
          description: Whether domain forward should be enabled
          title: Enabled
          type: boolean
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: HTTP redirect definitions
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: HTTPS redirect definitions
      title: DomainForwardCreateBulkTemplate
      type: object
    DomainForwardCreateRequest:
      properties:
        enabled:
          default: false
          title: Enabled
          type: boolean
        hostname:
          title: Hostname
          type: string
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
      required:
      - hostname
      title: DomainForwardCreateRequest
      type: object
    DomainForwardDeleteBulkCommand:
      properties:
        command:
          const: domain_forward_delete_bulk
          default: domain_forward_delete_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainForwardDeleteBulkPayload'
          description: Bulk domain forward delete payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainForwardDeleteBulkCommand
      type: object
    DomainForwardDeleteBulkInstance:
      properties:
        hostname:
          description: Hostname to delete forwarding for
          title: Hostname
          type: string
      required:
      - hostname
      title: DomainForwardDeleteBulkInstance
      type: object
    DomainForwardDeleteBulkPayload:
      properties:
        instances:
          description: List of hostnames to delete forwarding for (1-1000)
          items:
            $ref: '#/components/schemas/DomainForwardDeleteBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: DomainForwardDeleteBulkPayload
      type: object
    DomainForwardDisableBulkCommand:
      properties:
        command:
          const: domain_forward_disable_bulk
          default: domain_forward_disable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainForwardDisableBulkPayload'
          description: Bulk domain forward disable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainForwardDisableBulkCommand
      type: object
    DomainForwardDisableBulkInstance:
      properties:
        hostname:
          description: Hostname to disable forwarding for
          title: Hostname
          type: string
      required:
      - hostname
      title: DomainForwardDisableBulkInstance
      type: object
    DomainForwardDisableBulkPayload:
      properties:
        instances:
          description: List of hostnames to disable forwarding for (1-1000)
          items:
            $ref: '#/components/schemas/DomainForwardDisableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: DomainForwardDisableBulkPayload
      type: object
    DomainForwardEnableBulkCommand:
      properties:
        command:
          const: domain_forward_enable_bulk
          default: domain_forward_enable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainForwardEnableBulkPayload'
          description: Bulk domain forward enable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainForwardEnableBulkCommand
      type: object
    DomainForwardEnableBulkInstance:
      properties:
        hostname:
          description: Hostname to enable forwarding for
          title: Hostname
          type: string
      required:
      - hostname
      title: DomainForwardEnableBulkInstance
      type: object
    DomainForwardEnableBulkPayload:
      properties:
        instances:
          description: List of hostnames to enable forwarding for (1-1000)
          items:
            $ref: '#/components/schemas/DomainForwardEnableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: DomainForwardEnableBulkPayload
      type: object
    DomainForwardGeoStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/GeoStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardGeoStatsResponse
      type: object
    DomainForwardMetricsResponse:
      properties:
        configured_forwards:
          title: Configured Forwards
          type: integer
        invoked_forwards:
          title: Invoked Forwards
          type: integer
        total_visits:
          title: Total Visits
          type: integer
        unique_visits:
          title: Unique Visits
          type: integer
      required:
      - invoked_forwards
      - configured_forwards
      - total_visits
      - unique_visits
      title: DomainForwardMetricsResponse
      type: object
    DomainForwardMetricsTimeSeriesResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/TimeSeriesBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardMetricsTimeSeriesResponse
      type: object
    DomainForwardPatchOp:
      properties:
        op:
          $ref: '#/components/schemas/PatchOp'
        redirect:
          anyOf:
          - $ref: '#/components/schemas/HttpRedirectUpsert'
          - $ref: '#/components/schemas/HttpRedirectRemove'
          title: Redirect
      required:
      - op
      - redirect
      title: DomainForwardPatchOp
      type: object
    DomainForwardPatchOps:
      properties:
        ops:
          items:
            $ref: '#/components/schemas/DomainForwardPatchOp'
          title: Ops
          type: array
      required:
      - ops
      title: DomainForwardPatchOps
      type: object
    DomainForwardPlatformStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/PlatformStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardPlatformStatsResponse
      type: object
    DomainForwardProtocolSetRequest:
      properties:
        redirects:
          items:
            $ref: '#/components/schemas/HttpRedirectRequest'
          title: Redirects
          type: array
      required:
      - redirects
      title: DomainForwardProtocolSetRequest
      type: object
    DomainForwardProtocolSetResponse:
      properties:
        created_on:
          format: date-time
          title: Created On
          type: string
        redirects:
          items:
            $ref: '#/components/schemas/HttpRedirectListResponse'
          title: Redirects
          type: array
        updated_on:
          format: date-time
          title: Updated On
          type: string
      required:
      - redirects
      - updated_on
      - created_on
      title: DomainForwardProtocolSetResponse
      type: object
    DomainForwardReferrerStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/ReferrerStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardReferrerStatsResponse
      type: object
    DomainForwardSetCreateRequest:
      properties:
        protocol:
          $ref: '#/components/schemas/HttpProtocol'
        redirects:
          items:
            $ref: '#/components/schemas/HttpRedirectRequest'
          title: Redirects
          type: array
      required:
      - protocol
      - redirects
      title: DomainForwardSetCreateRequest
      type: object
    DomainForwardSetRequest:
      properties:
        redirects:
          items:
            $ref: '#/components/schemas/HttpRedirectRequest'
          title: Redirects
          type: array
      required:
      - redirects
      title: DomainForwardSetRequest
      type: object
    DomainForwardSetResponse:
      properties:
        created_on:
          format: date-time
          title: Created On
          type: string
        hostname:
          title: Hostname
          type: string
        protocol:
          $ref: '#/components/schemas/HttpProtocol'
        redirects:
          items:
            $ref: '#/components/schemas/HttpRedirectListResponse'
          title: Redirects
          type: array
        updated_on:
          format: date-time
          title: Updated On
          type: string
      required:
      - hostname
      - protocol
      - redirects
      - updated_on
      - created_on
      title: DomainForwardSetResponse
      type: object
    DomainForwardSortField:
      enum:
      - hostname
      - enabled
      - created_on
      - updated_on
      title: DomainForwardSortField
      type: string
    DomainForwardStatusCodeStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/StatusCodeStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardStatusCodeStatsResponse
      type: object
    DomainForwardUpdateBulkCommand:
      properties:
        command:
          const: domain_forward_update_bulk
          default: domain_forward_update_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainForwardUpdateBulkPayload'
          description: Bulk domain forward update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainForwardUpdateBulkCommand
      type: object
    DomainForwardUpdateBulkInstance:
      properties:
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override enabled setting for this hostname
          title: Enabled
        hostname:
          description: Hostname to update forward for
          title: Hostname
          type: string
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: Override HTTP redirects
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: Override HTTPS redirects
      required:
      - hostname
      title: DomainForwardUpdateBulkInstance
      type: object
    DomainForwardUpdateBulkPayload:
      properties:
        instances:
          description: List of domain forwards to update (1-1000)
          items:
            $ref: '#/components/schemas/DomainForwardUpdateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DomainForwardUpdateBulkTemplate'
          description: Shared settings for all domain forwards
      required:
      - template
      - instances
      title: DomainForwardUpdateBulkPayload
      type: object
    DomainForwardUpdateBulkTemplate:
      properties:
        enabled:
          description: Whether domain forward should be enabled
          title: Enabled
          type: boolean
        http:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: HTTP redirect definitions
        https:
          anyOf:
          - $ref: '#/components/schemas/DomainForwardProtocolSetRequest'
          - type: 'null'
          description: HTTPS redirect definitions
      required:
      - enabled
      title: DomainForwardUpdateBulkTemplate
      type: object
    DomainForwardUserAgentStatsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/UserAgentStatsBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardUserAgentStatsResponse
      type: object
    DomainForwardVisitsByKeyResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/VisitsByKeyBucket'
          title: Results
          type: array
      required:
      - results
      title: DomainForwardVisitsByKeyResponse
      type: object
    DomainForwardZone:
      properties:
        domain_forwards:
          items:
            $ref: '#/components/schemas/DomainForward'
          title: Domain Forwards
          type: array
        zone_id:
          examples:
          - zone_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^zone_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Zone Id
          type: string
          x-typeid-prefix: zone
        zone_name:
          title: Zone Name
          type: string
      required:
      - zone_id
      - zone_name
      - domain_forwards
      title: DomainForwardZone
      type: object
    DomainForwardZoneSortField:
      enum:
      - name
      - created_on
      - updated_on
      title: DomainForwardZoneSortField
      type: string
    DomainForwardsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: domain_forwards
          default: domain_forwards
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_DomainForward_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: DomainForwardsContext
      type: object
    DomainForwardsContextCreate:
      properties:
        kind:
          const: domain_forwards
          default: domain_forwards
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_DomainForward_'
      required:
      - payload
      title: DomainForwardsContextCreate
      type: object
    DomainHostResponse:
      properties:
        host_id:
          description: The host id of the host
          examples:
          - host_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Host Id
          type: string
          x-typeid-prefix: host
      required:
      - host_id
      title: DomainHostResponse
      type: object
    DomainIncludeField:
      enum:
      - tags
      - renewal_price
      - connected_account
      title: DomainIncludeField
      type: string
    DomainLifecycleBase:
      properties:
        add_grace_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Add grace period in days after registration in ISO 8601 format
            (e.g., 5D, 3D)
          title: Add Grace Period
        auto_renew_before_expiration:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Time before expiration to auto-renew a domain in ISO 8601 format
            (e.g., 5D, -7D)
          title: Auto Renew Before Expiration
        default_transfer_renewal_period:
          $ref: '#/components/schemas/PeriodStr'
          description: Default period for transfer if no transfer_renewal_period is
            specified
        delete_before_expiration:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Time before expiration to delete a domain in ISO 8601 format
            (e.g., 5D, -7D)
          title: Delete Before Expiration
        delete_policy:
          anyOf:
          - items:
              $ref: '#/components/schemas/DeletePolicyType'
            type: array
          - type: 'null'
          description: How a domain can be deleted
          title: Delete Policy
        explicit_renew:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether an explicit renewal is possible
          title: Explicit Renew
        grace_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Grace period after expiration in ISO 8601 format (e.g., 5D,
            -7D)
          examples:
          - P5D
          - P30D
          title: Grace Period
        pending_delete:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Pending delete period in ISO 8601 format (e.g., 5D, 10D) after
            redemption_period
          title: Pending Delete
        redemption_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Redemption period for domain recovery after grace period in
            ISO 8601 format (e.g., 5D, -7D)
          title: Redemption Period
        registration_periods:
          $ref: '#/components/schemas/PeriodList'
          description: List of allowed registration periods (e.g., '1y' or ['1y',
            '2y', '5y'])
        registry_auto_renew:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Does the registry enforce auto-renewal
          title: Registry Auto Renew
        renewal_periods:
          $ref: '#/components/schemas/PeriodList'
          description: List of allowed renewal periods (e.g., '1y' or ['1y', '2y',
            '5y'])
        restore_triggers_renewal:
          default: true
          description: After a restore, renew the domain so its term matches the subscription.
            True for RGP registries, whose redemption restore does not extend the
            domain. False where the restore already leaves a valid term - e.g. NASK/.pl,
            where restore removes clientRenewProhibited or renews+reactivates, and
            a redundant renew is rejected (one renewal per billing period).
          title: Restore Triggers Renewal
          type: boolean
        rgp_operations:
          anyOf:
          - $ref: '#/components/schemas/RgpOperations'
          - type: 'null'
          description: RGP operations supported by the registry
        sync_after_operations:
          anyOf:
          - items:
              $ref: '#/components/schemas/SyncOperationType'
            type: array
          - type: 'null'
          description: Operations that trigger a sync with the registry
          title: Sync After Operations
        transfer_grace_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Transfer grace period after a transfer in ISO 8601 format (e.g.,
            5D, 3D)
          title: Transfer Grace Period
        transfer_renewal_periods:
          $ref: '#/components/schemas/PeriodList'
          description: List of allowed transfer renewal periods (eg. '1y')
      required:
      - default_transfer_renewal_period
      title: DomainLifecycleBase
      type: object
    DomainListIncludeField:
      description: 'Includes a list endpoint offers.


        Deliberately narrower than `DomainIncludeField`: resolving a renewal price

        costs a registry check plus a billing call per premium domain, which a page

        of results would multiply into a registry rate-limit problem.


        Both the public list route and the internal domains-service list request

        implement every member.'
      enum:
      - tags
      - connected_account
      title: DomainListIncludeField
      type: string
    DomainNameParts:
      properties:
        domain:
          anyOf:
          - type: string
          - type: 'null'
          examples:
          - example
          title: Domain
        subdomain:
          anyOf:
          - type: string
          - type: 'null'
          examples:
          - foo
          title: Subdomain
        suffix:
          anyOf:
          - type: string
          - type: 'null'
          examples:
          - com
          title: Suffix
      title: DomainNameParts
      type: object
    DomainPeriod:
      properties:
        unit:
          $ref: '#/components/schemas/PeriodUnit'
          description: The unit of the period
        value:
          description: Amount of time in the unit
          exclusiveMinimum: 0.0
          title: Value
          type: integer
      required:
      - value
      - unit
      title: DomainPeriod
      type: object
    DomainRecommendationsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: domain_recommendations
          default: domain_recommendations
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_DomainSearchSuggestionWithPrice_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: DomainRecommendationsContext
      type: object
    DomainRecommendationsContextCreate:
      properties:
        kind:
          const: domain_recommendations
          default: domain_recommendations
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_DomainSearchSuggestionWithPrice_'
      required:
      - payload
      title: DomainRecommendationsContextCreate
      type: object
    DomainRegistrarCredentialResponse:
      properties:
        name:
          description: Human-readable name for this credential
          title: Name
          type: string
        registrar:
          $ref: '#/components/schemas/Registrar'
          description: The registrar this credential is for
        registrar_credential_id:
          description: Unique identifier for this credential
          examples:
          - registrar_credential_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^registrar_credential_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Registrar Credential Id
          type: string
          x-typeid-prefix: registrar_credential
        type:
          const: ras
          description: 'Kind of connected account. `ras`: a registrar credential managed
            under `/v1/connect/registrars`.'
          title: Type
          type: string
      required:
      - type
      - registrar_credential_id
      - name
      - registrar
      title: DomainRegistrarCredentialResponse
      type: object
    DomainRenewRequest:
      properties:
        current_expiry_date:
          description: Current expiration date of the domain for validation
          format: date-time
          title: Current Expiry Date
          type: string
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        period:
          $ref: '#/components/schemas/DomainPeriod'
          description: How long to extend the domain registration
      required:
      - period
      - current_expiry_date
      title: DomainRenewRequest
      type: object
    DomainRenewResponse:
      properties:
        name:
          description: The domain name that was renewed
          title: Name
          type: string
        new_expiry_date:
          description: New expiration date after renewal
          format: date-time
          title: New Expiry Date
          type: string
        period_extended:
          $ref: '#/components/schemas/DomainPeriod'
          description: The period by which the domain was extended
      required:
      - name
      - new_expiry_date
      - period_extended
      title: DomainRenewResponse
      type: object
    DomainRenewalDetails:
      properties:
        detail_type:
          const: domain_renewal
          default: domain_renewal
          title: Detail Type
          type: string
        expires_on:
          format: date-time
          title: Expires On
          type: string
      required:
      - expires_on
      title: DomainRenewalDetails
      type: object
    DomainRenewalPriceResponse:
      properties:
        currency:
          description: ISO 4217 currency code
          examples:
          - EUR
          title: Currency
          type: string
        is_premium:
          description: True when the price came from the registry's premium classification
            for renew rather than from the organization's standard TLD pricing
          title: Is Premium
          type: boolean
        period:
          $ref: '#/components/schemas/DomainPeriod'
          description: Period the price covers
        price:
          description: Renewal price for the period below, in the organization's billing
            currency, taxes excluded
          examples:
          - '43.50'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Price
          type: string
      required:
      - price
      - currency
      - period
      - is_premium
      title: DomainRenewalPriceResponse
      type: object
    DomainResponse:
      properties:
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The auth code for the domain
          title: Auth Code
        auth_code_expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the auth code expires
          title: Auth Code Expires On
        canceled_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the domain was deleted
          title: Canceled On
        connected_account:
          anyOf:
          - discriminator:
              mapping:
                ras: '#/components/schemas/DomainRegistrarCredentialResponse'
              propertyName: type
            oneOf:
            - $ref: '#/components/schemas/DomainRegistrarCredentialResponse'
          - type: 'null'
          description: The connected account this domain is synced from. Null unless
            `include=connected_account` is requested, and null even then for natively
            registered domains, for domains on operator-managed registry accounts,
            and when the connected account was deleted.
          title: Connected Account
        contacts:
          description: The contacts of the domain
          items:
            $ref: '#/components/schemas/DomainContactResponse'
          title: Contacts
          type: array
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        deleted_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the domain will be deleted
          title: Deleted On
        domain_id:
          examples:
          - domain_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Id
          type: string
          x-typeid-prefix: domain
        expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the domain expires
          title: Expires On
        hosts:
          description: The subordinate hosts of the domain
          items:
            $ref: '#/components/schemas/DomainHostResponse'
          title: Hosts
          type: array
        is_premium:
          default: false
          description: 'Whether the registry prices this domain at a premium class
            for the action it was bought under. Not purchase provenance: a renewal-time
            check that affirmatively quotes renew as standard corrects the flag, so
            it tracks the registry''s current classification. Registries classify
            each action separately, so a domain premium only to restore is not premium
            here.'
          title: Is Premium
          type: boolean
        name:
          description: The domain name
          examples:
          - example.com
          title: Name
          type: string
        nameservers:
          description: The nameservers of the domain
          items:
            $ref: '#/components/schemas/Nameserver'
          title: Nameservers
          type: array
        owner_id:
          default: None
          description: The organization that owns the domain
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Owner Id
          type: string
          x-typeid-prefix: organization
        read_only:
          default: false
          description: "Whether the domain is read-only in OpusDNS. When `true`, the\
            \ domain is listed in your portfolio but cannot be managed \u2014 for\
            \ example while it awaits a migration, is locked for legal reasons, or\
            \ is managed at an external registrar. The flag is set and removed by\
            \ OpusDNS; it cannot be changed through the API."
          title: Read Only
          type: boolean
        registered_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the domain was registered
          title: Registered On
        registry_account_id:
          default: None
          examples:
          - registry_account_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^registry_account_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Registry Account Id
          type: string
          x-typeid-prefix: registry_account
        registry_statuses:
          description: All the domain statuses
          items:
            type: string
          title: Registry Statuses
          type: array
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
        renewal_period:
          anyOf:
          - type: string
          - type: 'null'
          description: Renewal period of the domain as an ISO 8601 duration (e.g.
            'P1M', 'P1Y'). Null when the domain is not set to renew (renewal mode
            'expire') or has no active subscription.
          title: Renewal Period
        renewal_price:
          anyOf:
          - $ref: '#/components/schemas/DomainRenewalPriceResponse'
          - type: 'null'
          description: Price this organization pays to renew this domain for one year.
            Only included when ?include=renewal_price is specified.
        roid:
          description: The registry object id of the domain
          examples:
          - D123456789-EXAMPLE-TEST
          title: Roid
          type: string
        sld:
          description: The second level domain
          examples:
          - example
          maxLength: 255
          minLength: 1
          title: Sld
          type: string
        status_tags:
          anyOf:
          - items:
              $ref: '#/components/schemas/StatusTagResponse'
            type: array
          - type: 'null'
          description: Status tags assigned to this domain. Null unless `include=tags`
            is requested.
          title: Status Tags
        tags:
          anyOf:
          - items:
              $ref: '#/components/schemas/TagEnrichedResponse'
            type: array
          - type: 'null'
          description: User tags assigned to this domain. Null unless `include=tags`
            is requested.
          title: Tags
        tld:
          description: The top level domain of the domain
          examples:
          - com
          maxLength: 255
          minLength: 1
          title: Tld
          type: string
        transfer_lock:
          default: false
          description: Whether the domain is locked for transfer
          title: Transfer Lock
          type: boolean
        transferred_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the domain was last transferred to us
          title: Transferred On
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        verification_required:
          anyOf:
          - $ref: '#/components/schemas/VerificationResponse'
          - type: 'null'
          description: Verification data for this domain, including pending claims
            and deadlines.
      required:
      - name
      - sld
      - tld
      - roid
      title: DomainResponse
      type: object
    DomainRestoreRequest:
      properties:
        additional_info:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information to include in the restore operation
          title: Additional Info
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        reason:
          anyOf:
          - type: string
          - type: 'null'
          description: Reason for restoring the domain
          title: Reason
      title: DomainRestoreRequest
      type: object
    DomainRestoreResponse:
      properties:
        domain_id:
          description: The ID of the restored domain
          examples:
          - domain_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Id
          type: string
          x-typeid-prefix: domain
        name:
          description: The name of the restored domain
          title: Name
          type: string
        restored_at:
          description: When the domain restore operation was completed
          format: date-time
          title: Restored At
          type: string
      required:
      - domain_id
      - name
      - restored_at
      title: DomainRestoreResponse
      type: object
    DomainSearchMeta:
      properties:
        processing_time_ms:
          title: Processing Time Ms
          type: integer
        total:
          title: Total
          type: integer
      required:
      - total
      - processing_time_ms
      title: DomainSearchMeta
      type: object
    DomainSearchResponse:
      properties:
        meta:
          $ref: '#/components/schemas/DomainSearchMeta'
        results:
          items:
            $ref: '#/components/schemas/DomainSearchSuggestionWithPrice'
          title: Results
          type: array
      required:
      - meta
      - results
      title: DomainSearchResponse
      type: object
    DomainSearchSuggestionPriceData:
      properties:
        amount:
          anyOf:
          - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            type: string
          - type: 'null'
          title: Amount
        currency:
          title: Currency
          type: string
        period:
          $ref: '#/components/schemas/DomainPeriod'
      required:
      - amount
      - currency
      - period
      title: DomainSearchSuggestionPriceData
      type: object
    DomainSearchSuggestionWithPrice:
      properties:
        available:
          title: Available
          type: boolean
        domain:
          title: Domain
          type: string
        premium:
          title: Premium
          type: boolean
        price:
          $ref: '#/components/schemas/DomainSearchSuggestionPriceData'
        renewal_price:
          anyOf:
          - $ref: '#/components/schemas/DomainSearchSuggestionPriceData'
          - type: 'null'
      required:
      - domain
      - available
      - premium
      - price
      title: DomainSearchSuggestionWithPrice
      type: object
    DomainSortField:
      enum:
      - name
      - created_on
      - updated_on
      - expires_on
      - registered_on
      - transferred_on
      title: DomainSortField
      type: string
    DomainStatisticsBreakdown:
      enum:
      - none
      - organization
      - tld
      title: DomainStatisticsBreakdown
      type: string
    DomainStatisticsBreakdownRowResponse:
      properties:
        create:
          title: Create
          type: integer
        delete:
          title: Delete
          type: integer
        key:
          description: Organization id, or the TLD without the leading dot
          title: Key
          type: string
        label:
          anyOf:
          - type: string
          - type: 'null'
          description: Organization name; absent for TLD rows
          title: Label
        net:
          description: Created plus transferred in, minus deleted and transferred
            out
          title: Net
          type: integer
        renew:
          title: Renew
          type: integer
        restore:
          title: Restore
          type: integer
        total:
          description: Created plus transferred
          title: Total
          type: integer
        transfer:
          title: Transfer
          type: integer
        transfer_out:
          title: Transfer Out
          type: integer
      required:
      - key
      - label
      - create
      - transfer
      - total
      - delete
      - transfer_out
      - renew
      - restore
      - net
      title: DomainStatisticsBreakdownRowResponse
      type: object
    DomainStatisticsBucketResponse:
      properties:
        create:
          description: Domains created in this bucket
          title: Create
          type: integer
        delete:
          description: Domains deleted in this bucket
          title: Delete
          type: integer
        net:
          description: Created plus transferred in, minus deleted and transferred
            out
          title: Net
          type: integer
        partial:
          description: The bucket reaches outside the requested window, so its counts
            cover only part of its span and must not be read as a rise or fall against
            its neighbours
          title: Partial
          type: boolean
        period_start:
          description: First day of the bucket (UTC)
          format: date
          title: Period Start
          type: string
        renew:
          description: Domain renewals in this bucket
          title: Renew
          type: integer
        restore:
          description: Domains restored in this bucket
          title: Restore
          type: integer
        transfer:
          description: Domains transferred in during this bucket
          title: Transfer
          type: integer
        transfer_out:
          description: Domains transferred away during this bucket
          title: Transfer Out
          type: integer
      required:
      - period_start
      - create
      - transfer
      - delete
      - transfer_out
      - renew
      - restore
      - net
      - partial
      title: DomainStatisticsBucketResponse
      type: object
    DomainStatisticsResponse:
      properties:
        breakdown:
          description: Top organizations or TLDs by acquisitions in the window; empty
            unless requested
          items:
            $ref: '#/components/schemas/DomainStatisticsBreakdownRowResponse'
          title: Breakdown
          type: array
        buckets:
          description: One entry per bucket the window touches, oldest first, including
            empty buckets
          items:
            $ref: '#/components/schemas/DomainStatisticsBucketResponse'
          title: Buckets
          type: array
        data_available_from:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Oldest day these statistics can report on. They are read from
            the domain event log, which starts later than the domains themselves,
            so a window reaching further back is empty before this instant rather
            than zero.
          title: Data Available From
        end_date:
          description: Last day of the window, inclusive
          format: date
          title: End Date
          type: string
        granularity:
          $ref: '#/components/schemas/UsageGranularity'
          description: Time-bucket size of the series
        organization_id:
          description: The organization the counts are scoped to
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        start_date:
          description: First day of the window, inclusive
          format: date
          title: Start Date
          type: string
        totals:
          $ref: '#/components/schemas/DomainStatisticsTotalsResponse'
      required:
      - organization_id
      - granularity
      - start_date
      - end_date
      - totals
      - buckets
      - breakdown
      - data_available_from
      title: DomainStatisticsResponse
      type: object
    DomainStatisticsTotalsResponse:
      properties:
        create:
          description: Domains created (newly registered) in the window
          title: Create
          type: integer
        delete:
          description: Domains deleted in the window
          title: Delete
          type: integer
        net:
          description: Created plus transferred in, minus deleted and transferred
            out
          title: Net
          type: integer
        renew:
          description: Domains renewed in the window, counted once per day a domain
            was renewed
          title: Renew
          type: integer
        restore:
          description: Domains restored from redemption in the window
          title: Restore
          type: integer
        total:
          description: Created plus transferred
          title: Total
          type: integer
        transfer:
          description: Domains transferred to OpusDNS in the window
          title: Transfer
          type: integer
        transfer_out:
          description: Domains transferred away from OpusDNS in the window
          title: Transfer Out
          type: integer
      required:
      - create
      - transfer
      - total
      - delete
      - transfer_out
      - renew
      - restore
      - net
      title: DomainStatisticsTotalsResponse
      type: object
    DomainStatus:
      enum:
      - ok
      - serverTransferProhibited
      - serverUpdateProhibited
      - serverDeleteProhibited
      - serverRenewProhibited
      - serverRestoreProhibited
      - serverHold
      - transferPeriod
      - renewPeriod
      - redemptionPeriod
      - pendingUpdate
      - pendingTransfer
      - pendingRestore
      - pendingRenew
      - pendingDelete
      - pendingCreate
      - inactive
      - autoRenewPeriod
      - addPeriod
      - deleted
      - clientTransferProhibited
      - clientUpdateProhibited
      - clientDeleteProhibited
      - clientRenewProhibited
      - clientHold
      - free
      - connect
      - failed
      - invalid
      title: DomainStatus
      type: string
    DomainStatusResponse:
      properties:
        status:
          description: The status of the domain
          title: Status
          type: string
      required:
      - status
      title: DomainStatusResponse
      type: object
    DomainStatusesBase:
      properties:
        default:
          description: The default status for an active domain with no restrictions
          items:
            type: string
          title: Default
          type: array
        status_mapping:
          anyOf:
          - additionalProperties:
              items:
                $ref: '#/components/schemas/DomainStatus'
              type: array
            type: object
          - type: 'null'
          description: Mapping of registry-specific statuses to their equivalent default
            ones, if any
          title: Status Mapping
        supported_statuses:
          description: Supported domain statuses
          items:
            type: string
          title: Supported Statuses
          type: array
      required:
      - default
      - supported_statuses
      title: DomainStatusesBase
      type: object
    DomainSummaryData:
      properties:
        by_organization:
          additionalProperties:
            type: integer
          description: 'Domain counts by organization name (name: count)'
          title: By Organization
          type: object
        by_status:
          additionalProperties:
            type: integer
          description: 'Domain counts by status (status: count)'
          title: By Status
          type: object
        by_status_tag:
          additionalProperties:
            type: integer
          description: 'Domain counts by status tag (status_tag: count), only status
            tags with at least one domain'
          propertyNames:
            $ref: '#/components/schemas/StatusTagType'
          title: By Status Tag
          type: object
        by_tld:
          additionalProperties:
            type: integer
          description: 'Domain counts by TLD (tld: count)'
          title: By Tld
          type: object
        expiring_soon:
          $ref: '#/components/schemas/DomainsExpiringSoon'
          description: Domains expiring soon
        total_count:
          description: Total number of domains including sub-organizations
          title: Total Count
          type: integer
      required:
      - total_count
      - by_status
      - by_status_tag
      - by_tld
      - by_organization
      - expiring_soon
      title: DomainSummaryData
      type: object
    DomainSummaryResponse:
      properties:
        domains:
          $ref: '#/components/schemas/DomainSummaryData'
          description: Domain summary data
        organization_id:
          description: The organization ID
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      required:
      - organization_id
      - domains
      title: DomainSummaryResponse
      type: object
    DomainTransferBulkCommand:
      properties:
        command:
          const: domain_transfer_bulk
          default: domain_transfer_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainTransferBulkPayload'
          description: Bulk domain transfer payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainTransferBulkCommand
      type: object
    DomainTransferBulkInstance:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Override attributes for this domain.\n\nAdditional attributes\
            \ of the domain, keyed by attribute name. Values are strings.\n\nCustomer-settable\
            \ keys:\n\n- `auto_renew_period`: `monthly` or `yearly`. All TLDs on create,\
            \ transfer-in and update. Selects the\n  period of the next renewal; the\
            \ current expiry date does not move. On transfer-in without `period` it\
            \ also sets the\n  period added by the transfer. Omitted on create or\
            \ transfer-in, it follows the term being bought: a one-month\n  `period`\
            \ renews monthly and anything else yearly, except a longer month-unit\
            \ term, which leaves it unset: the next\n  renewal then charges the term\
            \ that was bought where the TLD still renews for that term, and the product's\
            \ default\n  billing period otherwise. Supplying `monthly` where the TLD\
            \ sells no one-month renewal is rejected on create,\n  transfer-in and\
            \ update; a `monthly` stored before that rule applied is ignored at renewal.\n\
            - `music_registrant_attestation`: `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code for this domain (required by some TLDs)
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - type: 'null'
          description: Override contacts for this domain
        create_zone:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override create_zone for this domain
          title: Create Zone
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation. Required only
            for premium domains; must be set per-instance because each premium domain
            has its own price.
        name:
          description: The domain to transfer
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: Override nameservers for this domain
          title: Nameservers
        period:
          anyOf:
          - $ref: '#/components/schemas/DomainPeriod'
          - type: 'null'
          description: Override period for this domain
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: Override renewal mode for this domain
      required:
      - name
      title: DomainTransferBulkInstance
      type: object
    DomainTransferBulkPayload:
      properties:
        instances:
          description: List of domains to transfer (1-1000)
          items:
            $ref: '#/components/schemas/DomainTransferBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DomainTransferBulkTemplate'
          description: Shared settings for all domains
      required:
      - template
      - instances
      title: DomainTransferBulkPayload
      type: object
    DomainTransferBulkTemplate:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        contacts:
          $ref: '#/components/schemas/DomainContactHandles'
          description: The contacts of the domain. Optional for transfers when all
            supported contact roles have a minimum of 0 in the TLD specification.
        create_zone:
          default: false
          description: Create a zone on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          anyOf:
          - $ref: '#/components/schemas/DomainPeriod'
          - type: 'null'
          description: Additional registration period to add upon transfer completion
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - renewal_mode
      title: DomainTransferBulkTemplate
      type: object
    DomainTransferCommand:
      properties:
        command:
          const: domain_transfer
          default: domain_transfer
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainTransferPayloadData'
          description: Domain transfer payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainTransferCommand
      type: object
    DomainTransferIn:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code for the domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          description: The contacts of the domain. Optional for transfers when all
            supported contact roles have a minimum of 0 in the TLD specification.
          title: Contacts
        create_zone:
          default: false
          description: Create a zone for the domain on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        name:
          description: The domain to be created
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          anyOf:
          - $ref: '#/components/schemas/DomainPeriod'
          - type: 'null'
          description: Additional registration period to add to the domain upon transfer
            completion. If omitted, the registry default policy will be applied.
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - name
      - renewal_mode
      title: DomainTransferIn
      type: object
    DomainTransferPayloadData:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 6
            type: string
          - type: 'null'
          description: The auth code for the domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          description: The contacts of the domain. Optional for transfers when all
            supported contact roles have a minimum of 0 in the TLD specification.
          title: Contacts
        create_zone:
          default: false
          description: Create a zone for the domain on OpusDNS nameserver infrastructure
          title: Create Zone
          type: boolean
        expected_price:
          anyOf:
          - $ref: '#/components/schemas/StrictMoneyDecimal'
          - type: 'null'
          description: Expected price for premium domain confirmation
          title: Expected Price
        name:
          description: The domain to be created
          title: Name
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The name servers for the domain
          title: Nameservers
        period:
          anyOf:
          - $ref: '#/components/schemas/DomainPeriod'
          - type: 'null'
          description: Additional registration period to add to the domain upon transfer
            completion. If omitted, the registry default policy will be applied.
        renewal_mode:
          $ref: '#/components/schemas/RenewalMode'
          description: The renewal mode of the domain
      required:
      - name
      - renewal_mode
      title: DomainTransferPayloadData
      type: object
    DomainTransferWorkerPayload:
      properties:
        domain:
          $ref: '#/components/schemas/DomainTransferPayloadData'
        operation:
          title: Operation
          type: string
        type:
          enum:
          - domain_transfer
          - domain_transfer_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - domain
      title: DomainTransferWorkerPayload
      type: object
    DomainTransitRequest:
      properties:
        disconnect:
          description: Disconnect the domain from current nameserver and update to
            DENIC nameserver
          title: Disconnect
          type: boolean
      required:
      - disconnect
      title: DomainTransitRequest
      type: object
    DomainTransitResponse:
      properties:
        name:
          description: The domain name that was transited
          title: Name
          type: string
        success:
          description: Whether the transit operation was successful
          title: Success
          type: boolean
      required:
      - name
      - success
      title: DomainTransitResponse
      type: object
    DomainUpdate:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The new auth code for the domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          - type: 'null'
          description: The new contacts of the domain
          examples:
          - admin: contact_01h45ytscbebyvny4gc8cr8ma2
            billing: contact_01h45ytscbebyvny4gc8cr8ma2
            registrant: contact_01h45ytscbebyvny4gc8cr8ma2
            tech: contact_01h45ytscbebyvny4gc8cr8ma2
          title: Contacts
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The new name servers for the domain
          title: Nameservers
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: The new renewal mode of the domain
        status_changes:
          anyOf:
          - $ref: '#/components/schemas/StatusChanges'
          - type: 'null'
          description: Statuses to add or remove relative to current state
        statuses:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainClientStatus'
            type: array
          - type: 'null'
          description: The new statuses of the domain
          title: Statuses
      title: DomainUpdate
      type: object
    DomainUpdateBulkCommand:
      properties:
        command:
          const: domain_update_bulk
          default: domain_update_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainUpdateBulkPayload'
          description: Bulk domain update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainUpdateBulkCommand
      type: object
    DomainUpdateBulkInstance:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Override attributes for this domain.\n\nAdditional attributes\
            \ of the domain, keyed by attribute name. Values are strings.\n\nCustomer-settable\
            \ keys:\n\n- `auto_renew_period`: `monthly` or `yearly`. All TLDs on create,\
            \ transfer-in and update. Selects the\n  period of the next renewal; the\
            \ current expiry date does not move. On transfer-in without `period` it\
            \ also sets the\n  period added by the transfer. Omitted on create or\
            \ transfer-in, it follows the term being bought: a one-month\n  `period`\
            \ renews monthly and anything else yearly, except a longer month-unit\
            \ term, which leaves it unset: the next\n  renewal then charges the term\
            \ that was bought where the TLD still renews for that term, and the product's\
            \ default\n  billing period otherwise. Supplying `monthly` where the TLD\
            \ sells no one-month renewal is rejected on create,\n  transfer-in and\
            \ update; a `monthly` stored before that rule applied is ignored at renewal.\n\
            - `music_registrant_attestation`: `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Override auth code for this domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - type: 'null'
          description: Override contacts for this domain
        domain_id:
          anyOf:
          - type: string
          - type: 'null'
          description: The domain ID to update
          title: Domain Id
        name:
          anyOf:
          - type: string
          - type: 'null'
          description: The domain name to update
          title: Name
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: Override nameservers for this domain
          title: Nameservers
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: Override renewal mode for this domain
        status_changes:
          anyOf:
          - $ref: '#/components/schemas/StatusChanges'
          - type: 'null'
          description: Override status changes for this domain
        statuses:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainClientStatus'
            type: array
          - type: 'null'
          description: Override statuses for this domain
          title: Statuses
      title: DomainUpdateBulkInstance
      type: object
    DomainUpdateBulkPayload:
      properties:
        instances:
          description: List of domains to update (1-1000)
          items:
            $ref: '#/components/schemas/DomainUpdateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/DomainUpdateBulkTemplate'
          description: Shared settings for all domain updates
      required:
      - template
      - instances
      title: DomainUpdateBulkPayload
      type: object
    DomainUpdateBulkTemplate:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          title: Attributes
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - type: 'null'
          description: The new contacts of the domain
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The new name servers for the domain
          title: Nameservers
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: The new renewal mode of the domain
        status_changes:
          anyOf:
          - $ref: '#/components/schemas/StatusChanges'
          - type: 'null'
          description: Statuses to add or remove relative to current state
        statuses:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainClientStatus'
            type: array
          - type: 'null'
          description: The new statuses of the domain
          title: Statuses
      title: DomainUpdateBulkTemplate
      type: object
    DomainUpdateCommand:
      properties:
        command:
          const: domain_update
          default: domain_update
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/DomainUpdatePayloadData'
          description: Domain update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: DomainUpdateCommand
      type: object
    DomainUpdatePayloadData:
      properties:
        attributes:
          anyOf:
          - additionalProperties:
              type: string
            propertyNames:
              $ref: '#/components/schemas/DomainAttributeKey'
            type: object
          - type: 'null'
          description: "Additional attributes of the domain, keyed by attribute name.\
            \ Values are strings.\n\nCustomer-settable keys:\n\n- `auto_renew_period`:\
            \ `monthly` or `yearly`. All TLDs on create, transfer-in and update. Selects\
            \ the\n  period of the next renewal; the current expiry date does not\
            \ move. On transfer-in without `period` it also sets the\n  period added\
            \ by the transfer. Omitted on create or transfer-in, it follows the term\
            \ being bought: a one-month\n  `period` renews monthly and anything else\
            \ yearly, except a longer month-unit term, which leaves it unset: the\
            \ next\n  renewal then charges the term that was bought where the TLD\
            \ still renews for that term, and the product's default\n  billing period\
            \ otherwise. Supplying `monthly` where the TLD sells no one-month renewal\
            \ is rejected on create,\n  transfer-in and update; a `monthly` stored\
            \ before that rule applied is ignored at renewal.\n- `music_registrant_attestation`:\
            \ `true`. `.music` registration.\n- `nic_it_compliance_confirmation`:\
            \ `true`. `.it` registration and transfer.\n- `travel_industry_acknowledgement`:\
            \ `true`. `.travel` registration.\n- `internet_ee_registrant_agreement`:\
            \ `true`. `.ee` registration.\n- `punktum_dk_terms_acceptance`: `true`.\
            \ `.dk` registration and registrant change.\n- `de_general_request_contact`,\
            \ `de_abuse_contact`: id of a contact whose `.de` attribute set has `DE_CONTACT_TYPE`\
            \ =\n  `REQUEST`. `.de` only.\n\nBoolean keys also accept `1` and `yes`.\n\
            \nWritten by the platform and rejected if supplied: `verification_required`,\
            \ `promotion`, `promotion_eligibility`,\n`nor_id_declaration`, `nor_id_declaration_token`,\
            \ `punktum_dk_tracking_no`, `domain_contact_attributes`,\n`registry_reseller_id`.\
            \ They are never returned under `attributes`; inline contact attributes\
            \ surface on the matching\n`contacts` entry instead.\n\nDerived from the\
            \ signed `.no` applicant declaration and ignored if supplied on create:\
            \ `nor_id_applicant_version`,\n`nor_id_applicant_accept_name`, `nor_id_applicant_accept_date`.\n\
            \nOn update, every registry stores the supplied attributes, and the update\
            \ is not sent to the registry unless they\nstore; a registry that rejects\
            \ the change stores nothing. An empty value removes the stored attribute,\
            \ except for\n`auto_renew_period`, whose only accepted values are `monthly`\
            \ and `yearly`. `.dk` also reads\n`punktum_dk_terms_acceptance` to confirm\
            \ a registrant change. An update cannot change what the registrant accepted\
            \ at\nregistration, so these are rejected on update: `music_registrant_attestation`,\
            \ `nic_it_compliance_confirmation`,\n`travel_industry_acknowledgement`,\
            \ `internet_ee_registrant_agreement` and the three `nor_id_applicant_*`\
            \ keys.\n`punktum_dk_terms_acceptance` stays settable for a registrant\
            \ change but cannot be removed with an empty value.\n"
          examples:
          - auto_renew_period: monthly
          title: Attributes
        auth_code:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The new auth code for the domain
          title: Auth Code
        contacts:
          anyOf:
          - $ref: '#/components/schemas/DomainContactHandles'
          - $ref: '#/components/schemas/ContactIdList'
          - type: 'null'
          description: The new contacts of the domain
          examples:
          - admin: contact_01h45ytscbebyvny4gc8cr8ma2
            billing: contact_01h45ytscbebyvny4gc8cr8ma2
            registrant: contact_01h45ytscbebyvny4gc8cr8ma2
            tech: contact_01h45ytscbebyvny4gc8cr8ma2
          title: Contacts
        domain_id:
          description: Domain ID to update
          title: Domain Id
          type: string
        nameservers:
          anyOf:
          - items:
              $ref: '#/components/schemas/Nameserver'
            type: array
          - type: 'null'
          description: The new name servers for the domain
          title: Nameservers
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalMode'
          - type: 'null'
          description: The new renewal mode of the domain
        status_changes:
          anyOf:
          - $ref: '#/components/schemas/StatusChanges'
          - type: 'null'
          description: Statuses to add or remove relative to current state
        statuses:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainClientStatus'
            type: array
          - type: 'null'
          description: The new statuses of the domain
          title: Statuses
      required:
      - domain_id
      title: DomainUpdatePayloadData
      type: object
    DomainUpdateWorkerPayload:
      properties:
        domain:
          $ref: '#/components/schemas/DomainUpdatePayloadData'
        operation:
          title: Operation
          type: string
        type:
          enum:
          - domain_update
          - domain_update_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - domain
      title: DomainUpdateWorkerPayload
      type: object
    DomainVerificationDetails:
      properties:
        detail_type:
          const: domain_verification
          default: domain_verification
          title: Detail Type
          type: string
        domain_id:
          title: Domain Id
          type: string
        registrants:
          items:
            $ref: '#/components/schemas/VerificationRegistrantDetails'
          title: Registrants
          type: array
        verification_claims:
          items:
            $ref: '#/components/schemas/VerificationClaimType'
          title: Verification Claims
          type: array
        verification_deadlines:
          items:
            $ref: '#/components/schemas/VerificationDeadline'
          title: Verification Deadlines
          type: array
      required:
      - domain_id
      title: DomainVerificationDetails
      type: object
    DomainWithdrawRequest:
      properties:
        zone_delete:
          description: 'Informs the registry whether the zone for that domain has
            been already deleted - as took from the docs: "(...) the registrar informs
            the registry that he has stopped the nameservice for the specified domain"'
          title: Zone Delete
          type: boolean
      required:
      - zone_delete
      title: DomainWithdrawRequest
      type: object
    DomainWithdrawResponse:
      properties:
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Why the withdraw did not succeed
          title: Detail
        name:
          description: The domain name that was withdrawn
          title: Name
          type: string
        success:
          description: Whether the withdraw operation was successful
          title: Success
          type: boolean
      required:
      - name
      - success
      title: DomainWithdrawResponse
      type: object
    DomainsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: domains
          default: domains
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarDomain_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: DomainsContext
      type: object
    DomainsContextCreate:
      properties:
        kind:
          const: domains
          default: domains
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarDomain_'
      required:
      - payload
      title: DomainsContextCreate
      type: object
    DomainsExpiringSoon:
      properties:
        next_30_days:
          description: Number of domains expiring in the next 30 days
          title: Next 30 Days
          type: integer
        next_60_days:
          description: Number of domains expiring in the next 60 days
          title: Next 60 Days
          type: integer
        next_90_days:
          description: Number of domains expiring in the next 90 days
          title: Next 90 Days
          type: integer
      required:
      - next_30_days
      - next_60_days
      - next_90_days
      title: DomainsExpiringSoon
      type: object
    DuplicateCommand:
      properties:
        existing_batch_id:
          anyOf:
          - examples:
            - batch_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: batch
          - type: 'null'
          description: "batch_id of the batch the existing job belongs to. Use this\
            \ with /v1/jobs/{batch_id} to check status \u2014 the batch_id returned\
            \ at the top level of this response will 404 if no new jobs were created."
          title: Existing Batch Id
        existing_job_id:
          description: ID of the previously-created job whose idempotency_key matched
            this command
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Existing Job Id
          type: string
          x-typeid-prefix: job
        index:
          description: Index of the duplicate command in the request
          title: Index
          type: integer
        instance_index:
          anyOf:
          - type: integer
          - type: 'null'
          description: Index within a bulk command's instances[] for per-instance
            duplicates
          title: Instance Index
        resource_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Resource identifier (zone name, domain name, contact email)
            for this duplicate
          title: Resource Key
      required:
      - index
      - existing_job_id
      title: DuplicateCommand
      type: object
    EmailForwardAlias:
      properties:
        alias:
          title: Alias
          type: string
        email_forward_alias_id:
          examples:
          - email_forward_alias_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_alias_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Alias Id
          type: string
          x-typeid-prefix: email_forward_alias
        forward_to:
          items:
            format: email
            type: string
          minItems: 1
          title: Forward To
          type: array
      required:
      - alias
      - forward_to
      - email_forward_alias_id
      title: EmailForwardAlias
      type: object
    EmailForwardAliasCreate:
      properties:
        alias:
          title: Alias
          type: string
        forward_to:
          items:
            format: email
            type: string
          minItems: 1
          title: Forward To
          type: array
      required:
      - alias
      - forward_to
      title: EmailForwardAliasCreate
      type: object
    EmailForwardAliasMetrics:
      properties:
        alias:
          description: Email alias address
          title: Alias
          type: string
        by_status:
          additionalProperties:
            type: integer
          description: Log counts grouped by status
          propertyNames:
            $ref: '#/components/schemas/EmailForwardLogStatus'
          title: By Status
          type: object
        total_logs:
          description: Total number of logs for this alias
          title: Total Logs
          type: integer
      required:
      - alias
      - total_logs
      - by_status
      title: EmailForwardAliasMetrics
      type: object
    EmailForwardAliasUpdate:
      properties:
        forward_to:
          items:
            format: email
            type: string
          minItems: 1
          title: Forward To
          type: array
      required:
      - forward_to
      title: EmailForwardAliasUpdate
      type: object
    EmailForwardCreate:
      properties:
        aliases:
          default: []
          items:
            $ref: '#/components/schemas/EmailForwardAliasCreate'
          title: Aliases
          type: array
        enabled:
          default: false
          title: Enabled
          type: boolean
        hostname:
          title: Hostname
          type: string
      required:
      - hostname
      title: EmailForwardCreate
      type: object
    EmailForwardCreateBulkCommand:
      properties:
        command:
          const: email_forward_create_bulk
          default: email_forward_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/EmailForwardCreateBulkPayload'
          description: Bulk email forward create payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: EmailForwardCreateBulkCommand
      type: object
    EmailForwardCreateBulkInstance:
      properties:
        aliases:
          anyOf:
          - items:
              $ref: '#/components/schemas/EmailForwardAliasCreate'
            type: array
          - type: 'null'
          description: Override aliases
          title: Aliases
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override enabled setting for this hostname
          title: Enabled
        hostname:
          description: Hostname to create email forwarding for
          title: Hostname
          type: string
      required:
      - hostname
      title: EmailForwardCreateBulkInstance
      type: object
    EmailForwardCreateBulkPayload:
      properties:
        instances:
          description: List of email forwards to create (1-1000)
          items:
            $ref: '#/components/schemas/EmailForwardCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/EmailForwardCreateBulkTemplate'
          description: Shared settings for all email forwards
      required:
      - template
      - instances
      title: EmailForwardCreateBulkPayload
      type: object
    EmailForwardCreateBulkTemplate:
      properties:
        aliases:
          description: Aliases to create
          items:
            $ref: '#/components/schemas/EmailForwardAliasCreate'
          title: Aliases
          type: array
        auto_create_zone:
          default: false
          description: Create apex DNS zone automatically when missing
          title: Auto Create Zone
          type: boolean
        enabled:
          default: false
          description: Whether email forwarding should be enabled
          title: Enabled
          type: boolean
      title: EmailForwardCreateBulkTemplate
      type: object
    EmailForwardDeleteBulkCommand:
      properties:
        command:
          const: email_forward_delete_bulk
          default: email_forward_delete_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/EmailForwardDeleteBulkPayload'
          description: Bulk email forward delete payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: EmailForwardDeleteBulkCommand
      type: object
    EmailForwardDeleteBulkInstance:
      properties:
        email_forward_id:
          anyOf:
          - examples:
            - email_forward_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: email_forward
          - type: 'null'
          description: Email forward ID to target
          title: Email Forward Id
        hostname:
          anyOf:
          - type: string
          - type: 'null'
          description: Hostname to target
          title: Hostname
      title: EmailForwardDeleteBulkInstance
      type: object
    EmailForwardDeleteBulkPayload:
      properties:
        instances:
          description: List of email forwards to delete (1-1000)
          items:
            $ref: '#/components/schemas/EmailForwardDeleteBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: EmailForwardDeleteBulkPayload
      type: object
    EmailForwardDisableBulkCommand:
      properties:
        command:
          const: email_forward_disable_bulk
          default: email_forward_disable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/EmailForwardDisableBulkPayload'
          description: Bulk email forward disable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: EmailForwardDisableBulkCommand
      type: object
    EmailForwardDisableBulkInstance:
      properties:
        email_forward_id:
          anyOf:
          - examples:
            - email_forward_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: email_forward
          - type: 'null'
          description: Email forward ID to target
          title: Email Forward Id
        hostname:
          anyOf:
          - type: string
          - type: 'null'
          description: Hostname to target
          title: Hostname
      title: EmailForwardDisableBulkInstance
      type: object
    EmailForwardDisableBulkPayload:
      properties:
        instances:
          description: List of email forwards to disable (1-1000)
          items:
            $ref: '#/components/schemas/EmailForwardDisableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: EmailForwardDisableBulkPayload
      type: object
    EmailForwardEnableBulkCommand:
      properties:
        command:
          const: email_forward_enable_bulk
          default: email_forward_enable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/EmailForwardEnableBulkPayload'
          description: Bulk email forward enable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: EmailForwardEnableBulkCommand
      type: object
    EmailForwardEnableBulkInstance:
      properties:
        email_forward_id:
          anyOf:
          - examples:
            - email_forward_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: email_forward
          - type: 'null'
          description: Email forward ID to target
          title: Email Forward Id
        hostname:
          anyOf:
          - type: string
          - type: 'null'
          description: Hostname to target
          title: Hostname
      title: EmailForwardEnableBulkInstance
      type: object
    EmailForwardEnableBulkPayload:
      properties:
        instances:
          description: List of email forwards to enable (1-1000)
          items:
            $ref: '#/components/schemas/EmailForwardEnableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: EmailForwardEnableBulkPayload
      type: object
    EmailForwardLog:
      properties:
        created_on:
          description: Timestamp when email was received by ImprovMX
          format: date-time
          title: Created On
          type: string
        domain:
          description: Domain name
          title: Domain
          type: string
        events:
          description: List of processing events
          items:
            $ref: '#/components/schemas/EmailForwardLogEvent'
          title: Events
          type: array
        final_status:
          $ref: '#/components/schemas/EmailForwardLogStatus'
          description: Final status of the email (QUEUED, DELIVERED, REFUSED, SOFT-BOUNCE,
            HARD-BOUNCE)
        forward_email:
          description: Forward destination email address
          title: Forward Email
          type: string
        forward_name:
          anyOf:
          - type: string
          - type: 'null'
          description: Forward destination name
          title: Forward Name
        hostname:
          description: Hostname that received the email
          title: Hostname
          type: string
        log_id:
          description: Unique ID of the log from ImprovMX
          title: Log Id
          type: string
        message_id:
          description: Email message ID
          title: Message Id
          type: string
        recipient_email:
          description: Recipient email address (the alias)
          title: Recipient Email
          type: string
        recipient_name:
          anyOf:
          - type: string
          - type: 'null'
          description: Recipient name
          title: Recipient Name
        sender_email:
          description: Sender email address
          title: Sender Email
          type: string
        sender_name:
          anyOf:
          - type: string
          - type: 'null'
          description: Sender name
          title: Sender Name
        subject:
          description: Email subject
          title: Subject
          type: string
        synced_on:
          description: Timestamp when record was synced to ClickHouse
          format: date-time
          title: Synced On
          type: string
        transport:
          description: Transport method (mx or smtp)
          title: Transport
          type: string
      required:
      - log_id
      - domain
      - sender_email
      - recipient_email
      - forward_email
      - subject
      - hostname
      - message_id
      - transport
      - final_status
      - created_on
      - synced_on
      title: EmailForwardLog
      type: object
    EmailForwardLogEvent:
      properties:
        code:
          description: Event status code
          title: Code
          type: integer
        created:
          description: Timestamp when the event occurred
          format: date-time
          title: Created
          type: string
        id:
          description: Event ID
          title: Id
          type: string
        local:
          description: ImprovMX server that processed the event
          title: Local
          type: string
        message:
          description: Event message
          title: Message
          type: string
        server:
          description: Server that processed the event
          title: Server
          type: string
        status:
          description: Event status (QUEUED, DELIVERED, REFUSED, SOFT-BOUNCE, HARD-BOUNCE)
          title: Status
          type: string
      required:
      - code
      - created
      - id
      - local
      - message
      - server
      - status
      title: EmailForwardLogEvent
      type: object
    EmailForwardLogSortField:
      enum:
      - log_id
      - sender_email
      - recipient_email
      - forward_email
      - final_status
      - created_on
      - synced_on
      title: EmailForwardLogSortField
      type: string
    EmailForwardLogStatus:
      enum:
      - UNKNOWN
      - QUEUED
      - DELIVERED
      - REFUSED
      - SOFT-BOUNCE
      - HARD-BOUNCE
      title: EmailForwardLogStatus
      type: string
    EmailForwardMetrics:
      properties:
        alias_count:
          anyOf:
          - type: integer
          - type: 'null'
          description: Number of aliases
          title: Alias Count
        by_alias:
          anyOf:
          - items:
              $ref: '#/components/schemas/EmailForwardAliasMetrics'
            type: array
          - type: 'null'
          description: Metrics breakdown per alias
          title: By Alias
        by_status:
          additionalProperties:
            type: integer
          description: Log counts grouped by status (QUEUED, DELIVERED, REFUSED, SOFT-BOUNCE,
            HARD-BOUNCE)
          propertyNames:
            $ref: '#/components/schemas/EmailForwardLogStatus'
          title: By Status
          type: object
        filters:
          $ref: '#/components/schemas/EmailForwardMetricsFilters'
          description: Applied filters
        rates:
          $ref: '#/components/schemas/EmailForwardMetricsRates'
          description: Rate percentages for each status
        total_logs:
          description: Total number of email forward logs
          title: Total Logs
          type: integer
      required:
      - total_logs
      - by_status
      - rates
      - filters
      title: EmailForwardMetrics
      type: object
    EmailForwardMetricsFilters:
      properties:
        domain:
          description: Domain name
          title: Domain
          type: string
        end_time:
          anyOf:
          - type: string
          - type: 'null'
          description: End time filter (RFC3339)
          title: End Time
        include_aliases:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether alias breakdown is included
          title: Include Aliases
        start_time:
          anyOf:
          - type: string
          - type: 'null'
          description: Start time filter (RFC3339)
          title: Start Time
      required:
      - domain
      title: EmailForwardMetricsFilters
      type: object
    EmailForwardMetricsRates:
      properties:
        bounce_rate:
          description: Bounce rate percentage
          title: Bounce Rate
          type: number
        delivery_rate:
          description: Delivery rate percentage
          title: Delivery Rate
          type: number
        queued_rate:
          description: Queued rate percentage
          title: Queued Rate
          type: number
        refused_rate:
          description: Refused rate percentage
          title: Refused Rate
          type: number
      required:
      - delivery_rate
      - refused_rate
      - queued_rate
      - bounce_rate
      title: EmailForwardMetricsRates
      type: object
    EmailForwardResponse:
      properties:
        aliases:
          items:
            $ref: '#/components/schemas/EmailForwardAlias'
          title: Aliases
          type: array
        created_on:
          format: date-time
          title: Created On
          type: string
        email_forward_id:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
        enabled:
          title: Enabled
          type: boolean
        hostname:
          title: Hostname
          type: string
        updated_on:
          format: date-time
          title: Updated On
          type: string
      required:
      - email_forward_id
      - hostname
      - enabled
      - aliases
      - created_on
      - updated_on
      title: EmailForwardResponse
      type: object
    EmailForwardSortField:
      enum:
      - hostname
      - enabled
      - created_on
      - updated_on
      title: EmailForwardSortField
      type: string
    EmailForwardUpdateBulkCommand:
      properties:
        command:
          const: email_forward_update_bulk
          default: email_forward_update_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/EmailForwardUpdateBulkPayload'
          description: Bulk email forward update payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: EmailForwardUpdateBulkCommand
      type: object
    EmailForwardUpdateBulkInstance:
      properties:
        aliases:
          anyOf:
          - items:
              $ref: '#/components/schemas/EmailForwardAliasCreate'
            type: array
          - type: 'null'
          description: Override aliases (replace-all)
          title: Aliases
        email_forward_id:
          anyOf:
          - examples:
            - email_forward_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: email_forward
          - type: 'null'
          description: Email forward ID to target
          title: Email Forward Id
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override enabled setting
          title: Enabled
        hostname:
          anyOf:
          - type: string
          - type: 'null'
          description: Hostname to target
          title: Hostname
      title: EmailForwardUpdateBulkInstance
      type: object
    EmailForwardUpdateBulkPayload:
      properties:
        instances:
          description: List of email forwards to update (1-1000)
          items:
            $ref: '#/components/schemas/EmailForwardUpdateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/EmailForwardUpdateBulkTemplate'
          description: Shared settings for all email forwards
      required:
      - template
      - instances
      title: EmailForwardUpdateBulkPayload
      type: object
    EmailForwardUpdateBulkTemplate:
      properties:
        aliases:
          anyOf:
          - items:
              $ref: '#/components/schemas/EmailForwardAliasCreate'
            type: array
          - type: 'null'
          description: Aliases to set (replace-all)
          title: Aliases
        enabled:
          description: Whether email forwarding should be enabled
          title: Enabled
          type: boolean
      required:
      - enabled
      title: EmailForwardUpdateBulkTemplate
      type: object
    EmailForwardZone:
      properties:
        email_forwards:
          items:
            $ref: '#/components/schemas/EmailForwardResponse'
          title: Email Forwards
          type: array
        zone_id:
          examples:
          - zone_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^zone_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Zone Id
          type: string
          x-typeid-prefix: zone
        zone_name:
          title: Zone Name
          type: string
      required:
      - zone_id
      - zone_name
      - email_forwards
      title: EmailForwardZone
      type: object
    EmailForwardZoneSortField:
      enum:
      - name
      - created_on
      - updated_on
      title: EmailForwardZoneSortField
      type: string
    EmailForwardsContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: email_forwards
          default: email_forwards
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_EmailForwardResponse_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: EmailForwardsContext
      type: object
    EmailForwardsContextCreate:
      properties:
        kind:
          const: email_forwards
          default: email_forwards
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_EmailForwardResponse_'
      required:
      - payload
      title: EmailForwardsContextCreate
      type: object
    EmailVerificationPolicy:
      properties:
        communication:
          $ref: '#/components/schemas/Communication'
        contact_roles:
          description: For which type of Contacts this verification needs to be done
          items:
            $ref: '#/components/schemas/DomainContactType'
          title: Contact Roles
          type: array
        enabled:
          description: Whether this Verification is enabled
          title: Enabled
          type: boolean
        suspension_delay:
          description: After how many Days should the domain be suspended
          title: Suspension Delay
          type: string
        suspension_on_failure:
          description: Should the Domain be suspended if the verification was not
            successfull
          title: Suspension On Failure
          type: boolean
        trigger:
          description: The operations that will trigger this verification
          items:
            type: string
          title: Trigger
          type: array
        validity_period:
          anyOf:
          - $ref: '#/components/schemas/PeriodStr'
          - type: 'null'
        verification_method:
          title: Verification Method
          type: string
      required:
      - enabled
      - contact_roles
      - trigger
      - validity_period
      - suspension_on_failure
      - suspension_delay
      - verification_method
      - communication
      title: EmailVerificationPolicy
      type: object
    EmailVerificationStatus:
      enum:
      - verified
      - pending
      - canceled
      title: EmailVerificationStatus
      type: string
    EventData:
      properties:
        details:
          anyOf:
          - discriminator:
              mapping:
                domain_renewal: '#/components/schemas/DomainRenewalDetails'
                domain_verification: '#/components/schemas/DomainVerificationDetails'
              propertyName: detail_type
            oneOf:
            - $ref: '#/components/schemas/DomainRenewalDetails'
            - $ref: '#/components/schemas/DomainVerificationDetails'
          - type: 'null'
          title: Details
        error:
          anyOf:
          - $ref: '#/components/schemas/EventError'
          - type: 'null'
        message:
          title: Message
          type: string
        version:
          $ref: '#/components/schemas/EventVersion'
          default: '1.0'
      required:
      - message
      title: EventData
      type: object
    EventError:
      properties:
        code:
          title: Code
          type: string
        detail:
          title: Detail
          type: string
      required:
      - code
      - detail
      title: EventError
      type: object
    EventObjectType:
      enum:
      - DOMAIN
      - CONTACT
      - HOST
      - ACCOUNT
      - VANITY_NS_SET
      - RAW
      - UNKNOWN
      title: EventObjectType
      type: string
    EventResponse:
      properties:
        acknowledged_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the event was acknowledged
          title: Acknowledged On
        created_on:
          description: When the event was created
          format: date-time
          title: Created On
          type: string
        event_data:
          $ref: '#/components/schemas/EventData'
        event_id:
          examples:
          - event_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^event_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Event Id
          type: string
          x-typeid-prefix: event
        object_id:
          anyOf:
          - type: string
          - type: 'null'
          description: The id of the object that the event is about
          title: Object Id
        object_type:
          $ref: '#/components/schemas/EventObjectType'
          default: RAW
          description: The type of object that the event is about
        subtype:
          anyOf:
          - $ref: '#/components/schemas/EventSubtype'
          - type: 'null'
          description: The specific type/result of operation (considering the type
            property), more detailed (e.g., 'NOTIFICATION' with the 'DOMAIN_MODIFICATION'
            class)
        type:
          anyOf:
          - $ref: '#/components/schemas/EventType'
          - type: 'null'
          description: The type of the event - indicates the kind of operation occurring
            (e.g., 'ACCOUNT_CREATE', 'DOMAIN_MODIFICATION')
      required:
      - event_data
      - created_on
      title: EventResponse
      type: object
    EventSortField:
      enum:
      - object_id
      - created_on
      title: EventSortField
      type: string
    EventSubtype:
      enum:
      - NOTIFICATION
      - SUCCESS
      - FAILURE
      - CANCELED
      title: EventSubtype
      type: string
    EventType:
      enum:
      - REGISTRATION
      - RENEWAL
      - MODIFICATION
      - DELETION
      - INBOUND_TRANSFER
      - OUTBOUND_TRANSFER
      - TRANSIT
      - WITHDRAW
      - VERIFICATION
      - BALANCE
      - VANITY_NS_PROVISION
      - VANITY_NS_SUSPENSION
      - VANITY_NS_RESTORATION
      - VANITY_NS_TERMINATION
      - CLONE
      title: EventType
      type: string
    EventVersion:
      enum:
      - '1.0'
      title: EventVersion
      type: string
    ExecutingEntity:
      enum:
      - user
      - organization
      - system
      title: ExecutingEntity
      type: string
    Footer:
      properties:
        legal_entity:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          title: Legal Entity
        lines:
          anyOf:
          - items:
              maxLength: 255
              minLength: 1
              type: string
            type: array
          - type: 'null'
          title: Lines
        vat_id:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          title: Vat Id
      title: Footer
      type: object
    GeneralAvailabilityBase:
      properties:
        start_date:
          description: Start date of general availability
          format: date-time
          title: Start Date
          type: string
      required:
      - start_date
      title: GeneralAvailabilityBase
      type: object
    GeoStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
      required:
      - key
      - total
      title: GeoStatsBucket
      type: object
    GetPricesResponse:
      properties:
        prices:
          description: List of prices
          items:
            $ref: '#/components/schemas/PriceInfo'
          title: Prices
          type: array
      required:
      - prices
      title: GetPricesResponse
      type: object
    HTTPMethod:
      description: "HTTP methods and descriptions\n\nMethods from the following RFCs\
        \ are all observed:\n\n    * RFC 9110: HTTP Semantics, obsoletes 7231, which\
        \ obsoleted 2616\n    * RFC 5789: PATCH Method for HTTP"
      enum:
      - CONNECT
      - DELETE
      - GET
      - HEAD
      - OPTIONS
      - PATCH
      - POST
      - PUT
      - TRACE
      title: HTTPMethod
      type: string
    HTTPValidationError:
      properties:
        errors:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
        status:
          title: Status code
          type: integer
        title:
          title: Problem title
          type: string
        type:
          title: Problem type
          type: string
      required:
      - type
      - title
      - status
      - errors
      title: RequestValidationError
      type: object
    HolderEntitlement:
      enum:
      - owner
      - assignee
      - licensee
      title: HolderEntitlement
      type: string
    HostCreate:
      properties:
        hostname:
          description: Hostname of the host object
          examples:
          - ns1.example.com
          title: Hostname
          type: string
        ip_addresses:
          description: List of IP addresses for the host object
          examples:
          - - 192.0.2.53
            - 2001:db8::53
          items:
            format: ipvanyaddress
            type: string
          minItems: 1
          title: Ip Addresses
          type: array
      required:
      - hostname
      - ip_addresses
      title: HostCreate
      type: object
    HostIpSchema:
      properties:
        address:
          description: IP address of the host object
          format: ipvanyaddress
          title: Address
          type: string
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        host_id:
          default: None
          examples:
          - host_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Host Id
          type: string
          x-typeid-prefix: host
        host_ip_id:
          examples:
          - host_ip_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^host_ip_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Host Ip Id
          type: string
          x-typeid-prefix: host_ip
        type:
          $ref: '#/components/schemas/IPAddressType'
          description: IP address type
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
      required:
      - address
      - type
      title: HostIpSchema
      type: object
    HostResponse:
      properties:
        created_on:
          description: Timestamp when the host was created
          format: date-time
          title: Created On
          type: string
        host_id:
          description: Unique identifier of the host object
          examples:
          - host_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Host Id
          type: string
          x-typeid-prefix: host
        hostname:
          description: Hostname of the host object
          examples:
          - ns1.example.com
          title: Hostname
          type: string
        ip_addresses:
          description: The ip addresses of the Host Object
          items:
            format: ipvanyaddress
            type: string
          title: Ip Addresses
          type: array
        updated_on:
          description: Timestamp when the host was last updated
          format: date-time
          title: Updated On
          type: string
      required:
      - host_id
      - hostname
      - created_on
      - updated_on
      title: HostResponse
      type: object
    HostSchema:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        domain_id:
          default: None
          description: The domain that the host object belongs to
          examples:
          - domain_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Id
          type: string
          x-typeid-prefix: domain
        host_id:
          examples:
          - host_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Host Id
          type: string
          x-typeid-prefix: host
        hostname:
          description: Hostname of the host object
          title: Hostname
          type: string
        registry_account_id:
          anyOf:
          - examples:
            - registry_account_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^registry_account_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: registry_account
          - type: 'null'
          description: The registry account that the host object belongs to
          title: Registry Account Id
        status:
          $ref: '#/components/schemas/HostStatus'
          default: inactive
          description: Status of the host object
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
      required:
      - hostname
      title: HostSchema
      type: object
    HostStatus:
      enum:
      - requested_create
      - pending_create
      - active
      - inactive
      - pending_delete
      title: HostStatus
      type: string
    HostUpdate:
      properties:
        ip_addresses:
          description: List of IP addresses for the host object
          examples:
          - - 192.0.2.53
            - 2001:db8::53
          items:
            format: ipvanyaddress
            type: string
          minItems: 1
          title: Ip Addresses
          type: array
      required:
      - ip_addresses
      title: HostUpdate
      type: object
    HttpProtocol:
      enum:
      - http
      - https
      title: HttpProtocol
      type: string
    HttpRedirectListResponse:
      properties:
        protected:
          default: false
          title: Protected
          type: boolean
        redirect_code:
          $ref: '#/components/schemas/RedirectCode'
        request_hostname:
          title: Request Hostname
          type: string
        request_path:
          title: Request Path
          type: string
        request_protocol:
          $ref: '#/components/schemas/HttpProtocol'
        request_subdomain:
          anyOf:
          - type: string
          - type: 'null'
          title: Request Subdomain
        target_hostname:
          title: Target Hostname
          type: string
        target_path:
          title: Target Path
          type: string
        target_protocol:
          $ref: '#/components/schemas/HttpProtocol'
      required:
      - request_path
      - target_protocol
      - target_hostname
      - target_path
      - redirect_code
      - request_protocol
      - request_hostname
      title: HttpRedirectListResponse
      type: object
    HttpRedirectRemove:
      properties:
        request_hostname:
          title: Request Hostname
          type: string
        request_path:
          title: Request Path
          type: string
        request_protocol:
          $ref: '#/components/schemas/HttpProtocol'
        request_subdomain:
          anyOf:
          - type: string
          - type: 'null'
          title: Request Subdomain
      required:
      - request_protocol
      - request_hostname
      - request_path
      title: HttpRedirectRemove
      type: object
    HttpRedirectRequest:
      properties:
        redirect_code:
          $ref: '#/components/schemas/RedirectCode'
        request_path:
          title: Request Path
          type: string
        target_hostname:
          title: Target Hostname
          type: string
        target_path:
          title: Target Path
          type: string
        target_protocol:
          $ref: '#/components/schemas/HttpProtocol'
      required:
      - request_path
      - target_protocol
      - target_hostname
      - target_path
      - redirect_code
      title: HttpRedirectRequest
      type: object
    HttpRedirectUpsert:
      properties:
        redirect_code:
          $ref: '#/components/schemas/RedirectCode'
        request_hostname:
          title: Request Hostname
          type: string
        request_path:
          title: Request Path
          type: string
        request_protocol:
          $ref: '#/components/schemas/HttpProtocol'
        request_subdomain:
          anyOf:
          - type: string
          - type: 'null'
          title: Request Subdomain
        target_hostname:
          title: Target Hostname
          type: string
        target_path:
          title: Target Path
          type: string
        target_protocol:
          $ref: '#/components/schemas/HttpProtocol'
      required:
      - request_path
      - target_protocol
      - target_hostname
      - target_path
      - redirect_code
      - request_protocol
      - request_hostname
      title: HttpRedirectUpsert
      type: object
    IPAddressType:
      enum:
      - v4
      - v6
      title: IPAddressType
      type: string
    IdentityVerificationPolicy:
      description: 'A registry that requires the contact to have been identity-verified
        before it accepts it.


        The vocabulary is the contact-verification service''s, because that service
        is what the claims

        are checked against. What a registry accepts as evidence is a policy of its
        own and does not

        follow from the claim: `.dk` wants a photo ID for `NAME`, while a registry
        happy with a written

        attestation would leave `accepted_proofs` out.'
      properties:
        contact_roles:
          description: For which type of Contacts this verification needs to be done
          items:
            $ref: '#/components/schemas/DomainContactType'
          title: Contact Roles
          type: array
        enabled:
          description: Whether this Verification is enabled
          title: Enabled
          type: boolean
        required_claims:
          description: The claims that must be verified before a contact can be used
            on this TLD
          items:
            $ref: '#/components/schemas/RequiredClaim'
          minItems: 1
          title: Required Claims
          type: array
        suspension_delay:
          description: After how many Days should the domain be suspended
          title: Suspension Delay
          type: string
        suspension_on_failure:
          description: Should the Domain be suspended if the verification was not
            successfull
          title: Suspension On Failure
          type: boolean
        trigger:
          description: The operations that will trigger this verification
          items:
            type: string
          title: Trigger
          type: array
        validity_period:
          anyOf:
          - $ref: '#/components/schemas/PeriodStr'
          - type: 'null'
      required:
      - enabled
      - contact_roles
      - trigger
      - validity_period
      - suspension_on_failure
      - suspension_delay
      - required_claims
      title: IdentityVerificationPolicy
      type: object
    IdnBase:
      properties:
        idn_capable:
          description: IDN allowed
          title: Idn Capable
          type: boolean
        idn_tables:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Allowed IDN characters, file with the IDN codes
          title: Idn Tables
      required:
      - idn_capable
      title: IdnBase
      type: object
    InvoiceDocumentType:
      description: 'Customer-facing document class. Orthogonal to `InvoiceResponseType`:
        prepaid-credit invoices are receipts,

        everything else billable is an invoice. Documents billing classifies as neither
        are never returned.'
      enum:
      - invoice
      - receipt
      title: InvoiceDocumentType
      type: string
    InvoiceResponse:
      properties:
        amount:
          description: Total invoice amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          type: string
        currency:
          $ref: '#/components/schemas/Currency'
          description: Invoice currency
        document_type:
          $ref: '#/components/schemas/InvoiceDocumentType'
          description: Customer-facing document class
        external_id:
          description: Lago ID (external) for this invoice
          title: External Id
          type: string
        fees_amount:
          description: Fees amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Fees Amount
          type: string
        file_url:
          anyOf:
          - type: string
          - type: 'null'
          description: URL to invoice PDF file
          title: File Url
        invoice_type:
          $ref: '#/components/schemas/InvoiceResponseType'
          description: Invoice type
        issuing_date:
          description: Invoice issuing date
          format: date-time
          title: Issuing Date
          type: string
        number:
          description: Invoice number
          title: Number
          type: string
        payment_due_date:
          description: Payment due date
          format: date-time
          title: Payment Due Date
          type: string
        payment_overdue:
          description: Whether payment is overdue
          title: Payment Overdue
          type: boolean
        payment_status:
          $ref: '#/components/schemas/InvoiceResponsePaymentStatus'
          description: Payment status
        status:
          $ref: '#/components/schemas/InvoiceResponseStatus'
          description: Invoice status
        taxes_amount:
          description: Taxes amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Taxes Amount
          type: string
      required:
      - external_id
      - number
      - issuing_date
      - payment_due_date
      - invoice_type
      - document_type
      - status
      - payment_status
      - payment_overdue
      - currency
      - amount
      - fees_amount
      - taxes_amount
      - file_url
      title: InvoiceResponse
      type: object
    InvoiceResponsePaymentStatus:
      enum:
      - pending
      - failed
      - succeeded
      title: InvoiceResponsePaymentStatus
      type: string
    InvoiceResponseStatus:
      enum:
      - draft
      - finalized
      - failed
      - pending
      - voided
      title: InvoiceResponseStatus
      type: string
    InvoiceResponseType:
      enum:
      - subscription
      - add_on
      - credit
      - one_off
      - advance_charges
      - progressive_billing
      title: InvoiceResponseType
      type: string
    IpRestrictionCreate:
      description: 'Create an IP restriction for an organization.


        Accepts either a single IP address or a CIDR network range.

        Individual IP addresses are stored and returned with CIDR notation (/32 for
        IPv4, /128 for IPv6).'
      properties:
        ip_network:
          description: IP address or CIDR network range. Individual IPs can be specified
            without CIDR notation.
          examples:
          - 192.0.2.1
          - 192.0.2.0/24
          - 2001:db8::1
          - 2001:db8::/32
          format: ipvanynetwork
          title: Ip Network
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      required:
      - ip_network
      title: IpRestrictionCreate
      type: object
    IpRestrictionResponse:
      properties:
        created_on:
          format: date-time
          title: Created On
          type: string
        ip_network:
          description: IP address or CIDR network range. Single IPs are returned with
            /32 (IPv4) or /128 (IPv6) notation.
          examples:
          - 192.0.2.1/32
          - 192.0.2.0/24
          - 2001:db8::1/128
          - 2001:db8::/32
          format: ipvanynetwork
          title: Ip Network
          type: string
        ip_restriction_id:
          title: Ip Restriction Id
          type: integer
        last_used_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Used On
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      required:
      - ip_restriction_id
      - organization_id
      - ip_network
      - created_on
      title: IpRestrictionResponse
      type: object
    IpRestrictionUpdate:
      description: 'Update an existing IP restriction.


        You can update the IP network range or the last usage timestamp.'
      properties:
        ip_network:
          anyOf:
          - format: ipvanynetwork
            type: string
          - type: 'null'
          description: IP address or CIDR network range to replace the existing restriction.
          examples:
          - 192.0.2.1
          - 192.0.2.0/24
          - 2001:db8::1
          - 2001:db8::/32
          title: Ip Network
        last_used_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp of the last usage.
          title: Last Used On
      title: IpRestrictionUpdate
      type: object
    JobBatchMetadataResponse:
      properties:
        batch_id:
          description: TypeID identifying this batch
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
        created_on:
          description: Timestamp when the batch was created (UTC)
          format: date-time
          title: Created On
          type: string
        finished_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp when the last job finished (UTC)
          title: Finished At
        job_counts:
          $ref: '#/components/schemas/JobCountsByStatus'
          description: Number of jobs in each status
        label:
          anyOf:
          - type: string
          - type: 'null'
          description: Human-readable label for this batch
          title: Label
        started_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp when the first job started (UTC)
          title: Started At
        status:
          $ref: '#/components/schemas/BatchStatus'
          description: 'Batch status: pending (jobs still processing) or complete
            (all done)'
        total_jobs:
          description: Total number of jobs in this batch
          title: Total Jobs
          type: integer
      required:
      - batch_id
      - status
      - job_counts
      - total_jobs
      - created_on
      title: JobBatchMetadataResponse
      type: object
    JobBatchRequest:
      properties:
        commands:
          description: List of commands to execute
          items:
            discriminator:
              mapping:
                contact_create: '#/components/schemas/ContactCreateCommand'
                contact_create_bulk: '#/components/schemas/ContactCreateBulkCommand'
                dns_zone_create: '#/components/schemas/DnsZoneCreateCommand'
                dns_zone_create_bulk: '#/components/schemas/DnsZoneCreateBulkCommand'
                dns_zone_patch_records_bulk: '#/components/schemas/DnsZonePatchRecordsBulkCommand'
                dns_zone_patch_rrsets_bulk: '#/components/schemas/DnsZonePatchRrsetsBulkCommand'
                dns_zone_restamp_vanity_ns_bulk: '#/components/schemas/DnsZoneRestampVanityNsBulkCommand'
                dns_zone_update: '#/components/schemas/DnsZoneUpdateCommand'
                dns_zone_update_bulk: '#/components/schemas/DnsZoneUpdateBulkCommand'
                domain_create: '#/components/schemas/DomainCreateCommand'
                domain_create_bulk: '#/components/schemas/DomainCreateBulkCommand'
                domain_forward_create_bulk: '#/components/schemas/DomainForwardCreateBulkCommand'
                domain_forward_delete_bulk: '#/components/schemas/DomainForwardDeleteBulkCommand'
                domain_forward_disable_bulk: '#/components/schemas/DomainForwardDisableBulkCommand'
                domain_forward_enable_bulk: '#/components/schemas/DomainForwardEnableBulkCommand'
                domain_forward_update_bulk: '#/components/schemas/DomainForwardUpdateBulkCommand'
                domain_transfer: '#/components/schemas/DomainTransferCommand'
                domain_transfer_bulk: '#/components/schemas/DomainTransferBulkCommand'
                domain_update: '#/components/schemas/DomainUpdateCommand'
                domain_update_bulk: '#/components/schemas/DomainUpdateBulkCommand'
                email_forward_create_bulk: '#/components/schemas/EmailForwardCreateBulkCommand'
                email_forward_delete_bulk: '#/components/schemas/EmailForwardDeleteBulkCommand'
                email_forward_disable_bulk: '#/components/schemas/EmailForwardDisableBulkCommand'
                email_forward_enable_bulk: '#/components/schemas/EmailForwardEnableBulkCommand'
                email_forward_update_bulk: '#/components/schemas/EmailForwardUpdateBulkCommand'
                parking_create_bulk: '#/components/schemas/ParkingCreateBulkCommand'
                parking_delete_bulk: '#/components/schemas/ParkingDeleteBulkCommand'
                parking_disable_bulk: '#/components/schemas/ParkingDisableBulkCommand'
                parking_enable_bulk: '#/components/schemas/ParkingEnableBulkCommand'
              propertyName: command
            oneOf:
            - $ref: '#/components/schemas/DomainCreateCommand'
            - $ref: '#/components/schemas/DomainUpdateCommand'
            - $ref: '#/components/schemas/DomainTransferCommand'
            - $ref: '#/components/schemas/DnsZoneCreateCommand'
            - $ref: '#/components/schemas/DnsZoneUpdateCommand'
            - $ref: '#/components/schemas/DomainCreateBulkCommand'
            - $ref: '#/components/schemas/DomainTransferBulkCommand'
            - $ref: '#/components/schemas/DomainUpdateBulkCommand'
            - $ref: '#/components/schemas/DnsZoneCreateBulkCommand'
            - $ref: '#/components/schemas/DnsZoneUpdateBulkCommand'
            - $ref: '#/components/schemas/DnsZonePatchRrsetsBulkCommand'
            - $ref: '#/components/schemas/DnsZonePatchRecordsBulkCommand'
            - $ref: '#/components/schemas/DnsZoneRestampVanityNsBulkCommand'
            - $ref: '#/components/schemas/ContactCreateBulkCommand'
            - $ref: '#/components/schemas/ContactCreateCommand'
            - $ref: '#/components/schemas/ParkingCreateBulkCommand'
            - $ref: '#/components/schemas/ParkingEnableBulkCommand'
            - $ref: '#/components/schemas/ParkingDisableBulkCommand'
            - $ref: '#/components/schemas/ParkingDeleteBulkCommand'
            - $ref: '#/components/schemas/EmailForwardCreateBulkCommand'
            - $ref: '#/components/schemas/EmailForwardEnableBulkCommand'
            - $ref: '#/components/schemas/EmailForwardDisableBulkCommand'
            - $ref: '#/components/schemas/EmailForwardDeleteBulkCommand'
            - $ref: '#/components/schemas/EmailForwardUpdateBulkCommand'
            - $ref: '#/components/schemas/DomainForwardCreateBulkCommand'
            - $ref: '#/components/schemas/DomainForwardUpdateBulkCommand'
            - $ref: '#/components/schemas/DomainForwardEnableBulkCommand'
            - $ref: '#/components/schemas/DomainForwardDisableBulkCommand'
            - $ref: '#/components/schemas/DomainForwardDeleteBulkCommand'
          maxItems: 50000
          title: Commands
          type: array
        label:
          anyOf:
          - type: string
          - type: 'null'
          description: Human-readable label for this batch
          title: Label
        not_before:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Earliest time jobs can execute (UTC). If not provided, jobs
            run immediately.
          title: Not Before
        paused:
          default: false
          description: If true, jobs are created in paused state and must be explicitly
            resumed
          title: Paused
          type: boolean
      required:
      - commands
      title: JobBatchRequest
      type: object
    JobBatchRetryResponse:
      properties:
        batch_id:
          description: TypeID identifying this batch
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
        blocked_count:
          default: 0
          description: Number of retried jobs held behind the topic rate limit or
            backlog (BLOCKED)
          title: Blocked Count
          type: integer
        queued_count:
          default: 0
          description: Number of retried jobs dispatched immediately (QUEUED)
          title: Queued Count
          type: integer
        retried_count:
          description: Number of FAILED/DEAD_LETTER jobs reset for retry
          title: Retried Count
          type: integer
      required:
      - batch_id
      - retried_count
      title: JobBatchRetryResponse
      type: object
    JobBatchStatusResponse:
      properties:
        batch_id:
          description: TypeID identifying this batch. All jobs in a batch share the
            same batch_id, while each job has its own unique job_id.
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
        blocked:
          default: 0
          description: Number of jobs waiting for eligibility (scheduled, serial blocked,
            or no tokens)
          title: Blocked
          type: integer
        canceled:
          description: Number of jobs that were canceled
          title: Canceled
          type: integer
        dead_letter:
          description: Number of jobs that permanently failed after exhausting retries
          title: Dead Letter
          type: integer
        failed:
          description: Number of jobs that failed execution
          title: Failed
          type: integer
        label:
          anyOf:
          - type: string
          - type: 'null'
          description: Human-readable label for this batch
          title: Label
        paused:
          default: 0
          description: Number of jobs in paused state
          title: Paused
          type: integer
        progress_percentage:
          description: Percentage of jobs in a terminal state (succeeded, failed,
            canceled, or dead_letter), 0-100
          title: Progress Percentage
          type: number
        queued:
          description: Number of jobs awaiting processing
          title: Queued
          type: integer
        running:
          description: Number of jobs currently being executed
          title: Running
          type: integer
        succeeded:
          description: Number of jobs that completed successfully
          title: Succeeded
          type: integer
        total:
          description: Total number of jobs in the batch
          title: Total
          type: integer
      required:
      - batch_id
      - total
      - queued
      - running
      - succeeded
      - failed
      - canceled
      - dead_letter
      - progress_percentage
      title: JobBatchStatusResponse
      type: object
    JobCountsByStatus:
      properties:
        blocked:
          default: 0
          title: Blocked
          type: integer
        canceled:
          default: 0
          title: Canceled
          type: integer
        dead_letter:
          default: 0
          title: Dead Letter
          type: integer
        failed:
          default: 0
          title: Failed
          type: integer
        paused:
          default: 0
          title: Paused
          type: integer
        queued:
          default: 0
          title: Queued
          type: integer
        running:
          default: 0
          title: Running
          type: integer
        succeeded:
          default: 0
          title: Succeeded
          type: integer
      title: JobCountsByStatus
      type: object
    JobResponse:
      properties:
        attempts:
          description: Number of execution attempts made for this job
          title: Attempts
          type: integer
        command:
          anyOf:
          - type: string
          - type: 'null'
          description: Command name (e.g., 'domain_create', 'dns_zone_update')
          title: Command
        created_on:
          description: Timestamp when the job was created (UTC)
          format: date-time
          title: Created On
          type: string
        display:
          anyOf:
          - type: string
          - type: 'null'
          description: Human-readable description of this job
          title: Display
        domain_name:
          anyOf:
          - type: string
          - type: 'null'
          description: Domain name associated with this job
          title: Domain Name
        error_class:
          anyOf:
          - type: string
          - type: 'null'
          description: Error type if the job failed (e.g., ValidationError, TimeoutError)
          title: Error Class
        error_code:
          anyOf:
          - type: string
          - type: 'null'
          description: Stable semantic error code propagated verbatim from the failing
            upstream service (e.g. 'ERROR_DOMAIN_TRANSFER_INVALID_AUTH_CODE'). Suitable
            for i18n / per-error UI branching. Null when the job did not fail or the
            upstream error did not carry a code.
          title: Error Code
        error_details:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: "Full upstream problem-details payload (RFC 9457) preserved\
            \ verbatim \u2014 e.g. type/title/status/code/detail plus service-specific\
            \ extras like domain_name, reason. Null when the failure didn't originate\
            \ from a typed upstream response."
          title: Error Details
        error_message:
          anyOf:
          - type: string
          - type: 'null'
          description: Detailed error message if the job failed
          title: Error Message
        finished_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp when job execution completed (UTC)
          title: Finished At
        job_id:
          description: Unique identifier for this individual job
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
        operation:
          anyOf:
          - type: string
          - type: 'null'
          description: Operation type (e.g., 'create', 'update', 'transfer')
          title: Operation
        paused_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp when job was paused (UTC)
          title: Paused At
        payload:
          anyOf:
          - discriminator:
              mapping:
                contact_create: '#/components/schemas/ContactCreateWorkerPayload'
                contact_create_bulk: '#/components/schemas/ContactCreateWorkerPayload'
                dns_zone_create: '#/components/schemas/DnsZoneCreateWorkerPayload'
                dns_zone_create_bulk: '#/components/schemas/DnsZoneCreateWorkerPayload'
                dns_zone_patch_records_bulk: '#/components/schemas/DnsZonePatchRecordsWorkerPayload'
                dns_zone_patch_rrsets_bulk: '#/components/schemas/DnsZonePatchRrsetsWorkerPayload'
                dns_zone_restamp_vanity_ns_bulk: '#/components/schemas/DnsZoneRestampVanityNsWorkerPayload'
                dns_zone_update: '#/components/schemas/DnsZoneUpdateWorkerPayload'
                dns_zone_update_bulk: '#/components/schemas/DnsZoneUpdateWorkerPayload'
                domain_create: '#/components/schemas/DomainCreateWorkerPayload'
                domain_create_bulk: '#/components/schemas/DomainCreateWorkerPayload'
                domain_transfer: '#/components/schemas/DomainTransferWorkerPayload'
                domain_transfer_bulk: '#/components/schemas/DomainTransferWorkerPayload'
                domain_update: '#/components/schemas/DomainUpdateWorkerPayload'
                domain_update_bulk: '#/components/schemas/DomainUpdateWorkerPayload'
                parking_create_bulk: '#/components/schemas/ParkingCreateWorkerPayload'
                parking_delete_bulk: '#/components/schemas/ParkingDeleteWorkerPayload'
                parking_disable_bulk: '#/components/schemas/ParkingDisableWorkerPayload'
                parking_enable_bulk: '#/components/schemas/ParkingEnableWorkerPayload'
              propertyName: type
            oneOf:
            - $ref: '#/components/schemas/DomainCreateWorkerPayload'
            - $ref: '#/components/schemas/DomainUpdateWorkerPayload'
            - $ref: '#/components/schemas/DomainTransferWorkerPayload'
            - $ref: '#/components/schemas/DnsZoneCreateWorkerPayload'
            - $ref: '#/components/schemas/DnsZoneUpdateWorkerPayload'
            - $ref: '#/components/schemas/DnsZonePatchRrsetsWorkerPayload'
            - $ref: '#/components/schemas/DnsZonePatchRecordsWorkerPayload'
            - $ref: '#/components/schemas/DnsZoneRestampVanityNsWorkerPayload'
            - $ref: '#/components/schemas/ContactCreateWorkerPayload'
            - $ref: '#/components/schemas/ParkingCreateWorkerPayload'
            - $ref: '#/components/schemas/ParkingEnableWorkerPayload'
            - $ref: '#/components/schemas/ParkingDisableWorkerPayload'
            - $ref: '#/components/schemas/ParkingDeleteWorkerPayload'
          - additionalProperties: true
            type: object
          - type: 'null'
          description: The original request payload for this job
          title: Payload
        resource_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Resource identifier for this job
          title: Resource Key
        result:
          anyOf:
          - discriminator:
              mapping:
                contact_create: '#/components/schemas/ContactCreateWorkerResult'
                contact_create_bulk: '#/components/schemas/ContactCreateWorkerResult'
                dns_zone_create: '#/components/schemas/DnsZoneCreateWorkerResult'
                dns_zone_create_bulk: '#/components/schemas/DnsZoneCreateWorkerResult'
                domain_create: '#/components/schemas/DomainCreateWorkerResult'
                domain_create_bulk: '#/components/schemas/DomainCreateWorkerResult'
              propertyName: type
            oneOf:
            - $ref: '#/components/schemas/ContactCreateWorkerResult'
            - $ref: '#/components/schemas/DomainCreateWorkerResult'
            - $ref: '#/components/schemas/DnsZoneCreateWorkerResult'
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Structured result data from successful job execution (e.g.
            created entity IDs). Typed when the worker emits a known `type` discriminator;
            raw dict otherwise.
          title: Result
        started_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Timestamp when job execution began (UTC)
          title: Started At
        status:
          $ref: '#/components/schemas/JobStatus'
          description: 'Current job status: blocked, queued, paused, running, succeeded,
            failed, canceled, or dead_letter'
      required:
      - job_id
      - status
      - created_on
      - attempts
      title: JobResponse
      type: object
    JobStatus:
      enum:
      - blocked
      - queued
      - paused
      - running
      - succeeded
      - failed
      - canceled
      - dead_letter
      title: JobStatus
      type: string
    JsonValue: {}
    LaunchPhaseBase:
      properties:
        allocation:
          anyOf:
          - $ref: '#/components/schemas/AllocationMethodType'
          - type: 'null'
          description: Allocation method
        end_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: End date of the phase
          title: End Date
        smd_required:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether an SMD file is required for participation
          title: Smd Required
        start_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Start date of the phase
          title: Start Date
        supported:
          description: Whether this phase is supported
          title: Supported
          type: boolean
        type:
          $ref: '#/components/schemas/LaunchPhaseType'
          description: Type of launch phase
      required:
      - type
      - supported
      title: LaunchPhaseBase
      type: object
    LaunchPhaseType:
      enum:
      - sunrise
      - landrush
      - eap
      title: LaunchPhaseType
      type: string
    LaunchPhasesBase:
      properties:
        general_availability:
          $ref: '#/components/schemas/GeneralAvailabilityBase'
        phases:
          default: []
          items:
            $ref: '#/components/schemas/LaunchPhaseBase'
          title: Phases
          type: array
        trademark_claims:
          anyOf:
          - $ref: '#/components/schemas/TrademarkClaimsBase'
          - type: 'null'
      required:
      - general_availability
      title: LaunchPhasesBase
      type: object
    Legal:
      properties:
        privacy_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Privacy Url
        terms_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Terms Url
      title: Legal
      type: object
    LegalRequirementBase:
      properties:
        key:
          description: Unique identifier for the legal requirement
          title: Key
          type: string
        operations:
          description: Operations this requirement applies to
          items:
            $ref: '#/components/schemas/LegalRequirementOperationType'
          title: Operations
          type: array
        type:
          $ref: '#/components/schemas/LegalRequirementType'
          description: Whether this is an informational notice or requires explicit
            confirmation
        url:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          description: Link to the legal document
          title: Url
      required:
      - key
      - type
      - operations
      title: LegalRequirementBase
      type: object
    LegalRequirementOperationType:
      enum:
      - registration
      - transfer
      - renewal
      - registrant_change
      title: LegalRequirementOperationType
      type: string
    LegalRequirementType:
      enum:
      - notice
      - confirmation
      title: LegalRequirementType
      type: string
    LevelOfAssurance:
      enum:
      - HIGH
      - LOW
      - SUBSTANTIAL
      title: LevelOfAssurance
      type: string
    ListBrandingAssetsResponse:
      properties:
        assets:
          description: Uploaded assets, most recent first
          items:
            $ref: '#/components/schemas/BrandingAsset'
          title: Assets
          type: array
      title: ListBrandingAssetsResponse
      type: object
    ListVanityNameserverSetsRes:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadataDTO'
          description: Pagination metadata
        results:
          description: Sets owned by the org, newest first; includes non-ACTIVE rows
          items:
            $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          title: Results
          type: array
      required:
      - pagination
      title: ListVanityNameserverSetsRes
      type: object
    ListZonesReferencingSetRes:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadataDTO'
          description: Pagination metadata
        results:
          description: Zones whose apex is branded by the set, ordered by zone name
          items:
            $ref: '#/components/schemas/DnsZoneDTO'
          title: Results
          type: array
      required:
      - pagination
      title: ListZonesReferencingSetRes
      type: object
    LocalPresenceBase:
      properties:
        eligible_countries:
          anyOf:
          - items:
              pattern: ^\w{2}$
              type: string
            type: array
          - type: 'null'
          description: ISO 3166-1 Alpha-2 country code
          title: Eligible Countries
        exemptions:
          anyOf:
          - items:
              $ref: '#/components/schemas/AttributeCondition'
            type: array
          - type: 'null'
          title: Exemptions
        required:
          description: Whether a local presence is required to register and maintain
            a domain name
          title: Required
          type: boolean
        requirement:
          anyOf:
          - items:
              $ref: '#/components/schemas/LocalPresenceRequirementType'
            type: array
          - type: 'null'
          description: Type of local presence requirement
          title: Requirement
        type:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainContactType'
            type: array
          - type: 'null'
          description: Who must meet the requirement
          title: Type
      required:
      - required
      title: LocalPresenceBase
      type: object
    LocalPresenceRequirementType:
      enum:
      - physical_address
      - business_entity
      title: LocalPresenceRequirementType
      type: string
    Logo:
      properties:
        dark:
          anyOf:
          - type: string
          - type: 'null'
          title: Dark
        favicon:
          anyOf:
          - type: string
          - type: 'null'
          title: Favicon
        icon:
          anyOf:
          - type: string
          - type: 'null'
          title: Icon
        light:
          anyOf:
          - type: string
          - type: 'null'
          title: Light
      title: Logo
      type: object
    MailTemplate:
      description: One editable transactional email template in the catalog.
      properties:
        blocks:
          additionalProperties:
            $ref: '#/components/schemas/MailTemplateBlock'
          description: Org-editable content blocks
          title: Blocks
          type: object
        category:
          $ref: '#/components/schemas/MailTemplateCategory'
          default: unknown
          description: Template category for grouping in the editor
        label:
          default: ''
          description: Human-readable template name for display
          title: Label
          type: string
        locales:
          description: Supported locales, first is the fallback
          items:
            type: string
          title: Locales
          type: array
        subject:
          additionalProperties:
            type: string
          description: Subject line per locale
          title: Subject
          type: object
        variables:
          additionalProperties:
            $ref: '#/components/schemas/MailTemplateVariable'
          description: Per-send variables
          title: Variables
          type: object
        version:
          default: ''
          description: Template revision (major.minor)
          title: Version
          type: string
      title: MailTemplate
      type: object
    MailTemplateBlock:
      properties:
        default:
          additionalProperties:
            type: string
          description: Default copy per locale
          title: Default
          type: object
        label:
          default: ''
          description: Human-readable field name for the editor
          title: Label
          type: string
        max_len:
          default: 0
          description: Maximum override text length
          title: Max Len
          type: integer
        multiline:
          default: false
          description: Render the editor field as a textarea
          title: Multiline
          type: boolean
      title: MailTemplateBlock
      type: object
    MailTemplateCatalogRes:
      additionalProperties:
        $ref: '#/components/schemas/MailTemplate'
      description: The editable-template catalog keyed by template name.
      title: MailTemplateCatalogRes
      type: object
    MailTemplateCategory:
      description: Category a template is grouped under in the editor. An unrecognised
        value decodes to `unknown`.
      enum:
      - organization
      - billing
      - user_account
      - icann_policy
      - tld_specific
      - unknown
      title: MailTemplateCategory
      type: string
    MailTemplateVariable:
      properties:
        required:
          default: false
          title: Required
          type: boolean
        sample:
          default: ''
          description: Sample value shown in previews
          title: Sample
          type: string
        type:
          default: text
          description: Value type driving render-time escaping (text or url)
          title: Type
          type: string
      title: MailTemplateVariable
      type: object
    MemoryFact:
      properties:
        created_at:
          format: date-time
          title: Created At
          type: string
        expires_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Expires At
        fact_id:
          examples:
          - fact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^fact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Fact Id
          type: string
          x-typeid-prefix: fact
        key:
          maxLength: 200
          title: Key
          type: string
        kind:
          $ref: '#/components/schemas/MemoryFactKind'
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        updated_at:
          format: date-time
          title: Updated At
          type: string
        value:
          additionalProperties: true
          title: Value
          type: object
      required:
      - fact_id
      - organization_id
      - kind
      - key
      - created_at
      - updated_at
      title: MemoryFact
      type: object
    MemoryFactCreateRequest:
      properties:
        key:
          maxLength: 200
          minLength: 1
          title: Key
          type: string
        kind:
          $ref: '#/components/schemas/MemoryFactKind'
        ttl_seconds:
          anyOf:
          - minimum: 1.0
            type: integer
          - type: 'null'
          description: Optional TTL; if set, the fact expires after this many seconds.
          title: Ttl Seconds
        value:
          additionalProperties: true
          title: Value
          type: object
      required:
      - kind
      - key
      title: MemoryFactCreateRequest
      type: object
    MemoryFactKind:
      enum:
      - preference
      - note
      - other
      title: MemoryFactKind
      type: string
    MemoryFactListResponse:
      properties:
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          title: Next Cursor
        results:
          items:
            $ref: '#/components/schemas/MemoryFact'
          title: Results
          type: array
      required:
      - results
      title: MemoryFactListResponse
      type: object
    MemoryFactPatchRequest:
      properties:
        ttl_seconds:
          anyOf:
          - minimum: 1.0
            type: integer
          - type: 'null'
          title: Ttl Seconds
        value:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Value
      title: MemoryFactPatchRequest
      type: object
    Message:
      properties:
        content:
          title: Content
          type: string
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        message_id:
          examples:
          - msg_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^msg_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Message Id
          type: string
          x-typeid-prefix: msg
        metadata:
          additionalProperties: true
          title: Metadata
          type: object
        role:
          $ref: '#/components/schemas/MessageRole'
      required:
      - message_id
      - conversation_id
      - role
      - content
      - created_at
      title: Message
      type: object
    MessageCreateRequest:
      properties:
        content:
          title: Content
          type: string
        metadata:
          additionalProperties: true
          title: Metadata
          type: object
        n8n_history_id:
          anyOf:
          - type: integer
          - type: 'null'
          description: Optional reference to the originating n8n_chat_histories row.
          title: N8N History Id
        role:
          $ref: '#/components/schemas/MessageRole'
      required:
      - role
      - content
      title: MessageCreateRequest
      type: object
    MessageListResponse:
      properties:
        pagination:
          anyOf:
          - $ref: '#/components/schemas/PaginationMetadata'
          - type: 'null'
          description: Omitted when the `recent` query parameter is used.
        results:
          items:
            $ref: '#/components/schemas/Message'
          title: Results
          type: array
      required:
      - results
      title: MessageListResponse
      type: object
    MessageRole:
      enum:
      - user
      - assistant
      - system
      - tool
      title: MessageRole
      type: string
    MetricsGrouping:
      enum:
      - url
      - fqdn
      - domain
      - forward
      - rule
      title: MetricsGrouping
      type: string
    Nameserver:
      properties:
        hostname:
          description: The name server of the domain
          examples:
          - ns1.example.com
          title: Hostname
          type: string
        ip_addresses:
          description: The ip addresses of the name server
          examples:
          - - 0.0.0.0
            - 127.0.0.1
          - - 2001:db8::1
            - 2001:db8::2
          items:
            format: ipvanyaddress
            type: string
          title: Ip Addresses
          type: array
      required:
      - hostname
      title: Nameserver
      type: object
    NizzaClaim:
      enum:
      - EMAIL
      - PHONE
      - ADDRESS
      - NAME
      - LEGAL_ENTITY
      title: NizzaClaim
      type: string
    NizzaVerificationProof:
      enum:
      - IDCARD
      - PASSPORT
      - POPULATION_REGISTER
      - RESIDENCE_PERMIT
      - PROOF_OF_ARRIVAL
      - DRIVERS_LICENCE
      - COMPANY_REGISTER
      - COMPANY_STATEMENT
      - BANK_ACCOUNT
      - ONLINE_PAYMENT_ACCOUNT
      - UTILITY_ACCOUNT
      - BANK_STATEMENT
      - TAX_STATEMENT
      - WRITTEN_ATTESTATION
      - DIGITAL_ATTESTATION
      - POSTAL_VER_TRANSACTION_LOG
      - EMAIL_VER_TRANSACTION_LOG
      - PHONE_VER_TRANSACTION_LOG
      - ADDRESS_DATABASE
      title: NizzaVerificationProof
      type: string
    NorIdDeclarationConfirmRequest:
      properties:
        accept_name:
          description: The full name of the person signing the applicant declaration.
            For private individuals this is the subscriber personally; for organizations
            it must be an authorized representative.
          maxLength: 255
          minLength: 1
          title: Accept Name
          type: string
      required:
      - accept_name
      title: NorIdDeclarationConfirmRequest
      type: object
    NorIdDeclarationResponse:
      properties:
        declaration_contract_text:
          description: The fixed Norwegian declaration contract text
          title: Declaration Contract Text
          type: string
        declaration_header:
          description: The fixed Norwegian declaration header
          title: Declaration Header
          type: string
        declaration_introduction:
          description: The fixed Norwegian declaration introduction
          title: Declaration Introduction
          type: string
        declaration_version:
          description: The applicant declaration text version
          title: Declaration Version
          type: string
        domain_name:
          description: The domain name the declaration applies to
          title: Domain Name
          type: string
        expires_on:
          description: When the unconfirmed create request expires
          format: date-time
          title: Expires On
          type: string
        identity_type:
          anyOf:
          - type: string
          - type: 'null'
          description: The subscriber identity type
          title: Identity Type
        identity_value:
          anyOf:
          - type: string
          - type: 'null'
          description: The subscriber identity (organization number or Person-ID)
          title: Identity Value
        organization_id:
          description: The organization that owns the domain; used to brand the page
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        status:
          $ref: '#/components/schemas/NorIdDeclarationStatus'
          description: The declaration status
        subscriber_name:
          description: The domain name subscriber (registrant)
          title: Subscriber Name
          type: string
      required:
      - organization_id
      - domain_name
      - subscriber_name
      - declaration_version
      - declaration_header
      - declaration_introduction
      - declaration_contract_text
      - status
      - expires_on
      title: NorIdDeclarationResponse
      type: object
    NorIdDeclarationStatus:
      enum:
      - pending
      - confirmed
      - completed
      - expired
      - failed
      title: NorIdDeclarationStatus
      type: string
    NorIdResellerDeclarationRequest:
      properties:
        accept_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: UTC timestamp of the declaration signature. Only provide it
            when the declaration was signed out-of-band (e.g. via Norid's own tool);
            defaults to the submission time.
          title: Accept Date
        accept_name:
          description: The full name of the person signing the applicant declaration.
            For private individuals this is the subscriber personally; for organizations
            it must be an authorized representative.
          maxLength: 255
          minLength: 1
          title: Accept Name
          type: string
      required:
      - accept_name
      title: NorIdResellerDeclarationRequest
      type: object
    ObjectEventType:
      enum:
      - CREATED
      - UPDATED
      - DELETED
      - IMPORTED
      - SYNCED_AFTER_IMPORT
      - TRANSFER_STARTED
      - TRANSFER_COMPLETED
      - TRANSFER_OUT_STARTED
      - TRANSFER_OUT_COMPLETED
      - RENEWED
      - RESTORED
      - BILLING_TRANSACTION_RESERVED
      - BILLING_TRANSACTION_SUCCEEDED
      - BILLING_TRANSACTION_FAILED
      - BILLING_TRANSACTION_CANCELLED
      title: ObjectEventType
      type: string
    ObjectLog:
      properties:
        action:
          $ref: '#/components/schemas/ObjectEventType'
          description: Action performed
        created_on:
          description: Timestamp when the log was created
          format: date-time
          title: Created On
          type: string
        details:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Changes made to the object
          title: Details
        object_id:
          description: ID of the object
          title: Object Id
          type: string
        object_log_id:
          description: Unique ID of the log
          title: Object Log Id
          type: string
        object_type:
          description: Type of the object
          title: Object Type
          type: string
        performed_by_id:
          anyOf:
          - type: string
          - type: 'null'
          description: ID of the actor who performed the action
          title: Performed By Id
        performed_by_type:
          anyOf:
          - $ref: '#/components/schemas/ExecutingEntity'
          - type: 'null'
          description: Type of the actor who performed the action
        server_request_id:
          anyOf:
          - type: string
          - type: 'null'
          description: Server request ID
          title: Server Request Id
      required:
      - object_log_id
      - object_id
      - object_type
      - action
      - created_on
      title: ObjectLog
      type: object
    ObjectLogSortField:
      enum:
      - object_log_id
      - object_id
      - object_type
      - action
      - created_on
      - server_request_id
      - performed_by_type
      - performed_by_id
      title: ObjectLogSortField
      type: string
    ObjectTagChanges:
      properties:
        add:
          description: Object TypeIDs or resource names to tag. TypeIDs and names
            may be mixed.
          items:
            description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
              name (e.g. example.com)
            examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            - example.com
            type: string
          maxItems: 1000
          title: Add
          type: array
        remove:
          description: Object TypeIDs or resource names to untag. TypeIDs and names
            may be mixed.
          items:
            description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
              name (e.g. example.com)
            examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            - example.com
            type: string
          maxItems: 1000
          title: Remove
          type: array
      title: ObjectTagChanges
      type: object
    ObjectTagChangesResponse:
      properties:
        added:
          description: Number of objects tagged
          title: Added
          type: integer
        removed:
          description: Number of objects untagged
          title: Removed
          type: integer
        unresolved:
          description: References that could not be resolved
          items:
            type: string
          title: Unresolved
          type: array
      required:
      - added
      - removed
      title: ObjectTagChangesResponse
      type: object
    Organization:
      properties:
        address_1:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: First line of the organization's address.
          title: Address 1
        address_2:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Second line of the organization's address.
          title: Address 2
        attributes:
          items:
            $ref: '#/components/schemas/OrganizationAttribute'
          title: Attributes
          type: array
        billing_mode:
          $ref: '#/components/schemas/BillingMode'
          default: consolidated
          description: Whether the organization is billed on its own account (INDEPENDENT)
            or rolled up to its parent (CONSOLIDATED).
        business_number:
          anyOf:
          - maxLength: 100
            minLength: 1
            type: string
          - type: 'null'
          description: Government issued business identifier for the organization
            issued.
          title: Business Number
        city:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: City of the organization's address.
          title: City
        country_code:
          anyOf:
          - maxLength: 2
            pattern: ^\w{2}$
            type: string
          - type: 'null'
          description: ISO 3166-1 alpha-2 country code, plus XK (Kosovo).
          title: Country Code
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        currency:
          anyOf:
          - $ref: '#/components/schemas/Currency'
          - type: 'null'
          description: The currency used by the organization.
        default_locale:
          anyOf:
          - examples:
            - en_US
            type: string
          - type: 'null'
          description: Default locale for the organization.
          title: Default Locale
        deleted_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date/time the entry was deleted on
          title: Deleted On
        keycloak_organization_id:
          anyOf:
          - type: string
          - type: 'null'
          description: Keycloak organization id
          title: Keycloak Organization Id
        name:
          description: Name of the organization.
          maxLength: 255
          minLength: 1
          title: Name
          type: string
        organization_id:
          description: Unique identifier for the organization.
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        parent_organization_id:
          anyOf:
          - examples:
            - organization_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: organization
          - type: 'null'
          description: ID of the parent organization.
          title: Parent Organization Id
        postal_code:
          anyOf:
          - maxLength: 20
            minLength: 1
            type: string
          - type: 'null'
          description: Postal code of the organization's address.
          title: Postal Code
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: State or province of the organization's address.
          title: State
        status:
          $ref: '#/components/schemas/OrganizationStatus'
          default: active
          description: Status of the organization.
        tax_id:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Tax ID of the organization.
          title: Tax Id
        tax_id_type:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Type of tax ID for the organization.
          title: Tax Id Type
        tax_rate:
          anyOf:
          - pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
            type: string
          - type: 'null'
          description: Tax rate for the organization.
          title: Tax Rate
        users:
          items:
            $ref: '#/components/schemas/User'
          title: Users
          type: array
      required:
      - name
      title: Organization
      type: object
    OrganizationAttribute:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        organization_attribute_id:
          title: Organization Attribute Id
          type: integer
        private:
          default: false
          description: When true, the attribute is private and not visible to users.
          title: Private
          type: boolean
        protected:
          default: false
          description: When true, the attribute is protected and cannot be modified
            by users.
          title: Protected
          type: boolean
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      - organization_attribute_id
      title: OrganizationAttribute
      type: object
    OrganizationAttributeCreate:
      properties:
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        private:
          default: false
          description: When true, the attribute is private and not visible to users.
          title: Private
          type: boolean
        protected:
          default: false
          description: When true, the attribute is protected and cannot be modified
            by users.
          title: Protected
          type: boolean
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      title: OrganizationAttributeCreate
      type: object
    OrganizationAttributeResponse:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        organization_attribute_id:
          title: Organization Attribute Id
          type: integer
        protected:
          default: false
          description: When true, the attribute is protected and cannot be modified
            by users.
          title: Protected
          type: boolean
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      - organization_attribute_id
      title: OrganizationAttributeResponse
      type: object
    OrganizationAttributeUpdate:
      properties:
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        private:
          default: false
          description: When true, the attribute is private and not visible to users.
          title: Private
          type: boolean
        protected:
          default: false
          description: When true, the attribute is protected and cannot be modified
            by users.
          title: Protected
          type: boolean
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      title: OrganizationAttributeUpdate
      type: object
    OrganizationCreate:
      properties:
        address_1:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: First line of the organization's address.
          title: Address 1
        address_2:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Second line of the organization's address.
          title: Address 2
        attributes:
          description: List of attributes for the organization.
          items:
            $ref: '#/components/schemas/OrganizationAttributeCreate'
          title: Attributes
          type: array
        billing_mode:
          $ref: '#/components/schemas/BillingMode'
          default: consolidated
          description: Whether the organization is billed on its own account (INDEPENDENT)
            or rolled up to its parent (CONSOLIDATED). INDEPENDENT is only permitted
            for eligible sub-organizations. Cannot be changed after creation.
        business_number:
          anyOf:
          - maxLength: 100
            minLength: 1
            type: string
          - type: 'null'
          description: Government issued business identifier for the organization
            issued.
          title: Business Number
        city:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: City of the organization's address.
          title: City
        country_code:
          anyOf:
          - maxLength: 2
            pattern: ^\w{2}$
            type: string
          - type: 'null'
          description: ISO 3166-1 alpha-2 country code, plus XK (Kosovo).
          title: Country Code
        currency:
          anyOf:
          - $ref: '#/components/schemas/Currency'
          - type: 'null'
          description: The currency used by the organization.
        default_locale:
          anyOf:
          - examples:
            - en_US
            type: string
          - type: 'null'
          description: Default locale for the organization.
          title: Default Locale
        name:
          description: Name of the organization.
          maxLength: 255
          minLength: 1
          title: Name
          type: string
        parent_organization_id:
          anyOf:
          - examples:
            - organization_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: organization
          - type: 'null'
          description: ID of the parent organization.
          title: Parent Organization Id
        postal_code:
          anyOf:
          - maxLength: 20
            minLength: 1
            type: string
          - type: 'null'
          description: Postal code of the organization's address.
          title: Postal Code
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: State or province of the organization's address.
          title: State
        tax_id:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Tax ID of the organization.
          title: Tax Id
        tax_id_type:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Type of tax ID for the organization.
          title: Tax Id Type
        tax_rate:
          anyOf:
          - type: number
          - pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
            type: string
          - type: 'null'
          description: Tax rate for the organization.
          title: Tax Rate
        users:
          description: List of users that needs to be created with the organization.
          items:
            $ref: '#/components/schemas/UserCreate'
          title: Users
          type: array
      required:
      - name
      title: OrganizationCreate
      type: object
    OrganizationCredential:
      properties:
        api_key_description:
          anyOf:
          - type: string
          - type: 'null'
          description: Description of the organization credential.
          title: Api Key Description
        api_key_id:
          description: Unique identifier of the organization credential.
          examples:
          - api_key_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^api_key_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Api Key Id
          type: string
          x-typeid-prefix: api_key
        api_key_name:
          anyOf:
          - type: string
          - type: 'null'
          description: Name of the organization credential. Only a-z, A-Z, 0-9, underscore,
            and hyphen are allowed.
          title: Api Key Name
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        deleted_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date/time the entry was deleted on
          title: Deleted On
        expires_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date and time the credential expiration.
          title: Expires At
        last_used_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date/time the entry was last used on
          title: Last Used On
        organization_id:
          default: None
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        role:
          anyOf:
          - $ref: '#/components/schemas/PublicRole'
          - $ref: '#/components/schemas/CustomRoleLabel'
          - type: 'null'
          title: Role
        status:
          $ref: '#/components/schemas/OrganizationCredentialStatus'
          description: The status of the organization credential.
          readOnly: true
      required:
      - api_key_id
      - status
      title: OrganizationCredential
      type: object
    OrganizationCredentialStatus:
      enum:
      - active
      - expired
      - revoked
      title: OrganizationCredentialStatus
      type: string
    OrganizationSortField:
      enum:
      - created_on
      - name
      - country_code
      title: OrganizationSortField
      type: string
    OrganizationStatus:
      enum:
      - active
      - inactive
      title: OrganizationStatus
      type: string
    OrganizationTokenResponse:
      properties:
        access_token:
          examples:
          - eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5vcHVzZG5zLmNvbSJ9.signature
          title: Access Token
          type: string
        expires_in:
          examples:
          - 3600
          title: Expires In
          type: integer
        token_type:
          default: Bearer
          examples:
          - Bearer
          title: Token Type
          type: string
      required:
      - access_token
      - expires_in
      title: OrganizationTokenResponse
      type: object
    OrganizationUpdate:
      properties:
        address_1:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: First line of the organization's address.
          title: Address 1
        address_2:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Second line of the organization's address.
          title: Address 2
        business_number:
          anyOf:
          - maxLength: 100
            minLength: 1
            type: string
          - type: 'null'
          description: Government issued business identifier for the organization
            issued.
          title: Business Number
        city:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: City of the organization's address.
          title: City
        country_code:
          anyOf:
          - description: ISO 3166-1 alpha-2 country code, plus XK (Kosovo).
            maxLength: 2
            minLength: 2
            pattern: ^\w{2}$
            type: string
          - type: 'null'
          title: Country Code
        default_locale:
          anyOf:
          - examples:
            - en_US
            type: string
          - type: 'null'
          description: Default locale for the organization.
          title: Default Locale
        name:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Name of the organization.
          title: Name
        postal_code:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Postal code of the organization's address.
          title: Postal Code
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: State or province of the organization's address.
          title: State
        tax_id:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Tax ID of the organization.
          title: Tax Id
        tax_id_type:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Type of tax ID for the organization.
          title: Tax Id Type
        tax_rate:
          anyOf:
          - type: number
          - pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,6}|(?=[\d.]{1,11}0*$)\d{0,6}\.\d{0,4}0*$)
            type: string
          - type: 'null'
          description: Tax rate for the organization.
          title: Tax Rate
      title: OrganizationUpdate
      type: object
    OrganizationWithBillingData:
      properties:
        account_balance:
          anyOf:
          - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            type: string
          - type: 'null'
          title: Account Balance
        address_1:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: First line of the organization's address.
          title: Address 1
        address_2:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Second line of the organization's address.
          title: Address 2
        attributes:
          items:
            $ref: '#/components/schemas/OrganizationAttribute'
          title: Attributes
          type: array
        billing_metadata:
          $ref: '#/components/schemas/BillingMetadata'
        billing_mode:
          $ref: '#/components/schemas/BillingMode'
          default: consolidated
          description: Whether the organization is billed on its own account (INDEPENDENT)
            or rolled up to its parent (CONSOLIDATED).
        business_number:
          anyOf:
          - maxLength: 100
            minLength: 1
            type: string
          - type: 'null'
          description: Government issued business identifier for the organization
            issued.
          title: Business Number
        city:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: City of the organization's address.
          title: City
        country_code:
          anyOf:
          - maxLength: 2
            pattern: ^\w{2}$
            type: string
          - type: 'null'
          description: ISO 3166-1 alpha-2 country code, plus XK (Kosovo).
          title: Country Code
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        currency:
          anyOf:
          - $ref: '#/components/schemas/Currency'
          - type: 'null'
          description: The currency used by the organization.
        default_locale:
          anyOf:
          - examples:
            - en_US
            type: string
          - type: 'null'
          description: Default locale for the organization.
          title: Default Locale
        deleted_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date/time the entry was deleted on
          title: Deleted On
        keycloak_organization_id:
          anyOf:
          - type: string
          - type: 'null'
          description: Keycloak organization id
          title: Keycloak Organization Id
        name:
          description: Name of the organization.
          maxLength: 255
          minLength: 1
          title: Name
          type: string
        organization_id:
          description: Unique identifier for the organization.
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        parent_organization_id:
          anyOf:
          - examples:
            - organization_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: organization
          - type: 'null'
          description: ID of the parent organization.
          title: Parent Organization Id
        postal_code:
          anyOf:
          - maxLength: 20
            minLength: 1
            type: string
          - type: 'null'
          description: Postal code of the organization's address.
          title: Postal Code
        state:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: State or province of the organization's address.
          title: State
        status:
          $ref: '#/components/schemas/OrganizationStatus'
          default: active
          description: Status of the organization.
        tax_id:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Tax ID of the organization.
          title: Tax Id
        tax_id_type:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: Type of tax ID for the organization.
          title: Tax Id Type
        tax_rate:
          anyOf:
          - pattern: ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
            type: string
          - type: 'null'
          description: Tax rate for the organization.
          title: Tax Rate
        users:
          items:
            $ref: '#/components/schemas/User'
          title: Users
          type: array
      required:
      - name
      title: OrganizationWithBillingData
      type: object
    OutboundTransferAction:
      enum:
      - approve
      - reject
      title: OutboundTransferAction
      type: string
    OutboundTransferRequest:
      properties:
        action:
          $ref: '#/components/schemas/OutboundTransferAction'
          description: Whether to approve or reject the pending outbound transfer
      required:
      - action
      title: OutboundTransferRequest
      type: object
    OutboundTransferResponse:
      properties:
        action:
          $ref: '#/components/schemas/OutboundTransferAction'
          description: The action that was applied to the outbound transfer
        domain_id:
          description: The ID of the domain whose outbound transfer was resolved
          examples:
          - domain_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Domain Id
          type: string
          x-typeid-prefix: domain
        domain_name:
          description: The name of the domain whose outbound transfer was resolved
          title: Domain Name
          type: string
      required:
      - domain_id
      - domain_name
      - action
      title: OutboundTransferResponse
      type: object
    PageResponse_EmailForwardLog_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/EmailForwardLog'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[EmailForwardLog]
      type: object
    PageResponse_JobBatchMetadataResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/JobBatchMetadataResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[JobBatchMetadataResponse]
      type: object
    PageResponse_JobResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/JobResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[JobResponse]
      type: object
    PageResponse_ObjectLog_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/ObjectLog'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[ObjectLog]
      type: object
    PageResponse_ParkingResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/ParkingResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[ParkingResponse]
      type: object
    PageResponse_RequestHistory_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/RequestHistory'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PageResponse[RequestHistory]
      type: object
    PaginationMetadata:
      properties:
        current_page:
          title: Current Page
          type: integer
        has_next_page:
          title: Has Next Page
          type: boolean
        has_previous_page:
          title: Has Previous Page
          type: boolean
        page_size:
          title: Page Size
          type: integer
        total_items:
          title: Total Items
          type: integer
        total_pages:
          title: Total Pages
          type: integer
      required:
      - total_pages
      - total_items
      - current_page
      - page_size
      - has_next_page
      - has_previous_page
      title: PaginationMetadata
      type: object
    PaginationMetadataDTO:
      properties:
        current_page:
          description: Current page number
          title: Current Page
          type: integer
        has_next_page:
          description: Whether there is a next page
          title: Has Next Page
          type: boolean
        has_previous_page:
          description: Whether there is a previous page
          title: Has Previous Page
          type: boolean
        page_size:
          description: Items per page
          title: Page Size
          type: integer
        total_items:
          description: Total number of items
          title: Total Items
          type: integer
        total_pages:
          description: Total number of pages
          title: Total Pages
          type: integer
      required:
      - total_pages
      - total_items
      - current_page
      - page_size
      - has_next_page
      - has_previous_page
      title: PaginationMetadataDTO
      type: object
    Pagination_BillingTransactionResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/BillingTransactionResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[BillingTransactionResponse]
      type: object
    Pagination_ContactAttributeSetResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/ContactAttributeSetResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[ContactAttributeSetResponse]
      type: object
    Pagination_ContactResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/ContactResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[ContactResponse]
      type: object
    Pagination_DnsZoneResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/DnsZoneResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[DnsZoneResponse]
      type: object
    Pagination_DomainForwardZone_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/DomainForwardZone'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[DomainForwardZone]
      type: object
    Pagination_DomainForward_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/DomainForward'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[DomainForward]
      type: object
    Pagination_DomainResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/DomainResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[DomainResponse]
      type: object
    Pagination_EmailForwardResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/EmailForwardResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[EmailForwardResponse]
      type: object
    Pagination_EmailForwardZone_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/EmailForwardZone'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[EmailForwardZone]
      type: object
    Pagination_EventResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/EventResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[EventResponse]
      type: object
    Pagination_InvoiceResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/InvoiceResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[InvoiceResponse]
      type: object
    Pagination_Organization_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/Organization'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[Organization]
      type: object
    Pagination_TagResponse_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/TagResponse'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[TagResponse]
      type: object
    Pagination_UserPublicWithRole_:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/UserPublicWithRole'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: Pagination[UserPublicWithRole]
      type: object
    Palette:
      properties:
        accent:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Accent
        accent_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Accent Foreground
        background:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Background
        body:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Body
        body_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Body Foreground
        border:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Border
        card:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Card
        card_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Card Foreground
        chart_colors:
          anyOf:
          - items:
              pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
              type: string
            type: array
          - type: 'null'
          title: Chart Colors
        danger:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Danger
        foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Foreground
        info:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Info
        input:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Input
        link:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Link
        muted:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Muted
        muted_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Muted Foreground
        primary:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Primary
        primary_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Primary Foreground
        secondary:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Secondary
        secondary_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Secondary Foreground
        sidebar:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Sidebar
        sidebar_accent:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Sidebar Accent
        sidebar_accent_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Sidebar Accent Foreground
        sidebar_border:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Sidebar Border
        sidebar_foreground:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Sidebar Foreground
        success:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Success
        table:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Table
        table_header:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Table Header
        table_row:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Table Row
        table_row_interactive:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Table Row Interactive
        tag_colors:
          anyOf:
          - items:
              pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
              type: string
            type: array
          - type: 'null'
          title: Tag Colors
        warning:
          anyOf:
          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            type: string
          - type: 'null'
          title: Warning
      title: Palette
      type: object
    ParkingActionPayloadData:
      properties:
        parking_reference:
          title: Parking Reference
          type: string
      required:
      - parking_reference
      title: ParkingActionPayloadData
      type: object
    ParkingAgreementAcceptance:
      description: Parking agreement acceptance details.
      properties:
        accepted:
          description: Whether the agreement has been accepted
          title: Accepted
          type: boolean
        url:
          description: URL where the parking agreement can be found
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
        version:
          description: Version of the parking agreement being accepted
          title: Version
          type: string
      required:
      - version
      - accepted
      - url
      title: ParkingAgreementAcceptance
      type: object
    ParkingCreateBulkCommand:
      properties:
        command:
          const: parking_create_bulk
          default: parking_create_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ParkingCreateBulkPayload'
          description: Bulk parking creation payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ParkingCreateBulkCommand
      type: object
    ParkingCreateBulkInstance:
      properties:
        domain:
          description: The domain name for the parking ad
          title: Domain
          type: string
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Override enabled setting for this domain
          title: Enabled
      required:
      - domain
      title: ParkingCreateBulkInstance
      type: object
    ParkingCreateBulkPayload:
      properties:
        instances:
          description: List of parking entries to create (1-1000)
          items:
            $ref: '#/components/schemas/ParkingCreateBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
        template:
          $ref: '#/components/schemas/ParkingCreateBulkTemplate'
          description: Shared settings for all parking entries
      required:
      - template
      - instances
      title: ParkingCreateBulkPayload
      type: object
    ParkingCreateBulkTemplate:
      properties:
        enabled:
          default: false
          description: Whether to enable parking immediately after creation
          title: Enabled
          type: boolean
      title: ParkingCreateBulkTemplate
      type: object
    ParkingCreatePayloadData:
      properties:
        domain:
          title: Domain
          type: string
        enabled:
          default: false
          title: Enabled
          type: boolean
      required:
      - domain
      title: ParkingCreatePayloadData
      type: object
    ParkingCreateWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        parking:
          $ref: '#/components/schemas/ParkingCreatePayloadData'
        type:
          const: parking_create_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - parking
      title: ParkingCreateWorkerPayload
      type: object
    ParkingDeleteBulkCommand:
      properties:
        command:
          const: parking_delete_bulk
          default: parking_delete_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ParkingDeleteBulkPayload'
          description: Bulk parking delete payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ParkingDeleteBulkCommand
      type: object
    ParkingDeleteBulkInstance:
      properties:
        parking_reference:
          anyOf:
          - examples:
            - parking_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: parking
          - type: string
          description: The parking ID or domain name of the entry to delete
          title: Parking Reference
      required:
      - parking_reference
      title: ParkingDeleteBulkInstance
      type: object
    ParkingDeleteBulkPayload:
      properties:
        instances:
          description: List of parking entries to delete (1-1000)
          items:
            $ref: '#/components/schemas/ParkingDeleteBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: ParkingDeleteBulkPayload
      type: object
    ParkingDeleteWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        parking:
          $ref: '#/components/schemas/ParkingActionPayloadData'
        type:
          const: parking_delete_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - parking
      title: ParkingDeleteWorkerPayload
      type: object
    ParkingDisableBulkCommand:
      properties:
        command:
          const: parking_disable_bulk
          default: parking_disable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ParkingDisableBulkPayload'
          description: Bulk parking disable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ParkingDisableBulkCommand
      type: object
    ParkingDisableBulkInstance:
      properties:
        parking_reference:
          anyOf:
          - examples:
            - parking_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: parking
          - type: string
          description: The parking ID or domain name of the entry to disable
          title: Parking Reference
      required:
      - parking_reference
      title: ParkingDisableBulkInstance
      type: object
    ParkingDisableBulkPayload:
      properties:
        instances:
          description: List of parking entries to disable (1-1000)
          items:
            $ref: '#/components/schemas/ParkingDisableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: ParkingDisableBulkPayload
      type: object
    ParkingDisableWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        parking:
          $ref: '#/components/schemas/ParkingActionPayloadData'
        type:
          const: parking_disable_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - parking
      title: ParkingDisableWorkerPayload
      type: object
    ParkingEnableBulkCommand:
      properties:
        command:
          const: parking_enable_bulk
          default: parking_enable_bulk
          title: Command
          type: string
        idempotency_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Idempotency key for this bulk command
          title: Idempotency Key
        payload:
          $ref: '#/components/schemas/ParkingEnableBulkPayload'
          description: Bulk parking enable payload
        version:
          default: v1
          description: Command version
          title: Version
          type: string
      required:
      - payload
      title: ParkingEnableBulkCommand
      type: object
    ParkingEnableBulkInstance:
      properties:
        parking_reference:
          anyOf:
          - examples:
            - parking_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: parking
          - type: string
          description: The parking ID or domain name of the entry to enable
          title: Parking Reference
      required:
      - parking_reference
      title: ParkingEnableBulkInstance
      type: object
    ParkingEnableBulkPayload:
      properties:
        instances:
          description: List of parking entries to enable (1-1000)
          items:
            $ref: '#/components/schemas/ParkingEnableBulkInstance'
          maxItems: 1000
          minItems: 1
          title: Instances
          type: array
      required:
      - instances
      title: ParkingEnableBulkPayload
      type: object
    ParkingEnableWorkerPayload:
      properties:
        operation:
          title: Operation
          type: string
        parking:
          $ref: '#/components/schemas/ParkingActionPayloadData'
        type:
          const: parking_enable_bulk
          title: Type
          type: string
      required:
      - type
      - operation
      - parking
      title: ParkingEnableWorkerPayload
      type: object
    ParkingMetricsResponse:
      properties:
        metrics:
          $ref: '#/components/schemas/ParkingStatistics'
          description: Metrics for the parking entry
        renewal_cost:
          description: Yearly renewal cost for the parked domain
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Renewal Cost
          type: string
        renewal_cost_currency:
          $ref: '#/components/schemas/Currency'
          description: Currency code for renewal cost (e.g., USD, EUR)
        revenue_progress:
          description: Revenue progress percentage towards covering renewal cost
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Revenue Progress
          type: string
      required:
      - metrics
      - renewal_cost
      - renewal_cost_currency
      - revenue_progress
      title: ParkingMetricsResponse
      type: object
    ParkingResponse:
      properties:
        compliance_status:
          anyOf:
          - $ref: '#/components/schemas/ComplianceStatus'
          - type: 'null'
          description: The compliance status of the parking ad
        content_language:
          anyOf:
          - type: string
          - type: 'null'
          description: The primary language code for the ad content
          title: Content Language
        content_url:
          anyOf:
          - type: string
          - type: 'null'
          description: The content URL for approved parking ads
          title: Content Url
        created_on:
          description: When the parking entry was created
          format: date-time
          title: Created On
          type: string
        domain:
          description: The domain name for the parking ad
          title: Domain
          type: string
        enabled:
          description: Whether parking is enabled
          title: Enabled
          type: boolean
        note:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional notes about the parking ad
          title: Note
        parking_id:
          description: Unique identifier for the parking entry
          examples:
          - parking_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Parking Id
          type: string
          x-typeid-prefix: parking
        updated_on:
          description: When the parking entry was last updated
          format: date-time
          title: Updated On
          type: string
      required:
      - parking_id
      - domain
      - enabled
      - created_on
      - updated_on
      title: ParkingResponse
      type: object
    ParkingSignupRequest:
      description: Request to sign up for parking (accept parking agreement).
      properties:
        agreement:
          $ref: '#/components/schemas/ParkingAgreementAcceptance'
          description: Parking agreement acceptance
      required:
      - agreement
      title: ParkingSignupRequest
      type: object
    ParkingSignupResponse:
      description: Response after parking signup.
      properties:
        agreement_stored:
          description: Whether the agreement acceptance was stored
          title: Agreement Stored
          type: boolean
        success:
          description: Whether the signup was successful
          title: Success
          type: boolean
      required:
      - success
      - agreement_stored
      title: ParkingSignupResponse
      type: object
    ParkingSignupStatusResponse:
      description: Response for checking parking signup status.
      properties:
        accepted_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the agreement was accepted
          title: Accepted At
        agreement_version:
          anyOf:
          - type: string
          - type: 'null'
          description: Version of the accepted agreement
          title: Agreement Version
        has_accepted_agreement:
          description: Whether the organization has accepted the parking agreement
          title: Has Accepted Agreement
          type: boolean
      required:
      - has_accepted_agreement
      title: ParkingSignupStatusResponse
      type: object
    ParkingSortField:
      enum:
      - domain
      - created_on
      - updated_on
      title: ParkingSortField
      type: string
    ParkingStatistics:
      properties:
        conversions:
          description: Number of conversions
          title: Conversions
          type: integer
        revenue:
          description: Total revenue
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Revenue
          type: string
        revenue_currency:
          $ref: '#/components/schemas/Currency'
          description: Currency code for revenue (e.g., USD, EUR)
        rpc:
          description: Revenue per click
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Rpc
          type: string
        rpm:
          description: Revenue per mille (thousand views)
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Rpm
          type: string
        views:
          description: Number of views
          title: Views
          type: integer
      required:
      - views
      - conversions
      - rpc
      - rpm
      - revenue
      - revenue_currency
      title: ParkingStatistics
      type: object
    ParkingTotalMetricsResponse:
      properties:
        total_count:
          description: Total number of parking entries
          title: Total Count
          type: integer
        total_metrics:
          $ref: '#/components/schemas/ParkingStatistics'
          description: Aggregated metrics for all parking entries
      required:
      - total_count
      - total_metrics
      title: ParkingTotalMetricsResponse
      type: object
    PatchOp:
      enum:
      - upsert
      - remove
      title: PatchOp
      type: string
    Period:
      properties:
        unit:
          $ref: '#/components/schemas/PeriodUnit'
          description: The unit of the period
        value:
          description: Amount of time in the unit
          exclusiveMinimum: 0.0
          title: Value
          type: integer
      required:
      - value
      - unit
      title: Period
      type: object
    PeriodList:
      anyOf:
      - items:
          $ref: '#/components/schemas/Period'
        type: array
      - type: 'null'
    PeriodStr:
      anyOf:
      - $ref: '#/components/schemas/Period'
      - type: 'null'
    PeriodUnit:
      enum:
      - y
      - m
      - d
      title: PeriodUnit
      type: string
    PlatformStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
        unique:
          title: Unique
          type: integer
      required:
      - key
      - total
      - unique
      title: PlatformStatsBucket
      type: object
    PostTransferRequirements:
      enum:
      - update_contacts
      - tld_specific
      title: PostTransferRequirements
      type: string
    PostalAddressType:
      enum:
      - loc
      - int
      title: PostalAddressType
      type: string
    PremiumAffectsType:
      enum:
      - registration
      - delete
      - renewal
      - update
      - transfer
      - restore
      - custom
      title: PremiumAffectsType
      type: string
    PremiumDomainsBase:
      properties:
        affects:
          anyOf:
          - items:
              $ref: '#/components/schemas/PremiumAffectsType'
            type: array
          - type: 'null'
          description: What operations are affected by premium status
          title: Affects
        source:
          anyOf:
          - $ref: '#/components/schemas/PremiumSourceType'
          - type: 'null'
          description: Source of premium domain information
        supported:
          description: Whether the registry has premium domains
          title: Supported
          type: boolean
      required:
      - supported
      title: PremiumDomainsBase
      type: object
    PremiumPriceEntryRes:
      description: A single premium price entry for a specific action
      properties:
        action:
          description: The action (e.g., create, renew, transfer)
          title: Action
          type: string
        currency:
          description: Currency of the price
          title: Currency
          type: string
        price:
          description: Customer-facing price after markup
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Price
          type: string
      required:
      - action
      - price
      - currency
      title: PremiumPriceEntryRes
      type: object
    PremiumPricingAction:
      properties:
        action:
          description: The action this price applies to (e.g., create, renew, transfer)
          examples:
          - create
          title: Action
          type: string
        currency:
          description: ISO 4217 currency code
          examples:
          - EUR
          title: Currency
          type: string
        price:
          description: Price for the action
          examples:
          - '625.00'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Price
          type: string
      required:
      - action
      - price
      - currency
      title: PremiumPricingAction
      type: object
    PremiumPricingRes:
      description: Premium pricing details for a domain
      properties:
        prices:
          description: Premium prices per action
          items:
            $ref: '#/components/schemas/PremiumPriceEntryRes'
          title: Prices
          type: array
      required:
      - prices
      title: PremiumPricingRes
      type: object
    PremiumPricingResponse:
      properties:
        prices:
          description: Premium prices per action
          items:
            $ref: '#/components/schemas/PremiumPricingAction'
          title: Prices
          type: array
      required:
      - prices
      title: PremiumPricingResponse
      type: object
    PremiumSourceType:
      enum:
      - EPP
      - API
      - CSV
      - manual
      title: PremiumSourceType
      type: string
    PreviewMailReq:
      properties:
        branding_document:
          anyOf:
          - $ref: '#/components/schemas/BrandingDocument'
          - type: 'null'
          description: Draft branding document to render the preview with; omit to
            preview with the default OpusDNS branding. Only the fields the template
            uses are applied, the rest are ignored.
        language_code:
          description: Locale to render in (e.g. en); falls back to the template's
            default
          title: Language Code
          type: string
        template_name:
          description: Template to render, as listed by the template catalog
          title: Template Name
          type: string
      required:
      - template_name
      - language_code
      title: PreviewMailReq
      type: object
    PreviewMailRes:
      properties:
        html:
          title: Html
          type: string
        subject:
          title: Subject
          type: string
        text:
          title: Text
          type: string
      required:
      - subject
      - html
      - text
      title: PreviewMailRes
      type: object
    PriceInfo:
      properties:
        currency:
          title: Currency
          type: string
        period:
          anyOf:
          - $ref: '#/components/schemas/PricingPeriod'
          - type: 'null'
          description: Pricing period (e.g., 1 year, 2 months)
        price:
          title: Price
          type: string
        product_action:
          anyOf:
          - type: string
          - type: 'null'
          title: Product Action
        product_class:
          anyOf:
          - type: string
          - type: 'null'
          title: Product Class
        product_type:
          title: Product Type
          type: string
      required:
      - product_type
      - price
      - currency
      title: PriceInfo
      type: object
    PricingPeriod:
      properties:
        unit:
          $ref: '#/components/schemas/PeriodUnit'
          description: The unit of the period
        value:
          description: Amount of time in the unit
          exclusiveMinimum: 0.0
          title: Value
          type: integer
      required:
      - value
      - unit
      title: PricingPeriod
      type: object
    Problem:
      properties:
        detail:
          anyOf:
          - type: string
          - type: 'null'
          title: Problem detail
        status:
          title: Status code
          type: integer
        title:
          title: Problem title
          type: string
        type:
          title: Problem type
          type: string
      required:
      - type
      - title
      - status
      title: Problem
      type: object
    ProductCreateRes:
      properties:
        product_name:
          description: The product name
          title: Product Name
          type: string
        subscribable_id:
          description: The created resource ID
          title: Subscribable Id
          type: string
        subscription_id:
          description: The created subscription ID
          examples:
          - subscription_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^subscription_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Subscription Id
          type: string
          x-typeid-prefix: subscription
      required:
      - subscription_id
      - subscribable_id
      - product_name
      title: ProductCreateRes
      type: object
    Protocol:
      enum:
      - http
      - https
      title: Protocol
      type: string
    PublicAuthRequestForm:
      properties:
        client_id:
          description: The organization ID associated with the credentials.
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Client Id
          type: string
          x-typeid-prefix: organization
        client_secret:
          description: Your client secret.
          examples:
          - TLKI8chiHU1s123VUgEAMLZDvX6cVW
          title: Client Secret
          type: string
        grant_type:
          description: The grant type for the authentication request (should always
            be 'client_credentials').
          examples:
          - client_credentials
          title: Grant Type
          type: string
      required:
      - grant_type
      - client_id
      - client_secret
      title: PublicAuthRequestForm
      type: object
    PublicPermission:
      examples:
      - domains:read
      - domains:manage
      - domains:delete
      type: string
    PublicPermissionSet:
      properties:
        permissions:
          items:
            $ref: '#/components/schemas/PublicPermission'
          title: Permissions
          type: array
      title: PublicPermissionSet
      type: object
    PublicReportListRes:
      properties:
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
        results:
          items:
            $ref: '#/components/schemas/PublicReportRes'
          title: Results
          type: array
      required:
      - results
      - pagination
      title: PublicReportListRes
      type: object
    PublicReportRes:
      properties:
        created_on:
          format: date-time
          title: Created On
          type: string
        file_size_bytes:
          anyOf:
          - type: integer
          - type: 'null'
          title: File Size Bytes
        generated_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Generated On
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        record_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Record Count
        report_id:
          examples:
          - report_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^report_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Report Id
          type: string
          x-typeid-prefix: report
        report_type:
          $ref: '#/components/schemas/ReportType'
        status:
          $ref: '#/components/schemas/ReportStatus'
        trigger_type:
          $ref: '#/components/schemas/ReportTriggerType'
        updated_on:
          format: date-time
          title: Updated On
          type: string
      required:
      - report_id
      - organization_id
      - report_type
      - status
      - trigger_type
      - created_on
      - updated_on
      title: PublicReportRes
      type: object
    PublicResource:
      enum:
      - organization
      - domains
      - domain_auth_codes
      - contacts
      - dns
      - hosts
      - email_forwards
      - domain_forwards
      - parking
      - events
      - jobs
      - billing
      - users
      - api_keys
      - registrar_credentials
      - tags
      - audit_logs
      - vanity_ns
      - whitelabel_branding
      - ai_concierge
      - ai_concierge_waitlist
      title: PublicResource
      type: string
    PublicRole:
      enum:
      - owner
      - admin
      - viewer
      - domain_manager
      - dns_manager
      - billing_manager
      title: PublicRole
      type: string
    PublicRoleAssignment:
      properties:
        role:
          anyOf:
          - $ref: '#/components/schemas/PublicRole'
          - $ref: '#/components/schemas/CustomRoleLabel'
          - type: 'null'
          title: Role
      title: PublicRoleAssignment
      type: object
    PublicRoleAssignmentRequest:
      properties:
        role:
          anyOf:
          - $ref: '#/components/schemas/AssignablePublicRole'
          - $ref: '#/components/schemas/CustomRoleLabel'
          - type: 'null'
          title: Role
      title: PublicRoleAssignmentRequest
      type: object
    PublicRoleDefinition:
      description: "A role as listed/read through the public API \u2014 built-in or\
        \ custom."
      properties:
        built_in:
          description: Built-in roles are immutable; custom roles are organization-owned.
          title: Built In
          type: boolean
        created_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Creation time (custom roles only).
          title: Created On
        description:
          anyOf:
          - type: string
          - type: 'null'
          description: Description of the role.
          title: Description
        label:
          $ref: '#/components/schemas/CustomRoleLabel'
          description: Per-organization unique identifier (snake_case, e.g. 'support_staff').
            Used as the URL path parameter.
        name:
          description: Display name of the role (e.g. 'Support Staff').
          title: Name
          type: string
        permissions:
          description: Permissions the role grants, as `resource:scope` strings.
          items:
            $ref: '#/components/schemas/PublicPermission'
          title: Permissions
          type: array
        updated_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Last update time (custom roles only).
          title: Updated On
      required:
      - label
      - name
      - built_in
      - permissions
      title: PublicRoleDefinition
      type: object
    PublicScope:
      enum:
      - read
      - manage
      - delete
      title: PublicScope
      type: string
    RdapBase:
      properties:
        rdap_server:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          description: RDAP server URL
          title: Rdap Server
      title: RdapBase
      type: object
    RedirectCode:
      enum:
      - 301
      - 302
      - 307
      - 308
      title: RedirectCode
      type: integer
    ReferrerStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
        unique:
          title: Unique
          type: integer
      required:
      - key
      - total
      - unique
      title: ReferrerStatsBucket
      type: object
    RegistrantChangeType:
      enum:
      - update
      - trade
      title: RegistrantChangeType
      type: string
    Registrar:
      enum:
      - INTERNETX
      - MONIKER
      - DOMAIN_BESTELLSYSTEM
      - CENTRALNIC
      - NICMANAGER
      - OPUSDNS
      - ENOM
      - OPENSRS
      - NIC_DIRECT
      title: Registrar
      type: string
    RegistrarContact:
      properties:
        city:
          anyOf:
          - type: string
          - type: 'null'
          title: City
        country:
          anyOf:
          - type: string
          - type: 'null'
          title: Country
        email:
          anyOf:
          - type: string
          - type: 'null'
          title: Email
        fax:
          anyOf:
          - type: string
          - type: 'null'
          title: Fax
        first_name:
          anyOf:
          - type: string
          - type: 'null'
          title: First Name
        id:
          anyOf:
          - type: string
          - type: 'null'
          description: Contact ID (required for OpusDNS-native contacts, may be null
            for registrar-sourced)
          title: Id
        last_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Name
        org:
          anyOf:
          - type: string
          - type: 'null'
          title: Org
        phone:
          anyOf:
          - type: string
          - type: 'null'
          title: Phone
        postal_code:
          anyOf:
          - type: string
          - type: 'null'
          title: Postal Code
        state:
          anyOf:
          - type: string
          - type: 'null'
          title: State
        street:
          anyOf:
          - type: string
          - type: 'null'
          title: Street
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
      title: RegistrarContact
      type: object
    RegistrarDomain:
      properties:
        contacts:
          additionalProperties:
            $ref: '#/components/schemas/RegistrarContact'
          default: {}
          title: Contacts
          type: object
        contacts_dedup:
          default: []
          items:
            $ref: '#/components/schemas/RegistrarContact'
          title: Contacts Dedup
          type: array
        expiry_date:
          anyOf:
          - type: string
          - type: 'null'
          title: Expiry Date
        name:
          title: Name
          type: string
        nameservers:
          default: []
          items:
            $ref: '#/components/schemas/RegistrarNameserver'
          title: Nameservers
          type: array
        registrar:
          anyOf:
          - type: string
          - type: 'null'
          title: Registrar
        statuses:
          items:
            type: string
          title: Statuses
          type: array
        zone:
          anyOf:
          - $ref: '#/components/schemas/RegistrarZone'
          - type: 'null'
      required:
      - name
      title: RegistrarDomain
      type: object
    RegistrarNameserver:
      properties:
        hostname:
          default: ''
          title: Hostname
          type: string
        ip_addresses:
          default: []
          items:
            type: string
          title: Ip Addresses
          type: array
      title: RegistrarNameserver
      type: object
    RegistrarRRSet:
      properties:
        name:
          title: Name
          type: string
        priority:
          anyOf:
          - type: integer
          - type: 'null'
          title: Priority
        record:
          default: []
          items:
            $ref: '#/components/schemas/RegistrarRecord'
          title: Record
          type: array
        ttl:
          title: Ttl
          type: integer
        type:
          title: Type
          type: string
      required:
      - name
      - ttl
      - type
      title: RegistrarRRSet
      type: object
    RegistrarRecord:
      properties:
        rdata:
          title: Rdata
          type: string
      required:
      - rdata
      title: RegistrarRecord
      type: object
    RegistrarZone:
      properties:
        name:
          title: Name
          type: string
        rrsets:
          default: []
          items:
            $ref: '#/components/schemas/RegistrarRRSet'
          title: Rrsets
          type: array
      required:
      - name
      title: RegistrarZone
      type: object
    RegistryHandleAttributeType:
      description: Registry handle attribute types for type-safe attribute key access.
      enum:
      - at-ext-contact:type
      - DE_CONTACT_TYPE
      - DE_GENERAL_REQUEST_URI_TEMPLATE
      - DE_ABUSE_URI_TEMPLATE
      - dnsbe:type
      - eurid:type
      - AFNIC_CONTACT_TYPE
      - AFNIC_PP_FIRST_NAME
      - AFNIC_PM_LEGAL_STATUS
      - AFNIC_PM_SIREN
      - AFNIC_PM_VAT
      - AFNIC_PM_TRADEMARK
      - AFNIC_PM_ASSOC_WALDEC
      - AFNIC_PM_ASSOC_PUBL_DATE
      - AFNIC_PM_ASSOC_PUBL_ANNOUNCE
      - AFNIC_PM_ASSOC_PUBL_PAGE
      - AFNIC_PM_ASSOC_DECL
      - AFNIC_PM_DUNS
      - AFNIC_PM_LOCAL
      - AFNIC_ID_STATUS
      - AFNIC_REACHABLE_MEDIA
      - AFNIC_REACHABLE_STATUS
      - AFNIC_RESTRICTED_PUBLICATION
      - ROTLD_CONTACT_TYPE
      - ROTLD_CNP_FISCAL_CODE
      - ROTLD_ID_NUMBER
      - ROTLD_REGISTRATION_NUMBER
      - ROTLD_DOMAIN_NAME
      - NOMINET_CONTACT_TYPE
      - NOMINET_CO_NO
      - NOMINET_TRAD_NAME
      - CIRA_CPR
      - SIDN_LEGAL_FORM
      - SIDN_LEGAL_REG_NO
      - SIDN_REGISTRANT_TYPE
      - SIDN_REGISTRATION_NUMBER
      - US_NEXUS_CATEGORY
      - US_NEXUS_COUNTRY_CODE
      - US_APP_PURPOSE
      - NIC_IT_ENTITY_TYPE
      - NIC_IT_REG_CODE
      - CZ_NIC_IDENT_TYPE
      - CZ_NIC_IDENT_VALUE
      - CZ_NIC_VAT
      - CZ_NIC_NOTIFY_EMAIL
      - DNS_LU_CONTACT_ROLE
      - SK_NIC_LEGAL_FORM
      - SK_NIC_IDENT_VALUE
      - NIC_LV_REG_NR
      - NIC_LV_VAT_NR
      - DOMREG_LT_CONTACT_ROLE
      - DOMREG_LT_ORG_CODE
      - NOR_ID_CONTACT_TYPE
      - NOR_ID_IDENTITY_TYPE
      - NOR_ID_IDENTITY_VALUE
      - REGISTRY_SE_ORG_NO
      - REGISTRY_SE_VAT_NO
      - DNS_PT_VAT
      - DNS_PT_MOBILE
      - DNS_PT_NIS2_VALIDATED_ON
      - PUNKTUM_DK_USER_TYPE
      - PUNKTUM_DK_CVR
      - PUNKTUM_DK_PNUMBER
      - PUNKTUM_DK_EAN
      - PUNKTUM_DK_SECONDARY_EMAIL
      - PUNKTUM_DK_MOBILEPHONE
      - PUNKTUM_DK_SOLE_PROPRIETORSHIP
      - PUNKTUM_DK_CONTACT_VERIFIED
      - INTERNET_EE_IDENT_TYPE
      - INTERNET_EE_IDENT_CC
      - INTERNET_EE_IDENT_VALUE
      title: RegistryHandleAttributeType
      type: string
    RegistryLockBase:
      properties:
        prevents:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: What operations are prevented by registry lock
          title: Prevents
        removal_process:
          anyOf:
          - type: string
          - type: 'null'
          description: Process for unlocking the domain
          title: Removal Process
        requires_manual_request:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether a manual request is required
          title: Requires Manual Request
        supported:
          description: Whether the registry provides a Registry Lock feature
          title: Supported
          type: boolean
      required:
      - supported
      title: RegistryLockBase
      type: object
    RegistryServiceBackend:
      enum:
      - afnic
      - centralnic
      - cira
      - switch
      - nicat
      - verisign
      - pir
      - gmo
      - google
      - denic
      - identity_digital
      - godaddy
      - dns_belgium
      - eurid
      - rotld
      - nominet_uk
      - radix
      - sidn
      - sidn_hello
      - tucows
      - dot_ua
      - nic_it
      - dns_lu
      - restena_lu
      - cz_nic
      - ras_manual
      - ras_external
      - register_si
      - sk_nic
      - dot_blog
      - nic_lv
      - domreg_lt
      - nor_id
      - website_ws
      - dns_pt
      - punktum_dk
      - nic_mexico
      - internet_ee
      - channel_isles
      - registry_se
      - nask
      - dns_belgium_gtld
      - nominet_dragon
      - red_es
      - internet_nz
      - zacr
      - traficom
      - ie_registry
      - nic_im
      - cn_nic
      - forth
      - dns_hr
      - nixi
      - is_nic
      - sg_nic
      - ke_nic
      - tld_box
      - ryce
      - cocca
      - amazon
      - tango
      title: RegistryServiceBackend
      type: string
    RenewalMode:
      enum:
      - renew
      - expire
      title: RenewalMode
      type: string
    RenewalModeDTO:
      description: "Wire mirror of the domain `RenewalMode` vocabulary \u2014 local\
        \ so dns_client doesn't\npull schema imports. The subscription itself has\
        \ no renewal_mode column; api-nameserver\nderives this from whether a renewal\
        \ is scheduled."
      enum:
      - renew
      - expire
      title: RenewalModeDTO
      type: string
    ReportStatus:
      enum:
      - pending
      - generating
      - completed
      - failed
      - empty
      title: ReportStatus
      type: string
    ReportTriggerType:
      enum:
      - on_demand
      - scheduled
      title: ReportTriggerType
      type: string
    ReportType:
      enum:
      - domain_inventory
      - dns_zone_summary
      - dns_zone_records
      - domain_forwards
      - expiring_domains
      - email_forwards
      - registrar_portfolio_pdf
      - billing_transactions
      - billing_transactions_monthly
      - suborg_billing_transactions_monthly
      - agp_deletions
      title: ReportType
      type: string
    RequestHistory:
      properties:
        client_ip:
          description: Client IP address
          format: ipvanyaddress
          title: Client Ip
          type: string
        duration:
          description: Request duration in milliseconds
          title: Duration
          type: number
        method:
          $ref: '#/components/schemas/HTTPMethod'
          description: HTTP method
        path:
          description: Request path
          title: Path
          type: string
        performed_by_id:
          anyOf:
          - type: string
          - type: 'null'
          description: ID of the actor who performed the request
          title: Performed By Id
        performed_by_type:
          anyOf:
          - $ref: '#/components/schemas/ExecutingEntity'
          - type: 'null'
          description: Type of the actor who performed the request
        request_body:
          anyOf:
          - additionalProperties: true
            type: object
          - items: {}
            type: array
          - type: 'null'
          description: Request body
          title: Request Body
        request_completed_at:
          description: Timestamp when the request completed
          format: date-time
          title: Request Completed At
          type: string
        request_started_at:
          description: Timestamp when the request started
          format: date-time
          title: Request Started At
          type: string
        response_body:
          anyOf:
          - additionalProperties: true
            type: object
          - items: {}
            type: array
          - type: 'null'
          description: Response body
          title: Response Body
        server_request_id:
          description: Unique ID of the request
          title: Server Request Id
          type: string
        status_code:
          description: HTTP status code
          title: Status Code
          type: integer
      required:
      - server_request_id
      - method
      - path
      - status_code
      - duration
      - client_ip
      - request_started_at
      - request_completed_at
      title: RequestHistory
      type: object
    RequestHistorySortField:
      enum:
      - method
      - path
      - status_code
      - duration
      - server_request_id
      - performed_by_type
      - performed_by_id
      - created_on
      - request_started_at
      - request_completed_at
      title: RequestHistorySortField
      type: string
    RequiredClaim:
      properties:
        accepted_proofs:
          anyOf:
          - items:
              $ref: '#/components/schemas/NizzaVerificationProof'
            type: array
          - type: 'null'
          description: The evidence the registry accepts for this claim; any proof
            is accepted when omitted
          title: Accepted Proofs
        claim:
          $ref: '#/components/schemas/NizzaClaim'
          description: Which contact claim the registry requires to have been verified
      required:
      - claim
      title: RequiredClaim
      type: object
    ReservedDomainsBase:
      properties:
        source:
          anyOf:
          - $ref: '#/components/schemas/ReservedSourceType'
          - type: 'null'
          description: Source of reserved domain information
        supported:
          description: Registry provides a reserved list
          title: Supported
          type: boolean
        url:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          description: Link to reserved list
          title: Url
      required:
      - supported
      title: ReservedDomainsBase
      type: object
    ReservedSourceType:
      enum:
      - API
      - CSV
      - manual
      title: ReservedSourceType
      type: string
    RgpOperations:
      properties:
        report:
          default: true
          description: Whether registry supports RGP restore report
          title: Report
          type: boolean
        request:
          default: true
          description: Whether registry supports RGP restore request
          title: Request
          type: boolean
      title: RgpOperations
      type: object
    SetRenewalModeReq:
      properties:
        renewal_mode:
          $ref: '#/components/schemas/RenewalModeDTO'
          description: expire cancels the set at period end (serves out the term),
            renew un-cancels (resumes auto-renew)
      required:
      - renewal_mode
      title: SetRenewalModeReq
      type: object
    SetVanityNameserverSetDefaultRes:
      properties:
        vanity_nameserver_set:
          $ref: '#/components/schemas/VanityNameserverSetDTO'
          description: The set that is now the org's default (or unchanged set on
            a no-op 200).
      required:
      - vanity_nameserver_set
      title: SetVanityNameserverSetDefaultRes
      type: object
    SignupCreate:
      properties:
        agreements:
          anyOf:
          - items:
              $ref: '#/components/schemas/UserAgreementAcceptance'
            type: array
          - type: 'null'
          description: User agreement acceptances.
          title: Agreements
        organization:
          $ref: '#/components/schemas/OrganizationCreate'
          description: Organization signup.
        terms_of_service:
          anyOf:
          - $ref: '#/components/schemas/TermsOfServiceAccept'
          - type: 'null'
          description: Terms of service acceptance (legacy).
        user:
          $ref: '#/components/schemas/UserCreate'
          description: User signup to platform.
      required:
      - user
      - organization
      title: SignupCreate
      type: object
    SignupResponse:
      properties:
        organization:
          $ref: '#/components/schemas/Organization'
        user:
          $ref: '#/components/schemas/User'
      required:
      - user
      - organization
      title: SignupResponse
      type: object
    SldLength:
      properties:
        max:
          description: Maximum length of a domain name
          maximum: 63.0
          title: Max
          type: integer
        min:
          description: Minimum length of a domain name
          minimum: 1.0
          title: Min
          type: integer
      required:
      - min
      - max
      title: SldLength
      type: object
    SortOrder:
      enum:
      - asc
      - desc
      title: SortOrder
      type: string
    StatusChanges:
      properties:
        add:
          description: Statuses to add to the domain
          items:
            $ref: '#/components/schemas/DomainClientStatus'
          title: Add
          type: array
        remove:
          description: Statuses to remove from the domain
          items:
            $ref: '#/components/schemas/DomainClientStatus'
          title: Remove
          type: array
      title: StatusChanges
      type: object
    StatusCodeStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
      required:
      - key
      - total
      title: StatusCodeStatsBucket
      type: object
    StatusTagResponse:
      properties:
        color:
          $ref: '#/components/schemas/TagColor'
          description: The color of the tag
        description:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about this status tag
          title: Description
        label:
          description: The label of the tag
          maxLength: 255
          minLength: 1
          title: Label
          type: string
        tag_type:
          $ref: '#/components/schemas/StatusTagType'
          description: The status tag type identifier
      required:
      - tag_type
      - label
      - color
      title: StatusTagResponse
      type: object
    StatusTagType:
      enum:
      - VERIFICATION_REQUIRED
      - CREATE_REQUESTED
      - INBOUND_TRANSFER_PENDING
      - OUTBOUND_TRANSFER_PENDING
      - EXTERNAL
      - IMPORT_REQUESTED
      - IMPORT_PENDING
      - DNSSEC_PENDING
      title: StatusTagType
      type: string
    StrictMoneyDecimal:
      examples:
      - '12.50'
      pattern: ^\d{1,8}\.\d{2}$
      type: string
    Support:
      properties:
        email:
          anyOf:
          - pattern: ^[^@\s]+@[^@\s]+\.[^@\s]+$
            type: string
          - type: 'null'
          title: Email
        help_center_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Help Center Url
        status_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Status Url
        url:
          anyOf:
          - type: string
          - type: 'null'
          title: Url
      title: Support
      type: object
    SyncOperationType:
      enum:
      - registration
      - renewal
      - transfer
      title: SyncOperationType
      type: string
    TLDType:
      enum:
      - gTLD
      - ccTLD
      title: TLDType
      type: string
    TagColor:
      enum:
      - color-1
      - color-2
      - color-3
      - color-4
      - color-5
      - color-6
      - color-7
      - color-8
      - color-9
      - color-10
      title: TagColor
      type: string
    TagCreate:
      properties:
        color:
          anyOf:
          - $ref: '#/components/schemas/TagColor'
          - type: 'null'
          default: color-1
          description: The color of the tag
        description:
          anyOf:
          - maxLength: 1024
            type: string
          - type: 'null'
          description: Optional description of the tag
          title: Description
        label:
          description: A human-readable label for the tag
          maxLength: 50
          minLength: 1
          title: Label
          type: string
        type:
          $ref: '#/components/schemas/TagType'
          description: Which category a tag applies to, cannot be changed once created
      required:
      - label
      - type
      title: TagCreate
      type: object
    TagEnrichedResponse:
      properties:
        color:
          $ref: '#/components/schemas/TagColor'
          description: The color of the tag
        label:
          description: The label of the tag
          maxLength: 255
          minLength: 1
          title: Label
          type: string
        tag_id:
          description: The unique identifier of the tag
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
      required:
      - tag_id
      - label
      - color
      title: TagEnrichedResponse
      type: object
    TagFilterMode:
      enum:
      - match_any
      - match_all
      - match_none
      title: TagFilterMode
      type: string
    TagResponse:
      properties:
        color:
          $ref: '#/components/schemas/TagColor'
          description: The color of the tag
        created_on:
          description: The date/time the tag was created on
          format: date-time
          title: Created On
          type: string
        description:
          anyOf:
          - maxLength: 1024
            type: string
          - type: 'null'
          description: Optional description of the tag
          title: Description
        label:
          description: The label of the tag
          maxLength: 255
          minLength: 1
          title: Label
          type: string
        object_count:
          default: 0
          description: Number of objects tagged with this tag
          title: Object Count
          type: integer
        tag_id:
          description: The unique identifier of the tag
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
        type:
          $ref: '#/components/schemas/TagType'
          description: Which category a tag applies to, cannot be changed once created
        updated_on:
          description: The date/time the tag was last updated on
          format: date-time
          title: Updated On
          type: string
      required:
      - tag_id
      - label
      - type
      - color
      - created_on
      - updated_on
      title: TagResponse
      type: object
    TagSortField:
      enum:
      - label
      - created_on
      - updated_on
      title: TagSortField
      type: string
    TagType:
      enum:
      - DOMAIN
      - CONTACT
      - ZONE
      title: TagType
      type: string
    TagUpdate:
      properties:
        color:
          anyOf:
          - $ref: '#/components/schemas/TagColor'
          - type: 'null'
          description: The color of the tag
        description:
          anyOf:
          - maxLength: 1024
            type: string
          - type: 'null'
          description: Optional description of the tag
          title: Description
        label:
          anyOf:
          - maxLength: 50
            minLength: 1
            type: string
          - type: 'null'
          description: A human-readable label for the tag
          title: Label
      title: TagUpdate
      type: object
    TermsOfServiceAccept:
      properties:
        accepted:
          description: The organization accepts Terms of Service.
          title: Accepted
          type: boolean
      required:
      - accepted
      title: TermsOfServiceAccept
      type: object
    Theme:
      properties:
        dark:
          anyOf:
          - $ref: '#/components/schemas/Palette'
          - type: 'null'
        font_family:
          anyOf:
          - pattern: ^[0-9a-zA-Z, -]{1,128}$
            type: string
          - type: 'null'
          title: Font Family
        font_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Font Url
        light:
          anyOf:
          - $ref: '#/components/schemas/Palette'
          - type: 'null'
        radius:
          anyOf:
          - pattern: ^[0-9a-zA-Z.% ]{1,32}$
            type: string
          - type: 'null'
          title: Radius
      title: Theme
      type: object
    TimeRange:
      enum:
      - 1h
      - 1d
      - 7d
      - 30d
      - 1y
      title: TimeRange
      type: string
    TimeSeriesBucket:
      properties:
        timestamp:
          format: date-time
          title: Timestamp
          type: string
        total:
          title: Total
          type: integer
      required:
      - timestamp
      - total
      title: TimeSeriesBucket
      type: object
    TldBase:
      properties:
        name:
          description: The TLD being configured
          title: Name
          type: string
        third_level_structure:
          default: []
          description: Name of the third levels (name and overrides)
          items:
            type: string
          title: Third Level Structure
          type: array
        type:
          $ref: '#/components/schemas/TLDType'
          description: The type of the TLD (e.g., gTLD, ccTLD)
      required:
      - name
      - type
      title: TldBase
      type: object
    TldResponseShort:
      properties:
        tld:
          examples:
          - com
          - org
          - net
          title: Tld
          type: string
        type:
          $ref: '#/components/schemas/TLDType'
          examples:
          - gTLD
          - ccTLD
      required:
      - tld
      - type
      title: TldResponseShort
      type: object
    TldSpecificationResponse:
      properties:
        characters:
          $ref: '#/components/schemas/SldLength'
          description: Character limits for domain names
        contacts:
          anyOf:
          - $ref: '#/components/schemas/ContactsBase'
          - type: 'null'
          description: Contacts configuration
        dns_configuration:
          $ref: '#/components/schemas/DnsConfigurationBase'
          description: DNS configuration
        domain_lifecycle:
          $ref: '#/components/schemas/DomainLifecycleBase'
          description: Domain lifecycle configuration
        domain_statuses:
          $ref: '#/components/schemas/DomainStatusesBase'
          description: Domain statuses configuration
        idn:
          $ref: '#/components/schemas/IdnBase'
          description: IDN configuration
        launch_phases:
          anyOf:
          - $ref: '#/components/schemas/LaunchPhasesBase'
          - type: 'null'
          description: Launch phases configuration
        legal_requirements:
          description: Legal requirements that must be met for this TLD
          items:
            $ref: '#/components/schemas/LegalRequirementBase'
          title: Legal Requirements
          type: array
        local_presence:
          anyOf:
          - $ref: '#/components/schemas/LocalPresenceBase'
          - type: 'null'
          description: Local presence requirements
        parking_enabled:
          default: false
          description: Whether parking is enabled for this TLD
          title: Parking Enabled
          type: boolean
        premium_domains:
          anyOf:
          - $ref: '#/components/schemas/PremiumDomainsBase'
          - type: 'null'
          description: Premium domains configuration
        rdap:
          anyOf:
          - $ref: '#/components/schemas/RdapBase'
          - type: 'null'
          description: RDAP configuration
        registry_lock:
          anyOf:
          - $ref: '#/components/schemas/RegistryLockBase'
          - type: 'null'
          description: Registry lock configuration
        reserved_domains:
          anyOf:
          - $ref: '#/components/schemas/ReservedDomainsBase'
          - type: 'null'
          description: Reserved domains configuration
        tlds:
          description: List of TLDs being configured
          items:
            $ref: '#/components/schemas/TldBase'
          title: Tlds
          type: array
        transfer_policies:
          $ref: '#/components/schemas/TransferPoliciesBase'
          description: Transfer policies configuration
        verification_policies:
          anyOf:
          - additionalProperties:
              $ref: '#/components/schemas/VerificationPolicy'
            propertyNames:
              $ref: '#/components/schemas/VerificationPolicyType'
            type: object
          - type: 'null'
          description: Verification Policy Configuration
          title: Verification Policies
        whois:
          anyOf:
          - $ref: '#/components/schemas/WhoisBase'
          - type: 'null'
          description: WHOIS configuration
      required:
      - tlds
      - domain_lifecycle
      - domain_statuses
      - characters
      - idn
      - dns_configuration
      - transfer_policies
      title: TldSpecificationResponse
      type: object
    TmAddr:
      description: Address information (addrType in RFC 9361)
      properties:
        cc:
          description: ISO 3166-2 two-character country code
          maxLength: 2
          minLength: 2
          title: Cc
          type: string
        city:
          title: City
          type: string
        pc:
          anyOf:
          - type: string
          - type: 'null'
          title: Pc
        sp:
          anyOf:
          - type: string
          - type: 'null'
          title: Sp
        street:
          items:
            type: string
          maxItems: 3
          minItems: 1
          title: Street
          type: array
      required:
      - street
      - city
      - cc
      title: TmAddr
      type: object
    TmClaim:
      description: A single trademark claim within a notice (claimType in RFC 9361)
      properties:
        class_descs:
          description: Nice Classification descriptions
          items:
            $ref: '#/components/schemas/TmClassDesc'
          title: Class Descs
          type: array
        contacts:
          description: Zero or more contacts/representatives
          items:
            $ref: '#/components/schemas/TmContact'
          title: Contacts
          type: array
        goods_and_services:
          description: Full description of goods and services
          title: Goods And Services
          type: string
        holders:
          description: One or more holders of the mark
          items:
            $ref: '#/components/schemas/TmHolder'
          minItems: 1
          title: Holders
          type: array
        jur_desc:
          $ref: '#/components/schemas/TmJurDesc'
          description: Jurisdiction where the mark is protected
        mark_name:
          description: Mark text string
          title: Mark Name
          type: string
        not_exact_match:
          anyOf:
          - $ref: '#/components/schemas/TmNotExactMatch'
          - type: 'null'
          description: Present if claim added by non-exact match rule
      required:
      - mark_name
      - holders
      - jur_desc
      - goods_and_services
      title: TmClaim
      type: object
    TmClassDesc:
      description: Nice Classification description (classDescType in RFC 9361)
      properties:
        class_num:
          description: Nice Classification class number
          title: Class Num
          type: integer
        description:
          description: Description of the class in English
          title: Description
          type: string
      required:
      - class_num
      - description
      title: TmClassDesc
      type: object
    TmContact:
      description: Contact / representative of the mark (contactType in RFC 9361)
      properties:
        addr:
          $ref: '#/components/schemas/TmAddr'
        email:
          title: Email
          type: string
        fax:
          anyOf:
          - type: string
          - type: 'null'
          title: Fax
        name:
          title: Name
          type: string
        org:
          anyOf:
          - type: string
          - type: 'null'
          title: Org
        type:
          $ref: '#/components/schemas/ContactType'
        voice:
          title: Voice
          type: string
      required:
      - type
      - name
      - addr
      - voice
      - email
      title: TmContact
      type: object
    TmCourt:
      description: Court resolution reference (courtType in RFC 9361)
      properties:
        cc:
          description: ISO 3166-2 jurisdiction country code
          maxLength: 2
          minLength: 2
          title: Cc
          type: string
        court_name:
          description: Name of the court
          title: Court Name
          type: string
        ref_num:
          description: Reference number of the court resolution
          title: Ref Num
          type: string
        region:
          description: Region(s) within the jurisdiction
          items:
            type: string
          title: Region
          type: array
      required:
      - ref_num
      - cc
      - court_name
      title: TmCourt
      type: object
    TmHolder:
      description: Holder of the mark (holderType in RFC 9361). name or org must be
        set.
      properties:
        addr:
          $ref: '#/components/schemas/TmAddr'
        email:
          anyOf:
          - type: string
          - type: 'null'
          title: Email
        entitlement:
          $ref: '#/components/schemas/HolderEntitlement'
        fax:
          anyOf:
          - type: string
          - type: 'null'
          title: Fax
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
        org:
          anyOf:
          - type: string
          - type: 'null'
          title: Org
        voice:
          anyOf:
          - type: string
          - type: 'null'
          title: Voice
      required:
      - entitlement
      - addr
      title: TmHolder
      type: object
    TmJurDesc:
      description: Jurisdiction description (jurDescType in RFC 9361)
      properties:
        description:
          description: Name of jurisdiction in English
          title: Description
          type: string
        jur_cc:
          description: WIPO ST.3 two-character jurisdiction code
          maxLength: 2
          minLength: 2
          title: Jur Cc
          type: string
      required:
      - jur_cc
      - description
      title: TmJurDesc
      type: object
    TmNotExactMatch:
      description: Signals claim was added by non-exact match rules (noExactMatchType
        in RFC 9361)
      properties:
        court:
          items:
            $ref: '#/components/schemas/TmCourt'
          title: Court
          type: array
        intro:
          default: 'This domain name label has previously been found to be used or
            registered abusively against the following trademarks according to the
            referenced decisions:'
          description: Introductory text for the non-exact match section
          title: Intro
          type: string
        udrp:
          items:
            $ref: '#/components/schemas/TmUdrp'
          title: Udrp
          type: array
      title: TmNotExactMatch
      type: object
    TmUdrp:
      description: UDRP case reference (udrpType in RFC 9361)
      properties:
        case_no:
          description: UDRP case number
          title: Case No
          type: string
        udrp_provider:
          description: Name of the UDRP provider
          title: Udrp Provider
          type: string
      required:
      - case_no
      - udrp_provider
      title: TmUdrp
      type: object
    TrademarkClaimsBase:
      properties:
        end_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: End date of trademark claims
          title: End Date
        start_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Start date of trademark claims
          title: Start Date
        supported:
          description: Whether trademark claims are supported
          title: Supported
          type: boolean
        tmch_required:
          anyOf:
          - type: boolean
          - type: 'null'
          description: If true, claim notifications are mandatory within the timeframe
          title: Tmch Required
      required:
      - supported
      title: TrademarkClaimsBase
      type: object
    TransferAckType:
      enum:
      - none
      - registrar
      - registrant
      - both
      title: TransferAckType
      type: string
    TransferLockPolicyBase:
      properties:
        supported_by_registrar:
          description: Whether the registrar supports transfer locks
          title: Supported By Registrar
          type: boolean
        supported_by_registry:
          description: Whether the registry supports transfer locks
          title: Supported By Registry
          type: boolean
      required:
      - supported_by_registry
      - supported_by_registrar
      title: TransferLockPolicyBase
      type: object
    TransferPoliciesBase:
      properties:
        authinfo_max_length:
          anyOf:
          - minimum: 1.0
            type: integer
          - type: 'null'
          description: Maximum length of the auth info
          title: Authinfo Max Length
        authinfo_min_length:
          anyOf:
          - minimum: 1.0
            type: integer
          - type: 'null'
          description: Minimum length of the auth info
          title: Authinfo Min Length
        authinfo_pattern:
          anyOf:
          - type: string
          - type: 'null'
          description: Regex pattern for validating auth info
          title: Authinfo Pattern
        authinfo_required:
          description: Whether an auth info is required for transfers
          title: Authinfo Required
          type: boolean
        authinfo_set_by_registrar:
          default: true
          description: Whether the registrar can set the auth info, or whether the
            registry controls it
          title: Authinfo Set By Registrar
          type: boolean
        authinfo_time_limited:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether an auth info has a time limit
          title: Authinfo Time Limited
        authinfo_validity_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Validity period of the auth info (e.g., '5D' for 5 days)
          title: Authinfo Validity Period
        contacts_in_transfer_command:
          default: false
          description: Whether the registry takes the domain contacts on the transfer
            command itself
          title: Contacts In Transfer Command
          type: boolean
        info_contact_authinfo:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether querying a foreign contact with authinfo is possible
          title: Info Contact Authinfo
        info_domain_authinfo:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether querying a foreign domain with authinfo is possible
          title: Info Domain Authinfo
        post_transfer_requirements:
          anyOf:
          - items:
              $ref: '#/components/schemas/PostTransferRequirements'
            type: array
          - type: 'null'
          description: 'Post-transfer requirements: lists the behaviors, as in [''update_contacts'',
            ''set_transfer_lock''] or [ ''tld_specific'' ] for specific behavior'
          title: Post Transfer Requirements
        transfer_ack:
          anyOf:
          - $ref: '#/components/schemas/TransferAckType'
          - type: 'null'
          description: Whether a transfer can be approved
        transfer_email_required:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether an email confirmation is required to perform the transfer
          title: Transfer Email Required
        transfer_lock_policy:
          $ref: '#/components/schemas/TransferLockPolicyBase'
          description: Transfer lock policy
        transfer_nack:
          anyOf:
          - $ref: '#/components/schemas/TransferAckType'
          - type: 'null'
          description: Whether a transfer can be denied
        transfer_renewal_period:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: If transfer_renews_domain is true, the renewal period (e.g.,
            '1Y' for 1 year)
          title: Transfer Renewal Period
        transfer_renews_domain:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether a transfer triggers a domain renewal
          title: Transfer Renews Domain
        transfer_time:
          anyOf:
          - examples:
            - P5D
            - P1Y
            pattern: ^\-?P?(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?$
            type: string
          - type: 'null'
          description: Time duration of transfers in ISO 8601 format (e.g., 5D, -7D)
            according to the policy, 0 = real-time
          title: Transfer Time
      required:
      - transfer_lock_policy
      - authinfo_required
      title: TransferPoliciesBase
      type: object
    UsageGranularity:
      enum:
      - day
      - week
      - month
      title: UsageGranularity
      type: string
    UsageProduct:
      enum:
      - ai_inference
      title: UsageProduct
      type: string
    User:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        keycloak_user_id:
          anyOf:
          - type: string
          - type: 'null'
          description: Keycloak user id
          title: Keycloak User Id
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        organization_id:
          default: None
          description: The user's organization id
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        user_id:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: User
      type: object
    UserAgentStatsBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
        unique:
          title: Unique
          type: integer
      required:
      - key
      - total
      - unique
      title: UserAgentStatsBucket
      type: object
    UserAgreementAcceptance:
      properties:
        accepted:
          description: Whether the agreement has been accepted.
          title: Accepted
          type: boolean
        type:
          $ref: '#/components/schemas/AgreementType'
          description: Type of agreement being accepted.
        url:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          description: URL where the agreement can be found.
          title: Url
        version:
          anyOf:
          - type: string
          - type: 'null'
          description: Version of the agreement being accepted.
          title: Version
      required:
      - type
      - accepted
      title: UserAgreementAcceptance
      type: object
    UserAttributeBase:
      properties:
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      title: UserAttributeBase
      type: object
    UserAttributeResponse:
      properties:
        key:
          description: Key of the attribute.
          minLength: 1
          title: Key
          type: string
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Value of the attribute.
      required:
      - key
      title: UserAttributeResponse
      type: object
    UserCreate:
      properties:
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        password:
          anyOf:
          - examples:
            - correcthorsebatterystaple
            type: string
          - type: 'null'
          description: Plaintext password for hashing during creation
          title: Password
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        user_attributes:
          anyOf:
          - items:
              $ref: '#/components/schemas/UserAttributeBase'
            type: array
          - type: 'null'
          description: User attributes
          title: User Attributes
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: UserCreate
      type: object
    UserOrganizationMeta:
      properties:
        currency:
          anyOf:
          - $ref: '#/components/schemas/Currency'
          - type: 'null'
          description: Currency used by the user's organization.
        parent_organization_id:
          anyOf:
          - examples:
            - organization_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: organization
          - type: 'null'
          description: ID of the parent organization, if any.
          title: Parent Organization Id
      title: UserOrganizationMeta
      type: object
    UserProfile:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        organization:
          anyOf:
          - $ref: '#/components/schemas/UserOrganizationMeta'
          - type: 'null'
        organization_id:
          default: None
          description: The user's organization id
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        permissions:
          anyOf:
          - items:
              $ref: '#/components/schemas/PublicPermission'
            type: array
          - type: 'null'
          title: Permissions
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        role:
          anyOf:
          - $ref: '#/components/schemas/PublicRole'
          - $ref: '#/components/schemas/CustomRoleLabel'
          - type: 'null'
          title: Role
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        user_attributes:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          description: All of the user attributes
          examples:
          - array:
            - 1
            - 2
            - 3
            bool: true
            number: 1
            string: value2
          title: User Attributes
          type: object
        user_id:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: UserProfile
      type: object
    UserPublic:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        organization_id:
          default: None
          description: The user's organization id
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        user_id:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: UserPublic
      type: object
    UserPublicWithAttributes:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        organization_id:
          default: None
          description: The user's organization id
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        user_attributes:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          description: All of the user attributes
          examples:
          - array:
            - 1
            - 2
            - 3
            bool: true
            number: 1
            string: value2
          title: User Attributes
          type: object
        user_id:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: UserPublicWithAttributes
      type: object
    UserPublicWithRole:
      properties:
        created_on:
          description: The date/time the entry was created on
          format: date-time
          title: Created On
          type: string
        email:
          description: The user's email address
          format: email
          title: Email
          type: string
        first_name:
          description: The user's first name
          maxLength: 255
          minLength: 1
          title: First Name
          type: string
        last_name:
          description: The user's last name
          maxLength: 255
          minLength: 1
          title: Last Name
          type: string
        locale:
          examples:
          - en_US
          title: Locale
          type: string
        organization_id:
          default: None
          description: The user's organization id
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          examples:
          - '+1.2125552368'
          title: Phone
        role:
          anyOf:
          - $ref: '#/components/schemas/PublicRole'
          - $ref: '#/components/schemas/CustomRoleLabel'
          - type: 'null'
          title: Role
        updated_on:
          description: The date/time the entry was last updated on
          format: date-time
          title: Updated On
          type: string
        user_id:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
        username:
          description: The user's unique username
          maxLength: 128
          minLength: 3
          pattern: ^[a-zA-Z0-9\-+_@.]+$
          title: Username
          type: string
      required:
      - username
      - first_name
      - last_name
      - email
      - locale
      title: UserPublicWithRole
      type: object
    UserSortField:
      enum:
      - created_on
      - username
      - email
      title: UserSortField
      type: string
    UserTokenResponse:
      properties:
        access_token:
          examples:
          - eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5vcHVzZG5zLmNvbSJ9.signature
          title: Access Token
          type: string
        expires_in:
          examples:
          - 3600
          title: Expires In
          type: integer
        refresh_expires_in:
          examples:
          - 86400
          title: Refresh Expires In
          type: integer
        refresh_token:
          examples:
          - eyJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoicmVmcmVzaCJ9.signature
          title: Refresh Token
          type: string
        token_type:
          default: Bearer
          examples:
          - Bearer
          title: Token Type
          type: string
      required:
      - access_token
      - expires_in
      - refresh_token
      - refresh_expires_in
      title: UserTokenResponse
      type: object
    UserUpdate:
      properties:
        email:
          anyOf:
          - format: email
            type: string
          - type: 'null'
          description: The user's email address
          title: Email
        first_name:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The user's first name
          title: First Name
        last_name:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The user's last name
          title: Last Name
        locale:
          anyOf:
          - examples:
            - en_US
            type: string
          - type: 'null'
          description: The user's locale
          title: Locale
        phone:
          anyOf:
          - format: phone
            type: string
          - type: 'null'
          description: The user's phone number
          title: Phone
        user_attributes:
          anyOf:
          - items:
              $ref: '#/components/schemas/UserAttributeBase'
            type: array
          - type: 'null'
          description: User attributes
          title: User Attributes
        username:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: The user's unique username
          title: Username
      title: UserUpdate
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
      - loc
      - msg
      - type
      title: ValidationError
      type: object
    VanityNameserverDTO:
      properties:
        hostname:
          description: Fully-qualified hostname of the vanity nameserver
          title: Hostname
          type: string
        position:
          description: Ordering within the set; lowest position becomes SOA MNAME
          minimum: 0.0
          title: Position
          type: integer
      required:
      - hostname
      - position
      title: VanityNameserverDTO
      type: object
    VanityNameserverSetCreate:
      description: 'Public create request body. The owning org comes from auth context,
        and the

        anycast IPs are allocated server-side from `VanityNameserversConfig`, so neither
        is

        accepted here.'
      properties:
        hostnames:
          description: Fully-qualified vanity NS hostnames, ordered by intended position.
          items:
            type: string
          maxItems: 4
          minItems: 1
          title: Hostnames
          type: array
        name:
          description: Human-readable name for the set
          maxLength: 255
          minLength: 1
          title: Name
          type: string
        parent_domain_name:
          description: Apex domain of the vanity NS zone; all hostnames must be subdomains.
          title: Parent Domain Name
          type: string
        soa_rname:
          description: SOA RNAME stamped verbatim into the vanity NS zone
          maxLength: 255
          minLength: 1
          title: Soa Rname
          type: string
      required:
      - name
      - parent_domain_name
      - soa_rname
      - hostnames
      title: VanityNameserverSetCreate
      type: object
    VanityNameserverSetDTO:
      properties:
        name:
          description: Human-readable name for the vanity NS set
          title: Name
          type: string
        nameservers:
          description: Nameservers in the set, ordered by position
          items:
            $ref: '#/components/schemas/VanityNameserverDTO'
          title: Nameservers
          type: array
        parent_domain_name:
          description: Parent domain used as the apex of the vanity NS zone
          title: Parent Domain Name
          type: string
        set_id:
          description: Stable identifier for the vanity NS set
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
        soa_rname:
          description: SOA RNAME used verbatim when creating vanity-branded zones
          title: Soa Rname
          type: string
      required:
      - set_id
      - name
      - parent_domain_name
      - soa_rname
      title: VanityNameserverSetDTO
      type: object
    VanityNameserverSetStatusDTO:
      description: "Wire mirror of `VanityNameserverSetStatus` \u2014 local so dns_client\
        \ doesn't\npull schema imports."
      enum:
      - provisioning
      - active
      - suspended
      - failed
      - deleting
      title: VanityNameserverSetStatusDTO
      type: string
    VanityNameserverSetSummaryDTO:
      description: 'Status-aware variant of `VanityNameserverSetDTO` for list/get
        endpoints.

        `VanityNameserverSetDTO` stays the brandable-only read shape (always ACTIVE).'
      properties:
        expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the vanity nameserver set's current service period ends
            (renews or lapses)
          title: Expires On
        grace_period_ends_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the grace period ends, or null when the set is not in
            a grace period
          title: Grace Period Ends At
        is_default:
          description: Whether this is the org's default vanity NS set
          title: Is Default
          type: boolean
        name:
          description: Human-readable name for the vanity NS set
          title: Name
          type: string
        nameservers:
          description: Nameservers in the set, ordered by position
          items:
            $ref: '#/components/schemas/VanityNameserverDTO'
          title: Nameservers
          type: array
        organization_id:
          description: Owning organization
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        parent_domain_name:
          description: Parent domain used as the apex of the vanity NS zone
          title: Parent Domain Name
          type: string
        renew_scheduled_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the next automatic renewal is scheduled. Null when the
            set will not renew.
          title: Renew Scheduled At
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/RenewalModeDTO'
          - type: 'null'
          description: Whether the set is set to renew or expire at the end of the
            current period
        set_id:
          description: Stable identifier for the vanity NS set
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
        soa_rname:
          description: SOA RNAME used verbatim when creating vanity-branded zones
          title: Soa Rname
          type: string
        status:
          $ref: '#/components/schemas/VanityNameserverSetStatusDTO'
          description: Lifecycle status of the set
      required:
      - set_id
      - organization_id
      - name
      - parent_domain_name
      - soa_rname
      - status
      - is_default
      title: VanityNameserverSetSummaryDTO
      type: object
    VanityNsCheckConfidence:
      enum:
      - authoritative
      - best_effort
      title: VanityNsCheckConfidence
      type: string
    VanityNsCheckPublicReq:
      description: 'Public `/check` request body. The owning org comes from auth context,
        so only

        the set identifier is accepted here.'
      properties:
        set_id:
          description: The vanity NS set to diagnose
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      required:
      - set_id
      title: VanityNsCheckPublicReq
      type: object
    VanityNsCheckRes:
      properties:
        checks:
          description: Individual diagnostic checks
          items:
            $ref: '#/components/schemas/VanityNsCheckResultDTO'
          title: Checks
          type: array
        parent_domain_name:
          description: Parent domain of the set's vanity NS hostnames
          title: Parent Domain Name
          type: string
        set_id:
          description: The diagnosed set
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
        status:
          $ref: '#/components/schemas/VanityNameserverSetStatusDTO'
          description: Lifecycle status of the set at check time
        summary:
          $ref: '#/components/schemas/VanityNsCheckSummaryDTO'
          description: Synthesized overall verdict
      required:
      - set_id
      - parent_domain_name
      - status
      - summary
      title: VanityNsCheckRes
      type: object
    VanityNsCheckResultDTO:
      properties:
        confidence:
          $ref: '#/components/schemas/VanityNsCheckConfidence'
          description: How authoritative the observation is
        detail:
          description: Customer-facing explanation of the result
          title: Detail
          type: string
        id:
          description: Stable identifier for the individual check
          title: Id
          type: string
        label:
          description: Human-readable check name
          title: Label
          type: string
        observed:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Structured observation (e.g. addresses seen, mismatches) for
            the customer
          title: Observed
        remediation:
          anyOf:
          - type: string
          - type: 'null'
          description: Suggested next step when the check did not pass
          title: Remediation
        severity:
          $ref: '#/components/schemas/VanityNsCheckSeverity'
          description: How much this check matters to the overall verdict
        source:
          $ref: '#/components/schemas/VanityNsCheckSource'
          description: Where the observation came from
        status:
          $ref: '#/components/schemas/VanityNsCheckStatus'
          description: Per-check verdict
      required:
      - id
      - label
      - status
      - severity
      - source
      - confidence
      - detail
      title: VanityNsCheckResultDTO
      type: object
    VanityNsCheckSeverity:
      enum:
      - required
      - recommended
      - optional
      title: VanityNsCheckSeverity
      type: string
    VanityNsCheckSource:
      enum:
      - public_dns
      - authoritative_dns
      - registry_epp
      title: VanityNsCheckSource
      type: string
    VanityNsCheckStatus:
      enum:
      - pass
      - fail
      - warn
      - info
      title: VanityNsCheckStatus
      type: string
    VanityNsCheckSummaryDTO:
      properties:
        detail:
          description: Customer-facing summary of the overall verdict
          title: Detail
          type: string
        state:
          $ref: '#/components/schemas/VanityNsCheckSummaryState'
          description: Overall verdict synthesized from the checks
      required:
      - state
      - detail
      title: VanityNsCheckSummaryDTO
      type: object
    VanityNsCheckSummaryState:
      description: Top-level verdict synthesized from the individual checks.
      enum:
      - ready
      - propagating
      - action_required
      - degraded
      title: VanityNsCheckSummaryState
      type: string
    VerificationClaimType:
      enum:
      - name
      - address
      - email
      - phone
      title: VerificationClaimType
      type: string
    VerificationDeadline:
      properties:
        date:
          format: date-time
          title: Date
          type: string
        type:
          $ref: '#/components/schemas/VerificationDeadlineType'
      required:
      - type
      - date
      title: VerificationDeadline
      type: object
    VerificationDeadlineType:
      enum:
      - dedelegation
      - deletion
      title: VerificationDeadlineType
      type: string
    VerificationPolicy:
      anyOf:
      - $ref: '#/components/schemas/EmailVerificationPolicy'
      - $ref: '#/components/schemas/IdentityVerificationPolicy'
    VerificationPolicyType:
      enum:
      - email_verification
      - identity_verification
      title: VerificationPolicyType
      type: string
    VerificationRegistrantDetails:
      properties:
        contact_id:
          title: Contact Id
          type: string
        email:
          title: Email
          type: string
        name:
          title: Name
          type: string
      required:
      - contact_id
      - name
      - email
      title: VerificationRegistrantDetails
      type: object
    VerificationResponse:
      properties:
        claims:
          description: Verification claims
          items:
            $ref: '#/components/schemas/VerificationClaimType'
          title: Claims
          type: array
        deadlines:
          description: Verification deadlines
          items:
            $ref: '#/components/schemas/VerificationDeadline'
          title: Deadlines
          type: array
      required:
      - claims
      title: VerificationResponse
      type: object
    VerificationType:
      enum:
      - api
      - email
      title: VerificationType
      type: string
    VisitsByKeyBucket:
      properties:
        key:
          title: Key
          type: string
        total:
          title: Total
          type: integer
        unique:
          title: Unique
          type: integer
      required:
      - key
      - total
      - unique
      title: VisitsByKeyBucket
      type: object
    WaitlistApplyRequest:
      description: What you say when applying for a product.
      properties:
        note:
          anyOf:
          - maxLength: 1000
            minLength: 1
            type: string
          - type: 'null'
          description: What you would use the product for
          examples:
          - We manage 12k domains for agency clients and triage renewals by hand.
          title: Note
      title: WaitlistApplyRequest
      type: object
    WaitlistEntryResponse:
      description: Your own waitlist application.
      properties:
        applied_on:
          description: When you applied
          format: date-time
          title: Applied On
          type: string
        decided_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the application was decided; null while it is pending
          title: Decided On
        product:
          $ref: '#/components/schemas/WaitlistProduct'
          description: Product the application is for
        status:
          $ref: '#/components/schemas/WaitlistEntryStatus'
          description: Where the application stands
      required:
      - product
      - status
      - applied_on
      title: WaitlistEntryResponse
      type: object
    WaitlistEntryStatus:
      enum:
      - pending
      - granted
      - rejected
      title: WaitlistEntryStatus
      type: string
    WaitlistProduct:
      description: 'A product that is not generally available and is reached through
        the waitlist.


        The member value is the wire form used in URLs and API bodies; the column
        persists the

        member NAME (StringEnum binds `value.name`), so renaming a member is a data
        migration.'
      enum:
      - ai_concierge
      title: WaitlistProduct
      type: string
    WaitlistProductListResponse:
      description: The waitlisted products you may see.
      properties:
        products:
          description: Waitlisted products you may see
          items:
            $ref: '#/components/schemas/WaitlistProductState'
          title: Products
          type: array
      title: WaitlistProductListResponse
      type: object
    WaitlistProductState:
      description: A waitlisted product, and where your own application for it stands.
      properties:
        applied_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When you applied, if you have
          title: Applied On
        can_apply:
          description: Whether an apply from you would be accepted right now; false
            for an API key
          title: Can Apply
          type: boolean
        decided_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When your application was decided, if it was
          title: Decided On
        description:
          description: What the product does
          title: Description
          type: string
        display_name:
          description: Human-readable product name
          title: Display Name
          type: string
        product:
          $ref: '#/components/schemas/WaitlistProduct'
          description: Product key, used in the apply path
        status:
          anyOf:
          - $ref: '#/components/schemas/WaitlistEntryStatus'
          - type: 'null'
          description: Where your application stands; null until you apply, and for
            an API key
      required:
      - product
      - display_name
      - description
      - can_apply
      title: WaitlistProductState
      type: object
    WhitelabelBaseCreate:
      additionalProperties: false
      description: 'Create the base tier: served on a managed subdomain composed from
        `label`.'
      properties:
        label:
          description: Managed-subdomain label; composed into app.<label>.<base-tier
            suffix> / auth.<label>.<suffix>
          maxLength: 63
          minLength: 1
          title: Label
          type: string
        period:
          $ref: '#/components/schemas/Period'
          description: 'Billing period; offered: 1 month or 1 year'
        tier:
          const: base
          description: Tier discriminator; base = served on a managed subdomain of
            an OpusDNS-owned zone
          title: Tier
          type: string
      required:
      - tier
      - label
      - period
      title: WhitelabelBaseCreate
      type: object
    WhitelabelBrandingPatch:
      description: 'Public patch body. `label` moves the managed base subdomain to
        a different label (on plus the

        custom domain is untouched - it is re-pointed by its hostnames through recheck)
        and `enabled`

        starts or stops serving - both applied asynchronously, neither a purchase.
        `renewal_mode` sets the

        subscription''s auto-renew intent synchronously (EXPIRE = cancel at period
        end, RENEW = un-cancel);

        it is not a purchase either - no price change. At least one must be given.'
      properties:
        enabled:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether this whitelabel should be served
          title: Enabled
        label:
          anyOf:
          - maxLength: 63
            minLength: 1
            type: string
          - type: 'null'
          description: New managed-subdomain label; the base hosts become app.<label>.<suffix>
            / auth.<label>.<suffix>. On plus the custom domain keeps serving unchanged.
          title: Label
        renewal_mode:
          anyOf:
          - $ref: '#/components/schemas/WhitelabelRenewalMode'
          - type: 'null'
          description: 'Set auto-renew intent: expire cancels at period end (serves
            out the term), renew un-cancels'
      title: WhitelabelBrandingPatch
      type: object
    WhitelabelBrandingRecheck:
      description: 'Public recheck body. Empty = re-run onboarding against the stored
        hosts (retry after

        fixing DNS). hostname + auth_subdomain present = re-point a wrong domain before
        re-running

        (pre-provisioning only; server rejects once an authentication client exists).
        Plus tier only - a

        base whitelabel is re-labelled through PATCH instead.'
      properties:
        auth_subdomain:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Subdomain the login is served on; required together with hostname
          title: Auth Subdomain
        create_zone:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Opt in (or out) of onboarding creating the OpusDNS-hosted zone
            if it is missing, applied before this re-run and to any re-pointed domain.
            Omit to keep the config's current setting - a plain retry never changes
            it. Plus tier only.
          title: Create Zone
        dashboard_subdomain:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Subdomain the dashboard is served on; omit for apex. Only together
            with hostname.
          title: Dashboard Subdomain
        hostname:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: New domain to run the whitelabel under; omit to re-run against
            the stored hosts
          title: Hostname
      title: WhitelabelBrandingRecheck
      type: object
    WhitelabelBrandingResponse:
      description: Public read shape for an organization's whitelabel branding config.
      properties:
        auth_hostname:
          description: Auth/login hostname served by the authentication system (e.g.
            auth.customer.com)
          maxLength: 255
          minLength: 1
          title: Auth Hostname
          type: string
        base_auth_hostname:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Managed base auth host (auth.<base_label>.<suffix>); null until
            first published
          title: Base Auth Hostname
        base_hostname:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Managed base dashboard host (app.<base_label>.<suffix>); on
            plus a backup address served alongside the custom domain, null until first
            published
          title: Base Hostname
        base_label:
          description: Managed-subdomain label; the composed pair is the served pair
            on base, the backup pair on plus
          maxLength: 255
          minLength: 1
          title: Base Label
          type: string
        created_on:
          format: date-time
          title: Created On
          type: string
        enabled:
          default: true
          description: Whether this whitelabel is served; false freezes serving but
            keeps the config
          title: Enabled
          type: boolean
        failure_code:
          anyOf:
          - $ref: '#/components/schemas/WhitelabelOnboardingFailureCode'
          - type: 'null'
          description: Stable code of the last terminal onboarding failure
        failure_detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Free-text detail of the last onboarding failure (support/debugging,
            not for customer display)
          title: Failure Detail
        failure_type:
          anyOf:
          - $ref: '#/components/schemas/WhitelabelOnboardingFailureType'
          - type: 'null'
          readOnly: true
        hostname:
          description: Dashboard hostname being served (e.g. app.customer.com)
          maxLength: 255
          minLength: 1
          title: Hostname
          type: string
        keycloak_client_id:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Authentication-system client provisioned for this whitelabel;
            null until provisioning
          title: Keycloak Client Id
        onboarding_status:
          $ref: '#/components/schemas/WhitelabelOnboardingStatus'
          description: Onboarding lifecycle state
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        subscription:
          anyOf:
          - $ref: '#/components/schemas/WhitelabelSubscriptionInfo'
          - type: 'null'
          description: Billing-lifecycle block; null when the config has no live subscription
            (provisioning or terminated)
        tier:
          $ref: '#/components/schemas/WhitelabelBrandingTier'
          description: 'Tier this config is on: base (managed subdomain) or plus (customer''s
            own domain)'
        updated_on:
          format: date-time
          title: Updated On
          type: string
        verification_domain:
          description: Registrable domain of the served hostname
          maxLength: 255
          minLength: 1
          title: Verification Domain
          type: string
        whitelabel_branding_id:
          examples:
          - wlb_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^wlb_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Whitelabel Branding Id
          type: string
          x-typeid-prefix: wlb
      required:
      - whitelabel_branding_id
      - organization_id
      - tier
      - onboarding_status
      - hostname
      - auth_hostname
      - base_label
      - verification_domain
      - keycloak_client_id
      - created_on
      - updated_on
      - failure_type
      title: WhitelabelBrandingResponse
      type: object
    WhitelabelBrandingTier:
      description: 'Which tier a whitelabel config is on. One config per organization,
        one tier at a time.


        BASE serves the customer on a subdomain of an OpusDNS-owned zone; PLUS serves
        them on their

        own domain. A whitelabel switches between the two in place (a plan change),
        so `tier` is a

        mutable attribute of the single config row, never a discriminator between
        two rows. Deliberately

        stored rather than inferred from the hostname, so a base-zone rename can never
        re-route the row

        down the wrong onboarding path.'
      enum:
      - base
      - plus
      title: WhitelabelBrandingTier
      type: string
    WhitelabelOnboardingFailureCode:
      description: 'Stable, frontend-facing reason a terminal onboarding failure happened.
        The free-text

        detail that accompanies it is for support/debugging, never for customer display.'
      enum:
      - zone_not_owned
      - delegation_missing
      - delegation_mismatch
      - zone_create_failed
      - dns_record_rejected
      - auth_client_rejected
      - branding_rejected
      - retries_exhausted
      title: WhitelabelOnboardingFailureCode
      type: string
    WhitelabelOnboardingFailureType:
      enum:
      - dns
      - auth
      - branding
      - system
      title: WhitelabelOnboardingFailureType
      type: string
    WhitelabelOnboardingStatus:
      enum:
      - pending_domain_verification
      - verifying
      - provisioning
      - active
      - failed
      - terminated
      title: WhitelabelOnboardingStatus
      type: string
    WhitelabelPlusCreate:
      additionalProperties: false
      description: 'Create the plus tier: served on the customer''s own domain, with
        the managed base subdomain

        composed from `label` served alongside it as a backup address.'
      properties:
        auth_subdomain:
          description: Subdomain the login is served on (e.g. auth -> auth.customer.com)
          maxLength: 255
          minLength: 1
          title: Auth Subdomain
          type: string
        create_zone:
          default: false
          description: Create the OpusDNS-hosted DNS zone for this domain during onboarding
            if it does not already exist, instead of requiring it to exist beforehand.
            The domain must still be delegated to the OpusDNS nameservers for verification
            to pass. The dashboard sends true; other API callers opt in explicitly.
          title: Create Zone
          type: boolean
        dashboard_subdomain:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Subdomain the dashboard is served on (e.g. dash -> dash.customer.com);
            omit for apex
          title: Dashboard Subdomain
        hostname:
          description: Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted
            zone owned by the org
          maxLength: 255
          minLength: 1
          title: Hostname
          type: string
        label:
          description: Managed-subdomain label; the composed pair is served alongside
            the custom domain as a backup
          maxLength: 63
          minLength: 1
          title: Label
          type: string
        period:
          $ref: '#/components/schemas/Period'
          description: 'Billing period; offered: 1 month or 1 year'
        tier:
          const: plus
          description: Tier discriminator; plus = served on the customer's own domain
          title: Tier
          type: string
      required:
      - hostname
      - auth_subdomain
      - tier
      - label
      - period
      title: WhitelabelPlusCreate
      type: object
    WhitelabelRenewalMode:
      description: 'Whether the whitelabel''s subscription auto-renews (RENEW) or
        lapses at period end (EXPIRE,

        i.e. cancelled). The customer''s renewal intent, stored on the row and mirrored
        to the subscription

        on change (like the domain object). Its own enum so the whitelabel model does
        not depend on the

        domain model; the wire values (renew/expire) match domains + vanity nameservers.'
      enum:
      - renew
      - expire
      title: WhitelabelRenewalMode
      type: string
    WhitelabelSubscriptionInfo:
      description: 'The whitelabel''s billing-lifecycle state, grouped into its own
        block: the parent''s

        `subscription` is null when the config has no live subscription (still provisioning,
        or

        terminated). A cancelled whitelabel reads as renewal_mode=expire with expires_on
        set to when

        serving stops.'
      properties:
        expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: End of the current paid term; on an expiring config, when serving
            stops
          title: Expires On
        grace_period_ends_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: End of the grace period, if the subscription is in one
          title: Grace Period Ends At
        period:
          $ref: '#/components/schemas/Period'
          description: Billing period the subscription renews on (same shape as the
            create body's period)
        renew_scheduled_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the next automatic renewal runs; only surfaced on a renewing
            config
          title: Renew Scheduled At
        renewal_mode:
          $ref: '#/components/schemas/WhitelabelRenewalMode'
          description: Whether the subscription auto-renews (renew) or lapses at period
            end (expire, i.e. cancelled)
      required:
      - renewal_mode
      - period
      title: WhitelabelSubscriptionInfo
      type: object
    WhitelabelUpgradeToPlus:
      additionalProperties: false
      description: 'Upgrade the whitelabel to the plus tier, served on the customer''s
        own domain. This is NOT a

        term change: the subscription keeps its period and renewal date and simply
        renews at the plus

        price. A yearly upgrade bills a one-time prorated difference for the remaining
        whole months; a

        monthly upgrade bills nothing now. Downgrades (plus -> base) are not supported
        - cancel + rebook

        instead - so this body only ever moves to plus (no tier field, no period).'
      properties:
        auth_subdomain:
          description: Subdomain the login is served on (e.g. auth -> auth.customer.com)
          maxLength: 255
          minLength: 1
          title: Auth Subdomain
          type: string
        create_zone:
          default: false
          description: Create the OpusDNS-hosted DNS zone for this domain during onboarding
            if it does not already exist, instead of requiring it to exist beforehand.
            The domain must still be delegated to the OpusDNS nameservers for verification
            to pass. The dashboard sends true; other API callers opt in explicitly.
          title: Create Zone
          type: boolean
        dashboard_subdomain:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          description: Subdomain the dashboard is served on (e.g. dash -> dash.customer.com);
            omit for apex
          title: Dashboard Subdomain
        hostname:
          description: Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted
            zone owned by the org
          maxLength: 255
          minLength: 1
          title: Hostname
          type: string
      required:
      - hostname
      - auth_subdomain
      title: WhitelabelUpgradeToPlus
      type: object
    WhoisBase:
      properties:
        whois_server:
          anyOf:
          - type: string
          - type: 'null'
          description: WHOIS server
          title: Whois Server
      title: WhoisBase
      type: object
    ZoneIncludeField:
      enum:
      - tags
      title: ZoneIncludeField
      type: string
    ZoneSortField:
      enum:
      - name
      - created_on
      - updated_on
      - dnssec_status
      title: ZoneSortField
      type: string
    ZoneVanitySetUpdate:
      description: Public request body for assigning/clearing a zone's vanity NS branding.
      properties:
        vanity_nameserver_set_id:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          description: Vanity NS set to brand the zone's apex NS + SOA with, or null
            to unassign and restamp the apex back to OpusDNS system defaults.
          title: Vanity Nameserver Set Id
      title: ZoneVanitySetUpdate
      type: object
    ZonesContext:
      properties:
        context_id:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
        conversation_id:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
        created_at:
          format: date-time
          title: Created At
          type: string
        kind:
          const: zones
          default: zones
          title: Kind
          type: string
        organization_id:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarZone_'
        user_id:
          title: User Id
          type: string
      required:
      - context_id
      - conversation_id
      - organization_id
      - user_id
      - created_at
      - payload
      title: ZonesContext
      type: object
    ZonesContextCreate:
      properties:
        kind:
          const: zones
          default: zones
          title: Kind
          type: string
        payload:
          $ref: '#/components/schemas/ContextPayload_RegistrarZone_'
      required:
      - payload
      title: ZonesContextCreate
      type: object
    api__domain__tld_specific__be__models__RequestAuthcodeResponse:
      properties:
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the request had a successful result from DNS Belgium
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__cymru__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code set at Nominet
          title: Auth Code
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether a fresh auth code was set at Nominet
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__cz__models__RequestAuthcodeResponse:
      properties:
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        recipients:
          description: Masked email addresses CZ.NIC sent the auth code to, when the
            registry discloses them
          items:
            type: string
          title: Recipients
          type: array
        success:
          description: Whether the request had a successful result from CZ.NIC
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__dk__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code returned by Punktum dk
          title: Auth Code
        auth_code_expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The expiry date of the auth code
          title: Auth Code Expires On
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the request had a successful result from Punktum dk
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__eu__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code returned by EURid
          title: Auth Code
        auth_code_expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The expiry date of the auth code
          title: Auth Code Expires On
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the request had a successful result from EURid
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__lt__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code returned by DOMREG
          title: Auth Code
        auth_code_expires_on:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The expiry date of the auth code
          title: Auth Code Expires On
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the request had a successful result from DOMREG
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__nu__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code generated by the registry
          title: Auth Code
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the registry generated a fresh auth code
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__se__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code generated by the registry
          title: Auth Code
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether the registry generated a fresh auth code
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    api__domain__tld_specific__wales__models__RequestAuthcodeResponse:
      properties:
        auth_code:
          anyOf:
          - type: string
          - type: 'null'
          description: The auth code set at Nominet
          title: Auth Code
        detail:
          anyOf:
          - type: string
          - type: 'null'
          description: Additional information about the result in case of failure
          title: Detail
        name:
          description: The domain name that had the auth code requested
          title: Name
          type: string
        success:
          description: Whether a fresh auth code was set at Nominet
          title: Success
          type: boolean
      required:
      - name
      - success
      title: RequestAuthcodeResponse
      type: object
    common__models__availability__datasource__DomainAvailabilityResponse:
      properties:
        meta:
          $ref: '#/components/schemas/DomainAvailabilityMeta'
        results:
          items:
            $ref: '#/components/schemas/DomainAvailability'
          title: Results
          type: array
      required:
      - meta
      - results
      title: DomainAvailabilityResponse
      type: object
    common__models__domain__domain__DomainAvailabilityResponse:
      properties:
        available:
          description: True if the domain is available for registration
          title: Available
          type: boolean
        claims_key:
          anyOf:
          - type: string
          - type: 'null'
          description: Trademark claims key returned when the TLD is in its claims
            phase and the domain matches a TMCH-registered mark. When present, the
            corresponding claims notice must be retrieved and acknowledged before
            registration.
          examples:
          - 2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001
          title: Claims Key
        domain:
          description: The domain name that was checked
          examples:
          - example.com
          title: Domain
          type: string
        error:
          anyOf:
          - $ref: '#/components/schemas/DomainAvailabilityError'
          - type: 'null'
          description: 'Error that prevented this domain from being checked: `validation_error`
            if the domain name is invalid or its TLD is not supported, `check_error`
            if the registry check failed.'
        is_premium:
          default: false
          description: True if the registry classifies this domain as premium (non-standard
            pricing)
          title: Is Premium
          type: boolean
        premium_pricing:
          anyOf:
          - $ref: '#/components/schemas/PremiumPricingResponse'
          - type: 'null'
          description: Premium pricing per action (create / renew / transfer / restore).
            Present only when `is_premium` is true and the registry returned pricing.
        reason:
          anyOf:
          - type: string
          - type: 'null'
          description: Registry-supplied reason the domain is unavailable (e.g. 'Domain
            exists', 'Reserved', 'In Use'). Null if the domain is available, failed
            prechecks, or no reason was returned by the registry.
          examples:
          - Domain exists
          title: Reason
      required:
      - domain
      - available
      - reason
      title: DomainAvailabilityResponse
      type: object
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-Api-Key
      type: apiKey
    OAuth2PasswordBearer:
      flows:
        password:
          scopes: {}
          tokenUrl: token
      type: oauth2
info:
  description: "## Authentication\n\nOpusDNS supports API authentication in two ways:\n\
    \n- Direct API key authentication using the `X-Api-Key` header\n- OAuth token\
    \ authentication using the `/v1/auth/token` [endpoint](https://developers.opusdns.com/#tag/authentication/POST/v1/auth/token)\n\
    \n### Creating an API key in the Dashboard\n\n+ Create a new API key from the\
    \ OpusDNS Dashboard under [API Credentials](https://app.opusdns.com/developer/api-credentials)\n\
    + Store the generated key securely when it is shown to you.\n\n### Using the API\
    \ key\n\n#### Option 1: `X-Api-Key` header\n\nSend your full OpusDNS API key in\
    \ the `X-Api-Key` header on each request:\n\n```http\nGET /v1/domains HTTP/1.1\n\
    Host: sandbox.opusdns.com\nX-Api-Key: opk_your_full_api_key_here\n```\n\nThis\
    \ is the most direct way to authenticate.\n\n#### Option 2: OAuth token flow\n\
    \nOpusDNS also supports retrieving a bearer token from the token endpoint. The\
    \ endpoint accepts both `application/x-www-form-urlencoded` (per the OAuth 2.0\
    \ spec) and `application/json`:\n\n```http\nPOST /v1/auth/token HTTP/1.1\nHost:\
    \ sandbox.opusdns.com\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials&client_id=organization_...&client_secret=...\n\
    ```\n\nOr with JSON:\n\n```http\nPOST /v1/auth/token HTTP/1.1\nHost: sandbox.opusdns.com\n\
    Content-Type: application/json\n\n{\"grant_type\": \"client_credentials\", \"\
    client_id\": \"organization_...\", \"client_secret\": \"...\"}\n```\n\nSuccessful\
    \ responses return a bearer token and expiry:\n\n```json\n{\n  \"access_token\"\
    : \"eyJ...\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600\n}\n```\n\
    \nYou can then use that token on subsequent requests:\n\n```http\nGET /v1/domains\
    \ HTTP/1.1\nHost: sandbox.opusdns.com\nAuthorization: Bearer eyJ...\n```\n\nYou\
    \ can use this method when:\n\n- Your platform prefers standard OAuth-style bearer\
    \ tokens\n- You want short-lived access tokens instead of sending the API key\
    \ on every request\n- Your HTTP tooling already expects `Authorization: Bearer\
    \ ...`\n\n\n\n\n## Resource IDs\n\nThe API uses extensively [Type IDs](https://github.com/jetify-com/typeid):\
    \ type-safe, K-sortable, globally unique identifier inspired by Stripe IDs. They\
    \ can be easily identified with a format like `prefix_01jxe1nzrmf78scaqbkjx0va0f`.\
    \ The `prefix` gives context to the ID - some examples include `user`, `organization`,\
    \ `domain`. The rest of the ID is a 128-bit UUIDv7 encoded as a 26-character string\
    \ using a modified base32 encoding. See [formal specification for details](https://github.com/jetify-com/typeid/tree/main/spec).\n\
    \nThis approach allows using unique IDs (UUIDv7), preventing iteration attacks,\
    \ while also easily identifying the \"namespace\" of the ID. `01975c1f-a15a-7f6c-a5ce-b75fe33de079`\
    \ is hardly distuingishable from `01975c1f-f120-7874-8dc2-de7d728bf261` by humans\
    \ on first glance. However, when represented as Type IDs, they could be represented\
    \ as `user_01jxe1z8atfxpabknqbzhkvr3s` and `domain_01jxe1zw90f1t8vgpyfns8qwk1`,\
    \ immediately making it easier to differentiate between them.\n\nAdditionally,\
    \ this gives type safety and additional validation that can be done. There's [libraries\
    \ available for many languages to make handling Type IDs easier](https://github.com/jetify-com/typeid?tab=readme-ov-file#official-implementations-by-jetify).\
    \ We're using them ourselves on the backend to quickly catch mistakes like passing\
    \ the wrong Type ID (passing a user ID like `user_01jxe1z8atfxpabknqbzhkvr3s`\
    \ where a domain ID `domain_01jxe1zw90f1t8vgpyfns8qwk1` was expected).\n\n\n##\
    \ Sandbox Environment\n\nWe provide a free sandbox environment where you can test\
    \ and make sure your integration with OpusDNS runs smoothly. The sandbox is completely\
    \ isolated, meaning all domains, configurations, and actions inside this environment\
    \ have no effect on your live data or production systems. It is a full test system\
    \ for safe experimentation and completely free to use.\n\nPlease register a new\
    \ sandbox account at https://app.sandbox.opusdns.com and create a new API key\
    \ there.\n\nThis sandbox provides a separate dashboard at [app.sandbox.opusdns.com](https://app.sandbox.opusdns.com).\n\
    \nThe sandbox API Base URL is `https://sandbox.opusdns.com`.\n\nIf you have any\
    \ questions about the API or run into issues, please open a ticket at support@opusdns.com.\
    \ We are happy to help!\n\n## Open-source SDKs and libraries\n\nWe're constantly\
    \ building new features and services from SDKs and plugins to other exciting tools.\
    \ Check out [our GitHub](https://github.com/OpusDNS/) to see the latest developments\
    \ and try them out yourself!\n\n#### OpusDNS Go Client\n\nWe offer a client implementation\
    \ for go that supports all the features of our API.  \nCheck out the client [here](https://github.com/OpusDNS/opusdns-go-client)!\n\
    \n\n"
  summary: OpusDNS - your gateway to a seamless domain management experience.
  title: OpusDNS API
  version: 2026-09-22-220605
  x-logo:
    altText: OpusDNS API Reference
    url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
openapi: 3.1.0
paths:
  /v1/ai-concierge/contexts/{context_id}:
    get:
      operationId: get_context_v1_ai_concierge_contexts__context_id__get
      parameters:
      - in: path
        name: context_id
        required: true
        schema:
          examples:
          - ctx_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^ctx_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Context Id
          type: string
          x-typeid-prefix: ctx
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                discriminator:
                  mapping:
                    aggregations: '#/components/schemas/AggregationsContext'
                    contacts: '#/components/schemas/ContactsContext'
                    domain_forwards: '#/components/schemas/DomainForwardsContext'
                    domain_recommendations: '#/components/schemas/DomainRecommendationsContext'
                    domains: '#/components/schemas/DomainsContext'
                    email_forwards: '#/components/schemas/EmailForwardsContext'
                    zones: '#/components/schemas/ZonesContext'
                  propertyName: kind
                oneOf:
                - $ref: '#/components/schemas/ZonesContext'
                - $ref: '#/components/schemas/ContactsContext'
                - $ref: '#/components/schemas/DomainsContext'
                - $ref: '#/components/schemas/DomainForwardsContext'
                - $ref: '#/components/schemas/EmailForwardsContext'
                - $ref: '#/components/schemas/DomainRecommendationsContext'
                - $ref: '#/components/schemas/AggregationsContext'
                title: Response Get Context V1 Ai Concierge Contexts  Context Id  Get
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a context entry
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/conversations:
    get:
      description: List the authenticated organization's AI Concierge conversations.
      operationId: list_conversations_v1_ai_concierge_conversations_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 20
          maximum: 200
          minimum: 1
          title: Page Size
          type: integer
      - description: Comma-separated sort fields. Prefix with `-` for DESC.
        in: query
        name: sort
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated sort fields. Prefix with `-` for DESC.
          title: Sort
      - description: Full-text search on title/summary.
        in: query
        name: q
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Full-text search on title/summary.
          title: Q
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationListResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List AI Concierge conversations
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    post:
      operationId: create_conversation_v1_ai_concierge_conversations_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConversationCreateRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create an AI Concierge conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/conversations/{conversation_id}:
    delete:
      description: Permanently delete a conversation, its messages, and any attached
        contexts.
      operationId: delete_conversation_v1_ai_concierge_conversations__conversation_id__delete
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    get:
      operationId: get_conversation_v1_ai_concierge_conversations__conversation_id__get
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    patch:
      description: Update conversation title or metadata. Supports optimistic concurrency
        via `If-Match`.
      operationId: patch_conversation_v1_ai_concierge_conversations__conversation_id__patch
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - in: header
        name: If-Match
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: If-Match
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConversationPatchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/conversations/{conversation_id}/contexts:
    get:
      operationId: list_contexts_v1_ai_concierge_conversations__conversation_id__contexts_get
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 20
          maximum: 200
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContextListResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List contexts attached to a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    post:
      operationId: create_context_v1_ai_concierge_conversations__conversation_id__contexts_post
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              discriminator:
                mapping:
                  aggregations: '#/components/schemas/AggregationsContextCreate'
                  contacts: '#/components/schemas/ContactsContextCreate'
                  domain_forwards: '#/components/schemas/DomainForwardsContextCreate'
                  domain_recommendations: '#/components/schemas/DomainRecommendationsContextCreate'
                  domains: '#/components/schemas/DomainsContextCreate'
                  email_forwards: '#/components/schemas/EmailForwardsContextCreate'
                  zones: '#/components/schemas/ZonesContextCreate'
                propertyName: kind
              oneOf:
              - $ref: '#/components/schemas/ZonesContextCreate'
              - $ref: '#/components/schemas/ContactsContextCreate'
              - $ref: '#/components/schemas/DomainsContextCreate'
              - $ref: '#/components/schemas/DomainForwardsContextCreate'
              - $ref: '#/components/schemas/EmailForwardsContextCreate'
              - $ref: '#/components/schemas/DomainRecommendationsContextCreate'
              - $ref: '#/components/schemas/AggregationsContextCreate'
              title: Request Body
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                discriminator:
                  mapping:
                    aggregations: '#/components/schemas/AggregationsContext'
                    contacts: '#/components/schemas/ContactsContext'
                    domain_forwards: '#/components/schemas/DomainForwardsContext'
                    domain_recommendations: '#/components/schemas/DomainRecommendationsContext'
                    domains: '#/components/schemas/DomainsContext'
                    email_forwards: '#/components/schemas/EmailForwardsContext'
                    zones: '#/components/schemas/ZonesContext'
                  propertyName: kind
                oneOf:
                - $ref: '#/components/schemas/ZonesContext'
                - $ref: '#/components/schemas/ContactsContext'
                - $ref: '#/components/schemas/DomainsContext'
                - $ref: '#/components/schemas/DomainForwardsContext'
                - $ref: '#/components/schemas/EmailForwardsContext'
                - $ref: '#/components/schemas/DomainRecommendationsContext'
                - $ref: '#/components/schemas/AggregationsContext'
                title: Response Create Context V1 Ai Concierge Conversations  Conversation
                  Id  Contexts Post
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Attach a context to a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/conversations/{conversation_id}/messages:
    get:
      operationId: list_messages_v1_ai_concierge_conversations__conversation_id__messages_get
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 20
          maximum: 200
          minimum: 1
          title: Page Size
          type: integer
      - description: If set, returns last N messages and overrides pagination.
        in: query
        name: recent
        required: false
        schema:
          anyOf:
          - maximum: 200
            minimum: 1
            type: integer
          - type: 'null'
          description: If set, returns last N messages and overrides pagination.
          title: Recent
      - description: Comma-separated tokens to exclude (case-insensitive). Supports
          `tools`.
        in: query
        name: exclude
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated tokens to exclude (case-insensitive). Supports
            `tools`.
          title: Exclude
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageListResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List messages in a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    post:
      operationId: create_message_v1_ai_concierge_conversations__conversation_id__messages_post
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageCreateRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Append a message to a conversation
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/conversations/{conversation_id}/messages/{message_id}:
    get:
      operationId: get_message_v1_ai_concierge_conversations__conversation_id__messages__message_id__get
      parameters:
      - in: path
        name: conversation_id
        required: true
        schema:
          examples:
          - conv_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^conv_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Conversation Id
          type: string
          x-typeid-prefix: conv
      - in: path
        name: message_id
        required: true
        schema:
          examples:
          - msg_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^msg_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Message Id
          type: string
          x-typeid-prefix: msg
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a message
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/memory/facts:
    get:
      description: List long-term, organization-scoped memory facts available to the
        AI Concierge.
      operationId: list_memory_facts_v1_ai_concierge_memory_facts_get
      parameters:
      - in: query
        name: limit
        required: false
        schema:
          default: 50
          maximum: 200
          minimum: 1
          title: Limit
          type: integer
      - in: query
        name: cursor
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Cursor
      - in: query
        name: kind
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Kind
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryFactListResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List long-term memory facts
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    post:
      operationId: create_memory_fact_v1_ai_concierge_memory_facts_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemoryFactCreateRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryFact'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a long-term memory fact
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/ai-concierge/memory/facts/{fact_id}:
    delete:
      operationId: delete_memory_fact_v1_ai_concierge_memory_facts__fact_id__delete
      parameters:
      - in: path
        name: fact_id
        required: true
        schema:
          examples:
          - fact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^fact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Fact Id
          type: string
          x-typeid-prefix: fact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a long-term memory fact
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
    patch:
      operationId: patch_memory_fact_v1_ai_concierge_memory_facts__fact_id__patch
      parameters:
      - in: path
        name: fact_id
        required: true
        schema:
          examples:
          - fact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^fact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Fact Id
          type: string
          x-typeid-prefix: fact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemoryFactPatchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryFact'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory resource not found
                status: 404
                title: AI Concierge Memory Resource Not Found
                type: ai-concierge-memory-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_AI_CONCIERGE
                detail: AI Concierge memory service error
                status: 502
                title: AI Concierge Memory Error
                type: ai-concierge-memory
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a long-term memory fact
      tags:
      - ai_concierge
      x-required-permissions:
      - ai_concierge:manage
  /v1/archive/email-forward-logs/aliases/{email_forward_alias_id}:
    get:
      description: Retrieves a paginated list of email forward logs for a specific
        email forward alias. Only returns logs created after the email forward was
        created.
      operationId: get_email_forward_logs_by_alias_v1_archive_email_forward_logs_aliases__email_forward_alias_id__get
      parameters:
      - in: path
        name: email_forward_alias_id
        required: true
        schema:
          examples:
          - email_forward_alias_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_alias_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Alias Id
          type: string
          x-typeid-prefix: email_forward_alias
      - in: query
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/EmailForwardLogSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: final_status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/EmailForwardLogStatus'
          - type: 'null'
          title: Final Status
      - in: query
        name: start_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Start Time
      - in: query
        name: end_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: End Time
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_EmailForwardLog_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve email forward logs by alias
      tags:
      - archive
      x-required-permissions:
      - email_forwards:read
  /v1/archive/email-forward-logs/{email_forward_id}:
    get:
      description: Retrieves a paginated list of email forward logs for a specific
        email forward. Only returns logs created after the email forward was created.
      operationId: get_email_forward_logs_v1_archive_email_forward_logs__email_forward_id__get
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/EmailForwardLogSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: final_status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/EmailForwardLogStatus'
          - type: 'null'
          title: Final Status
      - in: query
        name: start_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Start Time
      - in: query
        name: end_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: End Time
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_EmailForwardLog_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve email forward logs
      tags:
      - archive
      x-required-permissions:
      - email_forwards:read
  /v1/archive/object-logs:
    get:
      description: Retrieve all paginated audit logs with optional filtering and sorting
      operationId: get_object_logs_v1_archive_object_logs_get
      parameters:
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ObjectLogSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: object_log_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Log Id
      - in: query
        name: object_type
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Type
      - in: query
        name: action
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ObjectEventType'
          - type: 'null'
          title: Action
      - in: query
        name: server_request_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Server Request Id
      - in: query
        name: performed_by_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ExecutingEntity'
          - type: 'null'
          title: Performed By Type
      - in: query
        name: performed_by_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Performed By Id
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: object_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Id
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_ObjectLog_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve all object history
      tags:
      - archive
      x-required-permissions:
      - organization:read
  /v1/archive/object-logs/{object_id}:
    get:
      description: Retrieve paginated audit logs for a specific object with optional
        filtering and sorting
      operationId: get_object_logs_by_object_id_v1_archive_object_logs__object_id__get
      parameters:
      - in: path
        name: object_id
        required: true
        schema:
          title: Object Id
          type: string
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ObjectLogSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: object_log_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Log Id
      - in: query
        name: object_type
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Type
      - in: query
        name: action
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ObjectEventType'
          - type: 'null'
          title: Action
      - in: query
        name: server_request_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Server Request Id
      - in: query
        name: performed_by_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ExecutingEntity'
          - type: 'null'
          title: Performed By Type
      - in: query
        name: performed_by_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Performed By Id
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_ObjectLog_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve object history
      tags:
      - archive
      x-required-permissions:
      - organization:read
  /v1/archive/request-history:
    get:
      description: Retrieves a paginated list of request history logs
      operationId: get_request_history_v1_archive_request_history_get
      parameters:
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/RequestHistorySortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: method
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/HTTPMethod'
          - type: 'null'
          title: Method
      - in: query
        name: path
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Path
      - in: query
        name: status_code
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          title: Status Code
      - in: query
        name: min_status_code
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          title: Min Status Code
      - in: query
        name: max_status_code
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          title: Max Status Code
      - in: query
        name: min_duration
        required: false
        schema:
          anyOf:
          - type: number
          - type: 'null'
          title: Min Duration
      - in: query
        name: max_duration
        required: false
        schema:
          anyOf:
          - type: number
          - type: 'null'
          title: Max Duration
      - in: query
        name: client_ip
        required: false
        schema:
          anyOf:
          - format: ipvanyaddress
            type: string
          - type: 'null'
          title: Client Ip
      - in: query
        name: server_request_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Server Request Id
      - in: query
        name: performed_by_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ExecutingEntity'
          - type: 'null'
          title: Performed By Type
      - in: query
        name: performed_by_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Performed By Id
      - in: query
        name: request_started_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Request Started Before
      - in: query
        name: request_started_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Request Started After
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_RequestHistory_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve request history logs
      tags:
      - archive
      x-required-permissions:
      - organization:read
  /v1/auth/client_credentials/introspect:
    get:
      description: Returns the stored record for the API key (or organization token)
        used to authenticate the request, including its organization. Requires API-key
        or organization-token authentication; user tokens are rejected.
      operationId: introspect_client_credential_v1_auth_client_credentials_introspect_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationCredential'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Introspect the current API key
      tags:
      - authentication
  /v1/auth/signup:
    post:
      operationId: signup_v1_auth_signup_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignupCreate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_PASSWORD_POLICY
                detail: Password policy violation
                status: 400
                title: User Management Error
                type: user
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_SIGNUP_NOT_ALLOWED
                detail: Additional error context.
                status: 403
                title: Organization Management Error
                type: signup-not-allowed
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_USER_EXISTS
                detail: User with username or email already exists
                status: 409
                title: User Management Error
                type: user-already-present
                user: Additional error context.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_BILLING_CURRENCY_REQUIRED
                detail: Additional error context.
                status: 422
                title: Billing Error
                type: billing-customer-currency-required
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      summary: Signup
      tags:
      - authentication
  /v1/auth/token:
    post:
      operationId: issue_organization_token_v1_auth_token_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicAuthRequestForm'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PublicAuthRequestForm'
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/OrganizationTokenResponse'
                - $ref: '#/components/schemas/UserTokenResponse'
                title: Response Issue Organization Token V1 Auth Token Post
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
      security:
      - OAuth2PasswordBearer: []
      summary: Issue Organization Token
      tags:
      - authentication
  /v1/availability:
    get:
      description: Check the availability of one or more domains. Invalid domains
        are reported per domain (status 'error' with error details) instead of failing
        the whole request.
      operationId: bulk_availability_v1_availability_get
      parameters:
      - description: '

          Specify one or more domains to check for availability.

          '
        examples:
          list:
            summary: A list of domains
            value:
            - example.com
            - example.org
        in: query
        name: domains
        required: true
        schema:
          description: '

            Specify one or more domains to check for availability.

            '
          items:
            maxLength: 1024
            type: string
          maxItems: 50
          title: Domains
          type: array
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/common__models__availability__datasource__DomainAvailabilityResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Check domain availability
      tags:
      - availability
  /v1/availability/stream:
    get:
      deprecated: true
      description: Stream domain availability results using Server-Sent Events (SSE)
        until the `done` event is received.
      operationId: stream_availability_v1_availability_stream_get
      parameters:
      - description: '

          Specify one or more domains to check for availability.

          '
        examples:
          list:
            summary: A list of domains
            value:
            - example.com
            - example.org
        in: query
        name: domains
        required: true
        schema:
          description: '

            Specify one or more domains to check for availability.

            '
          items:
            maxLength: 1024
            type: string
          maxItems: 1000
          title: Domains
          type: array
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            text/event-stream:
              examples:
                Data:
                  description: Returns individual domains' availability
                  summary: Availability data
                  value: 'data: {"domain":"example.com","status":"unavailable"}'
                Event:
                  description: Returned when an event occurs
                  summary: Event
                  value: 'event: done'
              schema:
                type: string
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Stream domain availability results
      tags:
      - availability
    post:
      description: Stream domain availability results using Server-Sent Events (SSE)
        until the `done` event is received.
      operationId: stream_availability_post_v1_availability_stream_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainAvailabilityRequest'
        required: true
      responses:
        '200':
          content:
            text/event-stream:
              examples:
                Data:
                  description: Returns individual domains' availability
                  summary: Availability data
                  value: 'data: {"domain":"example.com","status":"unavailable"}'
                Event:
                  description: Returned when an event occurs
                  summary: Event
                  value: 'event: done'
              schema:
                type: string
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Stream domain availability results
      tags:
      - availability
  /v1/contacts:
    get:
      description: Retrieves a paginated list of all contacts
      operationId: get_contacts_v1_contacts_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ContactSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - description: Filter by status tag types. Can be specified multiple times.
        in: query
        name: status_tags
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/StatusTagType'
            type: array
          - type: 'null'
          description: Filter by status tag types. Can be specified multiple times.
          title: Status Tags
      - in: query
        name: status_tag_mode
        required: false
        schema:
          $ref: '#/components/schemas/TagFilterMode'
          default: match_any
      - description: Filter by user tag IDs. Can be specified multiple times.
        in: query
        name: tag_ids
        required: false
        schema:
          anyOf:
          - items:
              examples:
              - tag_01h45ytscbebyvny4gc8cr8ma2
              format: typeid
              pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
              type: string
              x-typeid-prefix: tag
            type: array
          - type: 'null'
          description: Filter by user tag IDs. Can be specified multiple times.
          title: Tag Ids
      - in: query
        name: tag_mode
        required: false
        schema:
          $ref: '#/components/schemas/TagFilterMode'
          default: match_any
      - in: query
        name: first_name
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: First Name
      - in: query
        name: last_name
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Name
      - in: query
        name: email
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Email
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: country
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Country
      - in: query
        name: in_use
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: In Use
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - description: Include additional data in the response. Can be specified multiple
          times.
        in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ContactIncludeField'
            type: array
          - type: 'null'
          description: Include additional data in the response. Can be specified multiple
            times.
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_ContactResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all contacts
      tags:
      - contact
      x-required-permissions:
      - contacts:read
    post:
      description: Create a new contact object to use for domain registration
      operationId: create_contact_v1_contacts_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              examples:
                invalid_postal_code:
                  description: The postal code is not valid for the contact's country.
                    Enforced for a specific set of countries; elsewhere the postal
                    code is stored as submitted. A non-ASCII postal code is rejected
                    for every country.
                  summary: Postal code does not match the country
                  value:
                    errors:
                    - ctx:
                        message: '''93053'' is not a valid postal code for country
                          ''NL'', expected a format like ''1234 AB'''
                      input: '93053'
                      loc:
                      - body
                      - postal_code
                      msg: '''93053'' is not a valid postal code for country ''NL'',
                        expected a format like ''1234 AB'''
                      type: invalid_postal_code
                    status: 422
                    title: Request validation error.
                    type: request-validation-failed
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Invalid request parameters
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a contact
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/contacts/attribute-sets:
    get:
      operationId: list_attribute_sets_v1_contacts_attribute_sets_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ContactAttributeSetSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: tld
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Tld
      - in: query
        name: label
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Label
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_ContactAttributeSetResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List contact attribute sets
      tags:
      - contact
      x-required-permissions:
      - contacts:read
    post:
      operationId: create_attribute_set_v1_contacts_attribute_sets_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactAttributeSetCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttributeSetResponse'
          description: Successful Response
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_SET_LABEL_ALREADY_EXISTS
                detail: A contact attribute set with label 'Additional error context.'
                  already exists
                label: Additional error context.
                status: 409
                title: Contact Attribute Set Error
                type: contact-attribute-set-label-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a contact attribute set
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/contacts/attribute-sets/{contact_attribute_set_id}:
    delete:
      operationId: delete_attribute_set_v1_contacts_attribute_sets__contact_attribute_set_id__delete
      parameters:
      - in: path
        name: contact_attribute_set_id
        required: true
        schema:
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_SET_NOT_FOUND
                contact_attribute_set_id: Additional error context.
                detail: Contact attribute set not found
                status: 404
                title: Contact Attribute Set Error
                type: contact-attribute-set-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a contact attribute set
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
    get:
      operationId: get_attribute_set_v1_contacts_attribute_sets__contact_attribute_set_id__get
      parameters:
      - in: path
        name: contact_attribute_set_id
        required: true
        schema:
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttributeSetResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_SET_NOT_FOUND
                contact_attribute_set_id: Additional error context.
                detail: Contact attribute set not found
                status: 404
                title: Contact Attribute Set Error
                type: contact-attribute-set-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve a contact attribute set
      tags:
      - contact
      x-required-permissions:
      - contacts:read
    patch:
      operationId: update_attribute_set_v1_contacts_attribute_sets__contact_attribute_set_id__patch
      parameters:
      - in: path
        name: contact_attribute_set_id
        required: true
        schema:
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactAttributeSetUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttributeSetResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_SET_NOT_FOUND
                contact_attribute_set_id: Additional error context.
                detail: Contact attribute set not found
                status: 404
                title: Contact Attribute Set Error
                type: contact-attribute-set-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_SET_LABEL_ALREADY_EXISTS
                detail: A contact attribute set with label 'Additional error context.'
                  already exists
                label: Additional error context.
                status: 409
                title: Contact Attribute Set Error
                type: contact-attribute-set-label-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a contact attribute set
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/contacts/verification:
    get:
      operationId: get_verification_by_token_v1_contacts_verification_get
      parameters:
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_NOT_FOUND
                detail: No contact verification found
                status: 404
                title: Contact Management Error
                token: Additional error context.
                type: contact-verification-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Retrieve contact verification by token
      tags:
      - contact
    put:
      operationId: update_verification_by_token_v1_contacts_verification_put
      parameters:
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              examples:
                Contact Management Error:
                  value:
                    code: ERROR_INVALID_VERIFICATION_TOKEN
                    contact_id: Additional error context.
                    detail: Invalid verification token
                    status: 400
                    title: Contact Management Error
                    type: contact-verification-token-invalid
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_NOT_FOUND
                detail: No contact verification found
                status: 404
                title: Contact Management Error
                token: Additional error context.
                type: contact-verification-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Complete contact verification with token
      tags:
      - contact
  /v1/contacts/verify:
    get:
      operationId: email_verify_contact_v1_contacts_verify_get
      parameters:
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Email Verify Contact
      tags:
      - contact
  /v1/contacts/{contact_id}:
    delete:
      description: Deletes a contact object; only possible if the contact is not in
        use
      operationId: delete_contact_v1_contacts__contact_id__delete
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact not found
                status: 404
                title: Contact Management Error
                type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_IN_USE
                detail: Additional error context.
                status: 409
                title: Contact Management Error
                type: contact-in-use
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a contact
      tags:
      - contact
      x-required-permissions:
      - contacts:delete
    get:
      operationId: get_contact_v1_contacts__contact_id__get
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ContactIncludeField'
            type: array
          - type: 'null'
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact not found
                status: 404
                title: Contact Management Error
                type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve a contact
      tags:
      - contact
      x-required-permissions:
      - contacts:read
  /v1/contacts/{contact_id}/link/{contact_attribute_set_id}:
    patch:
      operationId: create_attribute_link_v1_contacts__contact_id__link__contact_attribute_set_id__patch
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - in: path
        name: contact_attribute_set_id
        required: true
        schema:
          examples:
          - contact_attribute_set_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_attribute_set_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Attribute Set Id
          type: string
          x-typeid-prefix: contact_attribute_set
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttributeLinkResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              examples:
                Contact Attribute Set Error:
                  value:
                    code: ERROR_CONTACT_ATTRIBUTE_SET_NOT_FOUND
                    contact_attribute_set_id: Additional error context.
                    detail: Contact attribute set not found
                    status: 404
                    title: Contact Attribute Set Error
                    type: contact-attribute-set-not-found
                Contact Management Error:
                  value:
                    code: ERROR_CONTACT_NOT_FOUND
                    contact_id: Additional error context.
                    detail: Contact not found
                    status: 404
                    title: Contact Management Error
                    type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_ATTRIBUTE_LINK_ALREADY_EXISTS
                contact_id: Additional error context.
                detail: A contact attribute link already exists for this contact and
                  TLD
                status: 409
                title: Contact Attribute Set Error
                tld: ''
                type: contact-attribute-link-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Link a contact to a contact attribute set
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/contacts/{contact_id}/verification:
    delete:
      operationId: cancel_verification_v1_contacts__contact_id__verification_delete
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_NOT_FOUND
                detail: No contact verification found
                status: 404
                title: Contact Management Error
                token: Additional error context.
                type: contact-verification-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete contact verification
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
    get:
      operationId: get_verification_status_v1_contacts__contact_id__verification_get
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactVerificationResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_NOT_FOUND
                detail: No contact verification found
                status: 404
                title: Contact Management Error
                token: Additional error context.
                type: contact-verification-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve contact verification by contact ID
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
    post:
      operationId: start_contact_verification_v1_contacts__contact_id__verification_post
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - in: query
        name: type
        required: true
        schema:
          $ref: '#/components/schemas/VerificationType'
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '201':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ContactVerificationEmailResponse'
                - $ref: '#/components/schemas/ContactVerificationApiResponse'
                title: Response Start Contact Verification V1 Contacts  Contact Id  Verification
                  Post
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact not found
                status: 404
                title: Contact Management Error
                type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '405':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_INVALID_TYPE
                detail: 'Invalid verification type: Additional error context.'
                status: 405
                title: Contact Management Error
                type: contact-verification-type-invalid
              schema:
                $ref: '#/components/schemas/Problem'
          description: Method Not Allowed
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Start contact verification
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
    put:
      operationId: update_verification_v1_contacts__contact_id__verification_put
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              examples:
                Contact Management Error:
                  value:
                    code: ERROR_INVALID_VERIFICATION_TOKEN
                    contact_id: Additional error context.
                    detail: Invalid verification token
                    status: 400
                    title: Contact Management Error
                    type: contact-verification-token-invalid
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_MISSING_PERMISSIONS
                detail: Missing permissions to verify contact as type Additional error
                  context.
                status: 403
                title: Contact Management Error
                type: contact-verification-type-missing-permissions
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_NOT_FOUND
                detail: No contact verification found
                status: 404
                title: Contact Management Error
                token: Additional error context.
                type: contact-verification-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Complete contact verification by contact ID
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/contacts/{contact_id}/verifications:
    get:
      description: Retrieve the current verification state for a contact from the
        contact-verification service.
      operationId: get_contact_verification_status_v1_contacts__contact_id__verifications_get
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttestRes'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_UPSTREAM_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact is not registered with the contact-verification service.
                status: 404
                title: Contact Not Registered with Verification Service
                type: contact-verification-upstream-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_VALIDATION
                detail: Additional error context.
                status: 422
                title: Contact Verification Validation Failed
                type: contact-verification-validation
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_UPSTREAM_ERROR
                detail: Additional error context.
                status: 502
                title: Contact Verification Service Error
                type: contact-verification-upstream
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get contact verification status
      tags:
      - contact
      x-required-permissions:
      - contacts:read
  /v1/contacts/{contact_id}/verifications/attest:
    post:
      description: Submit one or more contact-verification attestations. Returns the
        per-claim verification state.
      operationId: attest_contact_verification_v1_contacts__contact_id__verifications_attest_post
      parameters:
      - in: path
        name: contact_id
        required: true
        schema:
          examples:
          - contact_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^contact_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Contact Id
          type: string
          x-typeid-prefix: contact
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactAttestReq'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAttestRes'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_VERIFICATION_INCONSISTENT_METHOD_PROOF
                detail: All attestations in a single submission must share the same
                  method and proof. Submit separate requests if you used different
                  methods or proofs.
                domain_name: Additional error context.
                status: 400
                title: Domain Verification Inconsistent Method/Proof
                type: domain-verification-inconsistent-method-proof
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_UPSTREAM_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact is not registered with the contact-verification service.
                status: 404
                title: Contact Not Registered with Verification Service
                type: contact-verification-upstream-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              examples:
                Contact Verification Attestation Validation Failed:
                  value:
                    code: ERROR_CONTACT_VERIFICATION_ATTESTATION_VALIDATION
                    detail: Additional error context.
                    status: 422
                    title: Contact Verification Attestation Validation Failed
                    type: contact-verification-attestation-validation
                Contact Verification Validation Failed:
                  value:
                    code: ERROR_CONTACT_VERIFICATION_VALIDATION
                    detail: Additional error context.
                    status: 422
                    title: Contact Verification Validation Failed
                    type: contact-verification-validation
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_VERIFICATION_UPSTREAM_ERROR
                detail: Additional error context.
                status: 502
                title: Contact Verification Service Error
                type: contact-verification-upstream
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Attest a contact verification
      tags:
      - contact
      x-required-permissions:
      - contacts:manage
  /v1/dns:
    get:
      operationId: list_zones_v1_dns_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ZoneSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - description: Filter by user tag IDs. Can be specified multiple times.
        in: query
        name: tag_ids
        required: false
        schema:
          anyOf:
          - items:
              examples:
              - tag_01h45ytscbebyvny4gc8cr8ma2
              format: typeid
              pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
              type: string
              x-typeid-prefix: tag
            type: array
          - type: 'null'
          description: Filter by user tag IDs. Can be specified multiple times.
          title: Tag Ids
      - in: query
        name: tag_mode
        required: false
        schema:
          $ref: '#/components/schemas/TagFilterMode'
          default: match_any
      - in: query
        name: dnssec_status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/DnssecStatus'
          - type: 'null'
          title: Dnssec Status
      - in: query
        name: name
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: suffix
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Suffix
      - in: query
        name: vanity_nameserver_set_id
        required: false
        schema:
          anyOf:
          - examples:
            - vns_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: vns
          - type: 'null'
          title: Vanity Nameserver Set Id
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - in: query
        name: updated_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Updated After
      - in: query
        name: updated_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Updated Before
      - description: Include additional data in the response. Can be specified multiple
          times.
        in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ZoneIncludeField'
            type: array
          - type: 'null'
          description: Include additional data in the response. Can be specified multiple
            times.
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                zones_list:
                  description: Paginated list of DNS zones with their RRsets
                  summary: List of zones
                  value:
                    pagination:
                      current_page: 1
                      has_next_page: false
                      has_previous_page: false
                      page_size: 10
                      total_items: 1
                      total_pages: 1
                    results:
                    - created_on: '2025-11-18T12:43:35Z'
                      dns_zone_id: zone_01kpwv13k2f329vastjvrckwjs
                      dnssec_status: disabled
                      domain_parts:
                        domain: example
                        subdomain: ''
                        suffix: com
                      name: example.com.
                      rrsets:
                      - name: example.com.
                        protected: true
                        protected_reason: SYSTEM_MANAGED_SOA
                        records:
                        - protected: true
                          protected_reason: SYSTEM_MANAGED_SOA
                          rdata: ns1.opusdns.com. hostmaster.opusdns.com. 2025111801
                            10800 3600 604800 300
                        ttl: 3600
                        type: SOA
                      - name: example.com.
                        protected: true
                        protected_reason: SYSTEM_MANAGED_NS
                        records:
                        - protected: true
                          protected_reason: SYSTEM_MANAGED_NS
                          rdata: ns1.opusdns.com.
                        - protected: true
                          protected_reason: SYSTEM_MANAGED_NS
                          rdata: ns2.opusdns.net.
                        ttl: 3600
                        type: NS
                      updated_on: '2025-11-18T12:43:35Z'
              schema:
                $ref: '#/components/schemas/Pagination_DnsZoneResponse_'
          description: List of DNS zones retrieved successfully
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List Zones
      tags:
      - dns
      x-required-permissions:
      - dns:read
    post:
      operationId: create_zone_v1_dns_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              advanced_services_setup:
                description: A zone using HTTPS, SVCB, NAPTR, SSHFP, and CERT record
                  types
                summary: Advanced service binding and security record types
                value:
                  dnssec_status: disabled
                  name: example.com
                  rrsets:
                  - name: _443._https
                    records:
                    - rdata: 1 . alpn=h2,h3 port=443 ipv4hint=192.0.2.1
                    ttl: 300
                    type: HTTPS
                  - name: svc
                    records:
                    - rdata: 1 svc.example.net. alpn=bar port=8004
                    ttl: 300
                    type: SVCB
                  - name: sip
                    records:
                    - rdata: 100 10 "s" "SIP+D2U" "" _sip._udp.example.com.
                    ttl: 300
                    type: NAPTR
                  - name: host
                    records:
                    - rdata: 4 2 123456789abcdef67890123456789abcdef67890123456789abcdef6789abcde
                    ttl: 300
                    type: SSHFP
                  - name: cert
                    records:
                    - rdata: 1 12345 1 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ==
                    ttl: 300
                    type: CERT
              business_setup:
                description: A comprehensive setup for a business with multiple subdomains
                  and services
                summary: Business setup with multiple services
                value:
                  dnssec_status: enabled
                  name: example.com
                  rrsets:
                  - name: '@'
                    records:
                    - rdata: 203.0.113.10
                    ttl: 600
                    type: A
                  - name: www
                    records:
                    - rdata: example.com.
                    ttl: 300
                    type: CNAME
                  - name: api
                    records:
                    - rdata: 203.0.113.20
                    ttl: 300
                    type: A
                  - name: mail
                    records:
                    - rdata: 203.0.113.30
                    ttl: 300
                    type: A
                  - name: '@'
                    records:
                    - rdata: 10 mail.example.com.
                    - rdata: 20 backup-mail.example.com.
                    ttl: 300
                    type: MX
                  - name: '@'
                    records:
                    - rdata: '"v=spf1 include:_spf.google.com ~all"'
                    - rdata: '"google-site-verification=abc123def456"'
                    ttl: 300
                    type: TXT
              minimal_setup:
                description: Create a zone with just the zone name - SOA and NS records
                  are automatically generated
                summary: Minimal zone creation
                value:
                  dnssec_status: disabled
                  name: example.com
                  rrsets: []
            schema:
              $ref: '#/components/schemas/DnsZoneCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                business_setup_response:
                  description: Changeset response when creating a comprehensive business
                    zone
                  summary: Response for business setup creation
                  value:
                    changes:
                    - action: create_zone
                    - action: create_record
                      record_data: example.com.
                      rrset_name: www.example.com.
                      rrset_type: CNAME
                      ttl: 300
                    - action: create_record
                      record_data: 203.0.113.30
                      rrset_name: mail.example.com.
                      rrset_type: A
                      ttl: 300
                    - action: create_record
                      record_data: 203.0.113.20
                      rrset_name: api.example.com.
                      rrset_type: A
                      ttl: 300
                    - action: create_record
                      record_data: '"google-site-verification=abc123def456"'
                      rrset_name: example.com.
                      rrset_type: TXT
                      ttl: 300
                    - action: create_record
                      record_data: '"v=spf1 include:_spf.google.com ~all"'
                      rrset_name: example.com.
                      rrset_type: TXT
                      ttl: 300
                    - action: create_record
                      record_data: 10 mail.example.com.
                      rrset_name: example.com.
                      rrset_type: MX
                      ttl: 300
                    - action: create_record
                      record_data: 20 backup-mail.example.com.
                      rrset_name: example.com.
                      rrset_type: MX
                      ttl: 300
                    - action: create_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: ns1.opusdns.com.
                      rrset_name: example.com.
                      rrset_type: NS
                      ttl: 3600
                    - action: create_record
                      record_data: ns2.opusdns.com.
                      rrset_name: example.com.
                      rrset_type: NS
                      ttl: 3600
                    - action: create_record
                      record_data: 203.0.113.10
                      rrset_name: example.com.
                      rrset_type: A
                      ttl: 600
                    - action: create_record
                      record_data: 256 3 13 4epAMhnUgbFbAmKI2zbTXXFHGlVeHamiWLPdwJ8ehE9NgmvDNraqYF/0YdDcoc2elyelvi72KJyQfIR02axEeQ==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 257 3 13 Wx1Wk8Sl+PyanAWPYsCPw9qFv2Nv0U/MXoJGgpmdqgbLgtvPlVM1/66j/MFTOjk4ONGKGZoWbZ86ud18lWvacw==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 17781 13 2 21d0b2b21f501935546de33505a2b43d16ba3b1f375e00b0386dae3942165915
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: create_record
                      record_data: 17781 13 4 d10ab2a071c85c20a0338797401928255be1d08c470236b381fbd87df0d60e3aab5d86c6dee8356374167d9b68652608
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: enable_dnssec
                    changeset_id: 108e6028-2812-4bd9-aa41-5b46cdc7fbdc
                    num_changes: 17
                    zone_name: example.com.
                minimal_setup_response:
                  description: Changeset response when creating a zone with automatic
                    SOA and NS records
                  summary: Response for minimal zone creation
                  value:
                    changes:
                    - action: create_zone
                    - action: create_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: ns1.opusdns.com.
                      rrset_name: example.com.
                      rrset_type: NS
                      ttl: 3600
                    - action: create_record
                      record_data: ns2.opusdns.net.
                      rrset_name: example.com.
                      rrset_type: NS
                      ttl: 3600
                    changeset_id: de28f689-b400-45b7-9f67-9f92d512935a
                    num_changes: 4
                    zone_name: example.com.
              schema:
                anyOf:
                - $ref: '#/components/schemas/DnsChangesResponse'
                - type: 'null'
                title: Response Create Zone V1 Dns Post
          description: Zone created successfully
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              examples:
                typo_in_name:
                  description: The request contains a typo in the name field
                  summary: Typo in name
                  value:
                    errors:
                    - input:
                        nme: example.com
                      loc:
                      - body
                      - name
                      msg: Field required
                      type: missing
                    status: 422
                    title: Request validation error.
                    type: request-validation-failed
                zone_validation_failed:
                  description: The payload parsed but describes a zone that cannot
                    be served; each entry names the offending element via `loc` and
                    echoes it in `input`
                  summary: Zone rules rejected the rrsets
                  value:
                    code: ERROR_ZONE_VALIDATION_FAILED
                    detail: Zone validation failed
                    errors:
                    - input:
                        name: www.example.com.
                        records:
                        - rdata: example.com.
                        ttl: 3600
                        type: CNAME
                      loc:
                      - body
                      - rrsets
                      - 0
                      msg: 'CNAME record cannot coexist with other record types at
                        ''www.example.com.''. Found: CNAME and A'
                      type: cname_conflict
                    status: 422
                    title: DNS Error
                    type: dns-zone-validation
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Invalid request parameters
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create Zone
      tags:
      - dns
      x-required-permissions:
      - dns:manage
  /v1/dns/domain-forwards:
    get:
      description: Retrieves a paginated list of domain forwards grouped by DNS zones.
      operationId: list_domain_forwards_by_zone_v1_dns_domain_forwards_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/DomainForwardZoneSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                domain_forwards:
                  description: Paginated list of domain forwards organized by DNS
                    zones with redirect configurations
                  summary: Domain forwards by zone
                  value:
                    pagination:
                      current_page: 1
                      has_next_page: false
                      has_previous_page: false
                      page_size: 10
                      total_items: 1
                      total_pages: 1
                    results:
                    - domain_forwards:
                      - created_on: '2025-11-18T12:59:57Z'
                        domain_forward_id: domain_forward_01jx0000000000000000000001
                        enabled: false
                        hostname: example.com.
                        https:
                          created_on: '2025-11-18T12:59:57Z'
                          redirects:
                          - protected: false
                            redirect_code: 302
                            request_hostname: example.com.
                            request_path: /
                            request_protocol: https
                            target_hostname: auth.example.com.
                            target_path: /
                            target_protocol: https
                          updated_on: '2025-11-18T12:59:57Z'
                        updated_on: '2025-11-18T12:59:57Z'
                      zone_id: zone_01kabfvtysfqwv4dn89r3jepym
                      zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Pagination_DomainForwardZone_'
          description: List of domain forwards grouped by DNS zones
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List domain forwards by zone
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/email-forwards:
    get:
      description: Retrieves a paginated list of email forwards grouped by DNS zones.
      operationId: list_email_forwards_by_zone_v1_dns_email_forwards_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/EmailForwardZoneSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_EmailForwardZone_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List email forwards by zone
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/summary:
    get:
      operationId: get_zones_summary_v1_dns_summary_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                summary:
                  description: Summary of DNS zones showing total count and breakdown
                    by DNSSEC status
                  summary: Zones summary
                  value:
                    total_zones: 1
                    zones_by_dnssec:
                      disabled: 1
              schema:
                $ref: '#/components/schemas/DnsZoneSummary'
          description: DNS zones summary retrieved successfully
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get Zones Summary
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/{zone_name}:
    delete:
      operationId: delete_zone_v1_dns__zone_name__delete
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete Zone
      tags:
      - dns
      x-required-permissions:
      - dns:delete
    get:
      operationId: get_zone_v1_dns__zone_name__get
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ZoneIncludeField'
            type: array
          - type: 'null'
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DnsZoneResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get Zone
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/{zone_name}/dnssec/disable:
    post:
      operationId: disable_dnssec_v1_dns__zone_name__dnssec_disable_post
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                dnssec_disabled:
                  description: Changeset response showing DNSSEC keys and DS records
                    removed
                  summary: DNSSEC disabled for zone
                  value:
                    changes:
                    - action: delete_record
                      record_data: 256 3 13 5OmhbRQw0+xlqw4iYjM9SojiKkpfReE8LoMzzb3uDSvfvaePyreODC0Pf0eMti2hz/q9by5G7jh5nqQBRp8qAA==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: delete_record
                      record_data: 257 3 13 4knSelKBhrAmgwkLMDbJGXmpdO2vkPf6uwGn52BQmlgWXjIXnGqv9CYPTwplRf4mRbFKFDkhU8dn9AsNOL+8EQ==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: delete_record
                      record_data: 41074 13 2 0f8ad1e9b0de2eb958ba571208951e71330e6d9e2afa3c84ec6bd16d77bfc718
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: delete_record
                      record_data: 41074 13 4 f2fa86164e45235537238dd5b86a6a2533fd17b1e8216c1d66d18ccfc79be4dca77e3bc6d76eb136e193c2cee0a6ea85
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: delete_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111802
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111803
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: disable_dnssec
                    changeset_id: a2a336e2-de44-4e54-b160-1e25b117b0e9
                    num_changes: 7
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/DnsChangesResponse'
          description: DNSSEC disabled successfully
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Disable Dnssec
      tags:
      - dns
      x-required-permissions:
      - dns:manage
  /v1/dns/{zone_name}/dnssec/enable:
    post:
      operationId: enable_dnssec_v1_dns__zone_name__dnssec_enable_post
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                dnssec_enabled:
                  description: Changeset response showing DNSSEC keys and DS records
                    created
                  summary: DNSSEC enabled for zone
                  value:
                    changes:
                    - action: delete_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111801
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111802
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: 256 3 13 5OmhbRQw0+xlqw4iYjM9SojiKkpfReE8LoMzzb3uDSvfvaePyreODC0Pf0eMti2hz/q9by5G7jh5nqQBRp8qAA==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 257 3 13 4knSelKBhrAmgwkLMDbJGXmpdO2vkPf6uwGn52BQmlgWXjIXnGqv9CYPTwplRf4mRbFKFDkhU8dn9AsNOL+8EQ==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 41074 13 2 0f8ad1e9b0de2eb958ba571208951e71330e6d9e2afa3c84ec6bd16d77bfc718
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: create_record
                      record_data: 41074 13 4 f2fa86164e45235537238dd5b86a6a2533fd17b1e8216c1d66d18ccfc79be4dca77e3bc6d76eb136e193c2cee0a6ea85
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: enable_dnssec
                    changeset_id: b89527a6-b46e-4d29-bd57-6a1b6b4915c7
                    num_changes: 7
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/DnsChangesResponse'
          description: DNSSEC enabled successfully
        '202':
          content:
            application/json:
              examples:
                dnssec_publish_deferred:
                  description: Changeset response with `dnssec_registry_publish` set
                    to `deferred`
                  summary: DNSSEC enabled, registry publish deferred
                  value:
                    changes:
                    - action: delete_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111801
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025111802
                        10800 3600 604800 300
                      rrset_name: example.com.
                      rrset_type: SOA
                      ttl: 3600
                    - action: create_record
                      record_data: 256 3 13 5OmhbRQw0+xlqw4iYjM9SojiKkpfReE8LoMzzb3uDSvfvaePyreODC0Pf0eMti2hz/q9by5G7jh5nqQBRp8qAA==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 257 3 13 4knSelKBhrAmgwkLMDbJGXmpdO2vkPf6uwGn52BQmlgWXjIXnGqv9CYPTwplRf4mRbFKFDkhU8dn9AsNOL+8EQ==
                      rrset_name: example.com.
                      rrset_type: DNSKEY
                      ttl: 300
                    - action: create_record
                      record_data: 41074 13 2 0f8ad1e9b0de2eb958ba571208951e71330e6d9e2afa3c84ec6bd16d77bfc718
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: create_record
                      record_data: 41074 13 4 f2fa86164e45235537238dd5b86a6a2533fd17b1e8216c1d66d18ccfc79be4dca77e3bc6d76eb136e193c2cee0a6ea85
                      rrset_name: example.com.
                      rrset_type: DS
                      ttl: 300
                    - action: enable_dnssec
                    changeset_id: b89527a6-b46e-4d29-bd57-6a1b6b4915c7
                    dnssec_registry_publish: deferred
                    num_changes: 7
                    zone_name: example.com.
          description: The zone is signed, but the registry has not accepted the DS
            record yet because it could not see the new key material on the public
            nameservers. A background job resubmits it with backoff. Until it succeeds
            the zone resolves as unsigned; if the job gives up, DNSSEC is switched
            back off and a domain modification failure event carries the registry's
            diagnostic.
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '409':
          content:
            application/problem+json:
              examples:
                DNSSEC Enable Superseded:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_ENABLE_SUPERSEDED
                    detail: DNSSEC was disabled for 'example.com.' while it was being
                      enabled; the DS record was withdrawn and DNSSEC is off
                    status: 409
                    title: DNSSEC Enable Superseded
                    type: domain-dnssec-enable-superseded
                    zone_name: example.com.
                DNSSEC Zone Records Unavailable:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_ZONE_RECORDS_UNAVAILABLE
                    detail: DNS zone 'example.com.' is DNSSEC-enabled but has no usable
                      DS records to publish
                    status: 409
                    title: DNSSEC Zone Records Unavailable
                    type: domain-dnssec-zone-records-unavailable
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_DNSSEC_DIGEST_POLICY
                detail: The DNS zone publishes DS digest type(s) [4], but only digest
                  type(s) [2] can be submitted for TLD 'it'
                domain_name: example.it
                status: 422
                title: DNSSEC Digest Policy Error
                tld: it
                type: domain-dnssec-digest-policy
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Enable Dnssec
      tags:
      - dns
      x-required-permissions:
      - dns:manage
  /v1/dns/{zone_name}/domain-forwards:
    get:
      description: Retrieves all domain forwards configured for the specified DNS
        zone, including subdomains.
      operationId: list_zone_domain_forwards_v1_dns__zone_name__domain_forwards_get
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                zone_domain_forwards:
                  description: All domain forwards configured for a specific DNS zone
                    with redirect configurations
                  summary: Domain forwards for a zone
                  value:
                    domain_forwards:
                    - created_on: '2025-11-18T12:59:57Z'
                      domain_forward_id: domain_forward_01jx0000000000000000000001
                      enabled: false
                      hostname: example.com.
                      https:
                        created_on: '2025-11-18T12:59:57Z'
                        redirects:
                        - protected: false
                          redirect_code: 302
                          request_hostname: example.com.
                          request_path: /
                          request_protocol: https
                          target_hostname: auth.example.com
                          target_path: /
                          target_protocol: https
                        updated_on: '2025-11-18T12:59:57Z'
                      updated_on: '2025-11-18T12:59:57Z'
                    zone_id: zone_01kabfvtysfqwv4dn89r3jepym
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/DomainForwardZone'
          description: Domain forwards for the specified zone retrieved successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List domain forwards for a zone
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/{zone_name}/email-forwards:
    get:
      description: Retrieves all email forwards configured for the specified DNS zone,
        including subdomains and all aliases.
      operationId: list_zone_email_forwards_v1_dns__zone_name__email_forwards_get
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailForwardZone'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List email forwards for a zone
      tags:
      - dns
      x-required-permissions:
      - dns:read
  /v1/dns/{zone_name}/records:
    patch:
      operationId: patch_zone_records_v1_dns__zone_name__records_patch
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              manage_mx_records:
                description: Add a new mail server with higher priority and remove
                  an old one
                summary: Add and remove MX records
                value:
                  ops:
                  - op: upsert
                    record:
                      name: '@'
                      rdata: 5 new-mail.example.com.
                      ttl: 300
                      type: MX
                  - op: remove
                    record:
                      name: '@'
                      rdata: 10 old-mail.example.com.
                      ttl: 300
                      type: MX
              remove_single_record:
                description: Remove a specific record from an RRset
                summary: Remove a single record
                value:
                  ops:
                  - op: remove
                    record:
                      name: old-api
                      rdata: 203.0.113.200
                      ttl: 300
                      type: A
              update_txt_record:
                description: Add or update a TXT record for SPF configuration
                summary: Update TXT record
                value:
                  ops:
                  - op: upsert
                    record:
                      name: '@'
                      rdata: '"v=spf1 include:_spf.google.com include:mailgun.org
                        ~all"'
                      ttl: 300
                      type: TXT
              upsert_single_record:
                description: Upsert a single A record (creates if doesn't exist, updates
                  if exists)
                summary: Add or update a single record
                value:
                  ops:
                  - op: upsert
                    record:
                      name: api
                      rdata: 203.0.113.100
                      ttl: 300
                      type: A
            schema:
              $ref: '#/components/schemas/DnsZoneRecordsPatchOps'
        required: true
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_ZONE_VALIDATION_FAILED
                detail: Zone validation failed
                errors:
                - input:
                    op: upsert
                    record:
                      name: www.example.com.
                      rdata: target.invalid-tld.
                      ttl: 3600
                      type: CNAME
                  loc:
                  - body
                  - ops
                  - 0
                  msg: Unrecognized TLD
                  type: invalid_rdata
                status: 422
                title: DNS Error
                type: dns-zone-validation
                zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Patch Zone Records
      tags:
      - dns
      x-required-permissions:
      - dns:manage
  /v1/dns/{zone_name}/rrsets:
    patch:
      operationId: patch_zone_rrsets_v1_dns__zone_name__rrsets_patch
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              delegate_subdomain:
                description: Add an NS RRset below the zone apex to delegate a subdomain
                  to other nameservers (sub-zone delegation). The zone answers queries
                  for the subtree with a referral. NS records at the apex are system-managed
                  and cannot be changed here.
                summary: Delegate a subdomain
                value:
                  ops:
                  - op: upsert
                    rrset:
                      name: internal
                      records:
                      - rdata: ns1.other-provider.net.
                      - rdata: ns2.other-provider.net.
                      ttl: 3600
                      type: NS
              remove_single_rrset:
                description: Remove all records for a specific name and type
                summary: Remove a single RRset
                value:
                  ops:
                  - op: remove
                    rrset:
                      name: old-service
                      records: []
                      ttl: 300
                      type: A
              upsert_advanced_rrsets:
                description: Add HTTPS, SVCB, NAPTR, SSHFP, and CERT records in a
                  single patch
                summary: Upsert advanced service binding and security RRsets
                value:
                  ops:
                  - op: upsert
                    rrset:
                      name: _443._https
                      records:
                      - rdata: 1 . alpn=h2,h3 port=443 ipv4hint=192.0.2.1
                      ttl: 300
                      type: HTTPS
                  - op: upsert
                    rrset:
                      name: svc
                      records:
                      - rdata: 1 svc.example.net. alpn=bar port=8004
                      ttl: 300
                      type: SVCB
                  - op: upsert
                    rrset:
                      name: sip
                      records:
                      - rdata: 100 10 "s" "SIP+D2U" "" _sip._udp.example.com.
                      ttl: 300
                      type: NAPTR
                  - op: upsert
                    rrset:
                      name: host
                      records:
                      - rdata: 4 2 123456789abcdef67890123456789abcdef67890123456789abcdef6789abcde
                      ttl: 300
                      type: SSHFP
                  - op: upsert
                    rrset:
                      name: cert
                      records:
                      - rdata: 1 12345 1 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ==
                      ttl: 300
                      type: CERT
              upsert_and_remove:
                description: Change www from CNAME to A record with multiple IPs (remove
                  CNAME, add A records)
                summary: Multiple operations
                value:
                  ops:
                  - op: upsert
                    rrset:
                      name: www
                      records:
                      - rdata: 203.0.113.10
                      - rdata: 203.0.113.11
                      ttl: 300
                      type: A
                  - op: remove
                    rrset:
                      name: www
                      records: []
                      ttl: 300
                      type: CNAME
              upsert_mx_records:
                description: Replace MX records with new mail server priorities
                summary: Update MX records
                value:
                  ops:
                  - op: upsert
                    rrset:
                      name: '@'
                      records:
                      - rdata: 10 mail1.example.com.
                      - rdata: 20 mail2.example.com.
                      - rdata: 30 mail3.example.com.
                      ttl: 300
                      type: MX
              upsert_single_rrset:
                description: Upsert an A record for a subdomain (creates if doesn't
                  exist, updates if exists)
                summary: Add or update a single RRset
                value:
                  ops:
                  - op: upsert
                    rrset:
                      name: api
                      records:
                      - rdata: 203.0.113.50
                      ttl: 300
                      type: A
            schema:
              $ref: '#/components/schemas/DnsZoneRrsetsPatchOps'
        required: true
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_ZONE_VALIDATION_FAILED
                detail: Zone validation failed
                errors:
                - input:
                    op: upsert
                    rrset:
                      name: www.example.com.
                      records:
                      - rdata: target.invalid-tld.
                      ttl: 3600
                      type: CNAME
                  loc:
                  - body
                  - ops
                  - 0
                  msg: Unrecognized TLD
                  type: invalid_rdata
                status: 422
                title: DNS Error
                type: dns-zone-validation
                zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Patch Zone Rrsets
      tags:
      - dns
      x-required-permissions:
      - dns:manage
    put:
      operationId: update_zone_rrsets_v1_dns__zone_name__rrsets_put
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              update_a_record:
                description: Replace all RRsets with a single A record for the zone
                  apex
                summary: Update A record
                value:
                  rrsets:
                  - name: '@'
                    records:
                    - rdata: 203.0.113.10
                    ttl: 300
                    type: A
              update_advanced_rrsets:
                description: Replace all RRsets with HTTPS, SVCB, NAPTR, SSHFP, and
                  CERT records
                summary: Update with advanced service binding and security RRsets
                value:
                  rrsets:
                  - name: _443._https
                    records:
                    - rdata: 1 . alpn=h2,h3 port=443 ipv4hint=192.0.2.1
                    ttl: 300
                    type: HTTPS
                  - name: svc
                    records:
                    - rdata: 1 svc.example.net. alpn=bar port=8004
                    ttl: 300
                    type: SVCB
                  - name: sip
                    records:
                    - rdata: 100 10 "s" "SIP+D2U" "" _sip._udp.example.com.
                    ttl: 300
                    type: NAPTR
                  - name: host
                    records:
                    - rdata: 4 2 123456789abcdef67890123456789abcdef67890123456789abcdef6789abcde
                    ttl: 300
                    type: SSHFP
                  - name: cert
                    records:
                    - rdata: 1 12345 1 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ==
                    ttl: 300
                    type: CERT
              update_multiple_rrsets:
                description: Replace all RRsets with multiple record sets (A, CNAME,
                  MX)
                summary: Update multiple RRsets
                value:
                  rrsets:
                  - name: '@'
                    records:
                    - rdata: 203.0.113.10
                    ttl: 300
                    type: A
                  - name: www
                    records:
                    - rdata: example.com.
                    ttl: 300
                    type: CNAME
                  - name: '@'
                    records:
                    - rdata: 10 mail.example.com.
                    - rdata: 20 backup-mail.example.com.
                    ttl: 300
                    type: MX
              update_mx_records:
                description: Replace all RRsets with MX records for email forwarding
                  (returns 204 No Content)
                summary: Update MX records
                value:
                  rrsets:
                  - name: '@'
                    records:
                    - rdata: 10 mx1.mxforward.opusdns.dev.
                    - rdata: 20 mx2.mxforward.opusdns.dev.
                    ttl: 600
                    type: MX
              update_txt_records:
                description: Replace all RRsets with TXT records (SPF, verification)
                summary: Update TXT records
                value:
                  rrsets:
                  - name: '@'
                    records:
                    - rdata: '"v=spf1 include:_spf.google.com ~all"'
                    - rdata: '"google-site-verification=abc123def456"'
                    ttl: 300
                    type: TXT
            schema:
              $ref: '#/components/schemas/DnsZoneRrsetsCreate'
        required: true
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_ZONE_VALIDATION_FAILED
                detail: Zone validation failed
                errors:
                - input:
                    name: www.example.com.
                    records:
                    - rdata: example.com.
                    ttl: 3600
                    type: CNAME
                  loc:
                  - body
                  - rrsets
                  - 0
                  msg: 'CNAME record cannot coexist with other record types at ''www.example.com.''.
                    Found: CNAME and A'
                  type: cname_conflict
                status: 422
                title: DNS Error
                type: dns-zone-validation
                zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update Zone Rrsets
      tags:
      - dns
      x-required-permissions:
      - dns:manage
  /v1/dns/{zone_name}/vanity-set:
    patch:
      operationId: update_zone_vanity_set_v1_dns__zone_name__vanity_set_patch
      parameters:
      - description: DNS zone name (trailing dot optional)
        in: path
        name: zone_name
        required: true
        schema:
          description: DNS zone name (trailing dot optional)
          title: Zone Name
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ZoneVanitySetUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DnsZoneVanitySetUpdateRes'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DNS
                detail: Additional error context.
                status: 400
                title: DNS Error
                type: dns
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Assign or clear a zone's vanity nameserver set
      tags:
      - dns
      x-required-permissions:
      - dns:manage
      - vanity_ns:manage
  /v1/domain-forwards:
    get:
      description: Retrieves a paginated list of domain forwards by hostname for the
        organization
      operationId: list_domain_forwards_v1_domain_forwards_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/DomainForwardSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                domain_forwards_list:
                  description: Paginated list of domain forwards with multiple protocols
                    and redirect configurations
                  summary: Domain forwards list
                  value:
                    pagination:
                      current_page: 1
                      has_next_page: false
                      has_previous_page: false
                      page_size: 10
                      total_items: 3
                      total_pages: 1
                    results:
                    - created_on: '2025-02-20T10:30:45Z'
                      domain_forward_id: domain_forward_01jx0000000000000000000001
                      enabled: true
                      hostname: example.com.
                      http:
                        created_on: '2025-02-20T10:30:45Z'
                        redirects:
                        - protected: false
                          redirect_code: 301
                          request_hostname: example.com.
                          request_path: /
                          request_protocol: http
                          target_hostname: example.com
                          target_path: /
                          target_protocol: https
                        updated_on: '2025-02-20T10:30:45Z'
                      https:
                        created_on: '2025-02-20T10:30:45Z'
                        redirects:
                        - protected: false
                          redirect_code: 302
                          request_hostname: example.com.
                          request_path: /
                          request_protocol: https
                          target_hostname: www.example.com
                          target_path: /
                          target_protocol: https
                        updated_on: '2025-02-20T10:30:45Z'
                      updated_on: '2025-02-20T10:30:45Z'
                    - created_on: '2025-02-20T10:30:45Z'
                      domain_forward_id: domain_forward_01jx0000000000000000000002
                      enabled: false
                      hostname: api.example.com.
                      https:
                        created_on: '2025-02-20T10:30:45Z'
                        redirects:
                        - protected: false
                          redirect_code: 308
                          request_hostname: api.example.com.
                          request_path: /v1
                          request_protocol: https
                          target_hostname: api-v2.example.com
                          target_path: /v1
                          target_protocol: https
                        updated_on: '2025-02-20T10:30:45Z'
                      updated_on: '2025-02-20T10:30:45Z'
                    - created_on: '2025-02-20T10:30:45Z'
                      domain_forward_id: domain_forward_01jx0000000000000000000003
                      enabled: true
                      hostname: old.example.com.
                      http:
                        created_on: '2025-02-20T10:30:45Z'
                        redirects:
                        - protected: false
                          redirect_code: 301
                          request_hostname: old.example.com.
                          request_path: /blog
                          request_protocol: http
                          target_hostname: example.com
                          target_path: /news
                          target_protocol: https
                        - protected: false
                          redirect_code: 301
                          request_hostname: old.example.com.
                          request_path: /
                          request_protocol: http
                          target_hostname: example.com
                          target_path: /
                          target_protocol: https
                        updated_on: '2025-02-20T10:30:45Z'
                      https:
                        created_on: '2025-02-20T10:30:45Z'
                        redirects:
                        - protected: false
                          redirect_code: 301
                          request_hostname: old.example.com.
                          request_path: /
                          request_protocol: https
                          target_hostname: example.com
                          target_path: /
                          target_protocol: https
                        updated_on: '2025-02-20T10:30:45Z'
                      updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/Pagination_DomainForward_'
          description: List of domain forwards retrieved successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List domain forwards
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
    patch:
      description: Applies patch operations to update or remove redirects across hostnames
        and protocols. Raises an error if the domain forward or domain forward set
        does not exist.
      operationId: patch_redirects_v1_domain_forwards_patch
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainForwardPatchOps'
        required: true
      responses:
        '204':
          description: Domain forward redirects updated successfully.
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Patch domain forward redirects
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
    post:
      description: Creates a new domain forward configuration. Wildcard forwards can
        be created by using *.hostname (e.g., *.example.com).
      operationId: create_domain_forward_v2_v1_domain_forwards_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              http_and_https_forwards:
                description: Create a domain forward with both HTTP and HTTPS protocols
                  configured. HTTP requests are redirected with 301 (Moved Permanently)
                  to HTTPS, while HTTPS requests are redirected with 302 (Found) to
                  a different target (e.g., auth service).
                summary: HTTP and HTTPS domain forwards
                value:
                  enabled: false
                  hostname: example.com.
                  http:
                    redirects:
                    - redirect_code: 301
                      request_path: /
                      target_hostname: example.com
                      target_path: /
                      target_protocol: https
                  https:
                    redirects:
                    - redirect_code: 302
                      request_path: /
                      target_hostname: auth.example.com
                      target_path: /
                      target_protocol: https
              http_to_https_only:
                description: Create a domain forward with only HTTPS protocol configured.
                  This is useful for HTTPS-only services where you want to redirect
                  HTTPS traffic without handling HTTP.
                summary: HTTPS-only forward
                value:
                  enabled: false
                  hostname: example.com.
                  https:
                    redirects:
                    - redirect_code: 301
                      request_path: /
                      target_hostname: example.com
                      target_path: /
                      target_protocol: https
            schema:
              $ref: '#/components/schemas/DomainForwardCreateRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                http_and_https_response:
                  description: Response when creating a domain forward with both HTTP
                    and HTTPS protocols. The forward is created but initially disabled
                    (enabled=false) until DNS records are provisioned.
                  summary: Response for HTTP and HTTPS forwards
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    domain_forward_id: domain_forward_01jx0000000000000000000001
                    enabled: false
                    hostname: example.com.
                    http:
                      created_on: '2025-02-20T10:30:45Z'
                      redirects:
                      - protected: false
                        redirect_code: 301
                        request_hostname: example.com.
                        request_path: /
                        request_protocol: http
                        target_hostname: example.com
                        target_path: /
                        target_protocol: https
                      updated_on: '2025-02-20T10:30:45Z'
                    https:
                      created_on: '2025-02-20T10:30:45Z'
                      redirects:
                      - protected: false
                        redirect_code: 302
                        request_hostname: example.com.
                        request_path: /
                        request_protocol: https
                        target_hostname: auth.example.com
                        target_path: /
                        target_protocol: https
                      updated_on: '2025-02-20T10:30:45Z'
                    updated_on: '2025-02-20T10:30:45Z'
                https_only_response:
                  description: Response when creating a HTTPS-only domain forward
                    with minimal protocol configuration.
                  summary: Response for HTTPS-only forward
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    domain_forward_id: domain_forward_01jx0000000000000000000002
                    enabled: false
                    hostname: example.com.
                    http:
                      created_on: '2025-02-20T10:30:45Z'
                      redirects:
                      - protected: false
                        redirect_code: 301
                        request_hostname: example.com.
                        request_path: /
                        request_protocol: http
                        target_hostname: example.com
                        target_path: /
                        target_protocol: https
                      updated_on: '2025-02-20T10:30:45Z'
                    updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/DomainForward'
          description: Domain forward created successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ZONE_NOT_FOUND
                detail: Zone not found
                status: 404
                title: DNS Error
                type: dns-zone-not-found
                zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: DNS zone was not found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_ALREADY_EXISTS
                detail: Domain forward already exists for example.com.
                status: 409
                title: Domain Forward Error
                type: domain-forward-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Domain forward already exists for this hostname
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a domain forward
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
  /v1/domain-forwards/metrics:
    get:
      description: Retrieves overall metrics for domain forwards including total and
        unique visit counts.
      operationId: metrics_v1_domain_forwards_metrics_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_metrics:
                  description: Basic metrics showing 1 invoked forward with 1,250
                    total visits
                  summary: Basic metrics example
                  value:
                    configured_forwards: 3
                    invoked_forwards: 1
                    total_visits: 1250
                    unique_visits: 847
                comprehensive_metrics:
                  description: Comprehensive metrics showing 5 invoked forwards with
                    15,842 total visits
                  summary: Comprehensive metrics example
                  value:
                    configured_forwards: 12
                    invoked_forwards: 5
                    total_visits: 15842
                    unique_visits: 9234
              schema:
                $ref: '#/components/schemas/DomainForwardMetricsResponse'
          description: Domain forward metrics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get domain forward metrics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/browser:
    get:
      description: Retrieves visitor traffic broken down by browser type (Chrome,
        Safari, Firefox, etc.) with total and unique visit counts.
      operationId: browser_stats_v1_domain_forwards_metrics_browser_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_browser_stats:
                  description: Shows top 4 browsers with visit counts and unique visitor
                    counts
                  summary: Basic browser statistics
                  value:
                    results:
                    - key: Chrome
                      total: 450
                      unique: 320
                    - key: Safari
                      total: 280
                      unique: 195
                    - key: Firefox
                      total: 195
                      unique: 145
                    - key: Edge
                      total: 145
                      unique: 107
                comprehensive_browser_stats:
                  description: Shows extended browser list with detailed visitor tracking
                  summary: Comprehensive browser statistics
                  value:
                    results:
                    - key: Chrome
                      total: 6200
                      unique: 4125
                    - key: Safari
                      total: 3850
                      unique: 2680
                    - key: Firefox
                      total: 2680
                      unique: 1950
                    - key: Edge
                      total: 1890
                      unique: 1375
                    - key: Opera
                      total: 890
                      unique: 620
                    - key: Samsung Internet
                      total: 452
                      unique: 325
              schema:
                $ref: '#/components/schemas/DomainForwardBrowserStatsResponse'
          description: Browser statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get browser statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/geo:
    get:
      description: Retrieves visitor traffic broken down by geographic location (country
        code) with visit counts.
      operationId: geo_stats_v1_domain_forwards_metrics_geo_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_geo_stats:
                  description: Shows visits by country for top 4 regions
                  summary: Basic geographic statistics
                  value:
                    results:
                    - key: US
                      total: 450
                    - key: GB
                      total: 220
                    - key: DE
                      total: 180
                    - key: FR
                      total: 145
                comprehensive_geo_stats:
                  description: Shows detailed geographic distribution across 8 countries
                  summary: Comprehensive geographic statistics
                  value:
                    results:
                    - key: US
                      total: 5800
                    - key: GB
                      total: 2100
                    - key: DE
                      total: 1850
                    - key: FR
                      total: 1450
                    - key: CA
                      total: 980
                    - key: AU
                      total: 750
                    - key: JP
                      total: 620
                    - key: IN
                      total: 520
              schema:
                $ref: '#/components/schemas/DomainForwardGeoStatsResponse'
          description: Geographic statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get geographic statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/platform:
    get:
      description: Retrieves visitor traffic broken down by platform (Windows, Macintosh,
        iOS, Android, Linux) with total and unique visit counts.
      operationId: platform_stats_v1_domain_forwards_metrics_platform_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_platform_stats:
                  description: Shows distribution of visits across desktop and mobile
                    platforms
                  summary: Basic platform statistics
                  value:
                    results:
                    - key: Windows
                      total: 520
                      unique: 380
                    - key: Macintosh
                      total: 350
                      unique: 245
                    - key: iOS
                      total: 280
                      unique: 200
                    - key: Android
                      total: 100
                      unique: 75
                comprehensive_platform_stats:
                  description: Shows detailed platform breakdown including Linux and
                    other systems
                  summary: Comprehensive platform statistics
                  value:
                    results:
                    - key: Windows
                      total: 7200
                      unique: 5100
                    - key: Macintosh
                      total: 4800
                      unique: 3400
                    - key: iOS
                      total: 2100
                      unique: 1500
                    - key: Android
                      total: 1250
                      unique: 900
                    - key: Linux
                      total: 492
                      unique: 350
              schema:
                $ref: '#/components/schemas/DomainForwardPlatformStatsResponse'
          description: Platform statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get platform statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/referrer:
    get:
      description: Retrieves visitor referral sources (where traffic came from) with
        total and unique visit counts.
      operationId: referrer_stats_v1_domain_forwards_metrics_referrer_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_referrer_stats:
                  description: Shows top referral sources directing traffic to forwards
                  summary: Basic referrer statistics
                  value:
                    results:
                    - key: https://google.com
                      total: 450
                      unique: 325
                    - key: https://twitter.com
                      total: 280
                      unique: 195
                    - key: direct
                      total: 240
                      unique: 180
                    - key: https://reddit.com
                      total: 95
                      unique: 75
                comprehensive_referrer_stats:
                  description: Shows extended list of referral sources including unique
                    visitor counts
                  summary: Comprehensive referrer statistics
                  value:
                    results:
                    - key: https://google.com
                      total: 5800
                      unique: 4200
                    - key: https://twitter.com
                      total: 3200
                      unique: 2300
                    - key: direct
                      total: 2900
                      unique: 2100
                    - key: https://reddit.com
                      total: 1450
                      unique: 1050
                    - key: https://linkedin.com
                      total: 980
                      unique: 720
                    - key: https://facebook.com
                      total: 512
                      unique: 380
              schema:
                $ref: '#/components/schemas/DomainForwardReferrerStatsResponse'
          description: Referrer statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get referrer statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/status-code:
    get:
      description: Retrieves distribution of HTTP redirect status codes (301, 302,
        307, 308) used across forwards.
      operationId: status_code_stats_v1_domain_forwards_metrics_status_code_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_status_code_stats:
                  description: Shows distribution of HTTP redirect status codes (301,
                    302, 307, 308)
                  summary: Basic status code statistics
                  value:
                    results:
                    - key: '301'
                      total: 520
                    - key: '302'
                      total: 430
                    - key: '307'
                      total: 285
                    - key: '308'
                      total: 15
                comprehensive_status_code_stats:
                  description: Shows detailed redirect code usage patterns at scale
                  summary: Comprehensive status code statistics
                  value:
                    results:
                    - key: '301'
                      total: 6800
                    - key: '302'
                      total: 5200
                    - key: '307'
                      total: 2850
                    - key: '308'
                      total: 992
              schema:
                $ref: '#/components/schemas/DomainForwardStatusCodeStatsResponse'
          description: Status code statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get HTTP status code statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/time-series:
    get:
      description: Retrieves visit counts bucketed by time intervals (hourly, daily)
        for the specified time range.
      operationId: time_series_v1_domain_forwards_metrics_time_series_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                daily_time_series:
                  description: Shows visit counts bucketed by day over a 7-day period
                  summary: Daily time series example
                  value:
                    results:
                    - timestamp: '2025-02-20T12:00:00Z'
                      total: 2500
                    - timestamp: '2025-02-19T12:00:00Z'
                      total: 2350
                    - timestamp: '2025-02-18T12:00:00Z'
                      total: 2200
                    - timestamp: '2025-02-17T12:00:00Z'
                      total: 2050
                    - timestamp: '2025-02-16T12:00:00Z'
                      total: 1900
                    - timestamp: '2025-02-15T12:00:00Z'
                      total: 1750
                    - timestamp: '2025-02-14T12:00:00Z'
                      total: 1600
                hourly_time_series:
                  description: Shows visit counts bucketed by hour over a 24-hour
                    period
                  summary: Hourly time series example
                  value:
                    results:
                    - timestamp: '2025-02-20T12:00:00Z'
                      total: 150
                    - timestamp: '2025-02-20T11:00:00Z'
                      total: 140
                    - timestamp: '2025-02-20T10:00:00Z'
                      total: 130
                    - timestamp: '2025-02-20T09:00:00Z'
                      total: 120
                    - timestamp: '2025-02-20T08:00:00Z'
                      total: 110
                    - timestamp: '2025-02-20T07:00:00Z'
                      total: 100
                    - timestamp: '2025-02-20T06:00:00Z'
                      total: 90
                    - timestamp: '2025-02-20T05:00:00Z'
                      total: 80
                    - timestamp: '2025-02-20T04:00:00Z'
                      total: 70
                    - timestamp: '2025-02-20T03:00:00Z'
                      total: 60
                    - timestamp: '2025-02-20T02:00:00Z'
                      total: 50
                    - timestamp: '2025-02-20T01:00:00Z'
                      total: 40
                    - timestamp: '2025-02-20T00:00:00Z'
                      total: 30
                    - timestamp: '2025-02-19T23:00:00Z'
                      total: 20
                    - timestamp: '2025-02-19T22:00:00Z'
                      total: 10
                    - timestamp: '2025-02-19T21:00:00Z'
                      total: 0
                    - timestamp: '2025-02-19T20:00:00Z'
                      total: -10
                    - timestamp: '2025-02-19T19:00:00Z'
                      total: -20
                    - timestamp: '2025-02-19T18:00:00Z'
                      total: -30
                    - timestamp: '2025-02-19T17:00:00Z'
                      total: -40
                    - timestamp: '2025-02-19T16:00:00Z'
                      total: -50
                    - timestamp: '2025-02-19T15:00:00Z'
                      total: -60
                    - timestamp: '2025-02-19T14:00:00Z'
                      total: -70
                    - timestamp: '2025-02-19T13:00:00Z'
                      total: -80
              schema:
                $ref: '#/components/schemas/DomainForwardMetricsTimeSeriesResponse'
          description: Time series metrics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get domain forward time series metrics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/user-agent:
    get:
      description: Retrieves visitor traffic broken down by user agent string with
        total and unique visit counts.
      operationId: user_agent_stats_v1_domain_forwards_metrics_user_agent_get
      parameters:
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                basic_user_agent_stats:
                  description: Shows top 3 user agents with visit distribution
                  summary: Basic user agent statistics
                  value:
                    results:
                    - key: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                      total: 320
                      unique: 245
                    - key: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
                      total: 220
                      unique: 165
                    - key: Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X)
                        AppleWebKit/605.1.15
                      total: 180
                      unique: 140
                comprehensive_user_agent_stats:
                  description: Shows extended user agent list with detailed metrics
                  summary: Comprehensive user agent statistics
                  value:
                    results:
                    - key: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                      total: 4200
                      unique: 3100
                    - key: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
                      total: 2850
                      unique: 2100
                    - key: Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X)
                        AppleWebKit/605.1.15
                      total: 1850
                      unique: 1350
                    - key: Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36
                      total: 920
                      unique: 680
              schema:
                $ref: '#/components/schemas/DomainForwardUserAgentStatsResponse'
          description: User agent statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get user agent statistics
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/metrics/visits-by-key:
    get:
      description: Retrieves visit metrics grouped by a specified key (url, fqdn,
        domain, forward, or rule) with total and unique visit counts.
      operationId: visits_by_key_v1_domain_forwards_metrics_visits_by_key_get
      parameters:
      - description: 'Grouping key: url, fqdn, domain, forward, or rule'
        in: query
        name: grouping
        required: false
        schema:
          $ref: '#/components/schemas/MetricsGrouping'
          default: domain
          description: 'Grouping key: url, fqdn, domain, forward, or rule'
      - in: query
        name: hostname
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Hostname
      - in: query
        name: domain
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      - description: 'Filter by protocol: http or https'
        in: query
        name: protocol
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/Protocol'
          - type: 'null'
          description: 'Filter by protocol: http or https'
          title: Protocol
      - description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
        in: query
        name: time_range
        required: false
        schema:
          $ref: '#/components/schemas/TimeRange'
          default: 1d
          description: 'Time range: 1h, 1d, 7d, 30d, or 1y'
      - description: 'Exclude platform values: Unknown, Bot'
        in: query
        name: exclude_bots
        required: false
        schema:
          default: false
          description: 'Exclude platform values: Unknown, Bot'
          title: Exclude Bots
          type: boolean
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                visits_by_domain:
                  description: Shows visit distribution when grouped by domain
                  summary: Visits grouped by domain
                  value:
                    results:
                    - key: example.com
                      total: 1065
                      unique: 770
                    - key: subdomain.example.com
                      total: 520
                      unique: 380
                    - key: api.example.com
                      total: 310
                      unique: 220
                visits_by_forward:
                  description: Shows visit distribution when grouped by source-to-destination
                    forward mapping
                  summary: Visits grouped by forward
                  value:
                    results:
                    - key: example.com -> dest1.example.com
                      total: 680
                      unique: 480
                    - key: subdomain.example.com -> dest2.example.com
                      total: 520
                      unique: 380
                    - key: api.example.com -> api-v2.example.com
                      total: 310
                      unique: 220
                visits_by_url:
                  description: Shows visit distribution when grouped by request URL
                  summary: Visits grouped by URL
                  value:
                    results:
                    - key: example.com/
                      total: 450
                      unique: 320
                    - key: example.com/about
                      total: 280
                      unique: 195
                    - key: example.com/blog
                      total: 240
                      unique: 180
                    - key: example.com/contact
                      total: 95
                      unique: 75
              schema:
                $ref: '#/components/schemas/DomainForwardVisitsByKeyResponse'
          description: Visits by key statistics retrieved successfully
        '400':
          content:
            application/json:
              example:
                detail: Cannot specify both 'hostname' and 'domain'. Use 'hostname'
                  for exact match or 'domain' to filter by domain including all subdomains.
          description: Invalid query parameters
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_METRICS_TEMPORARILY_UNAVAILABLE
                detail: Domain forward metrics are currently unavailable. Please try
                  again later.
                status: 503
                title: Domain Forward Metrics Temporarily Unavailable
                type: domain-forward-metrics-temporarily-unavailable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get visits grouped by key
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
  /v1/domain-forwards/{hostname}:
    delete:
      description: Deletes the domain forward configuration for the specified hostname
      operationId: delete_domain_forward_v1_domain_forwards__hostname__delete
      parameters:
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Domain forward deleted successfully. No content returned.
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a domain forward
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:delete
    get:
      description: Retrieves the domain forward configuration for the specified hostname
      operationId: get_domain_forward_v1_domain_forwards__hostname__get
      parameters:
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                single_domain_forward:
                  description: Detailed view of a single domain forward with all protocols
                    and redirects
                  summary: Single domain forward
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    domain_forward_id: domain_forward_01jx0000000000000000000001
                    enabled: true
                    hostname: example.com.
                    http:
                      created_on: '2025-02-20T10:30:45Z'
                      redirects:
                      - protected: false
                        redirect_code: 301
                        request_hostname: example.com.
                        request_path: /
                        request_protocol: http
                        target_hostname: example.com
                        target_path: /
                        target_protocol: https
                      updated_on: '2025-02-20T10:30:45Z'
                    https:
                      created_on: '2025-02-20T10:30:45Z'
                      redirects:
                      - protected: false
                        redirect_code: 302
                        request_hostname: example.com.
                        request_path: /
                        request_protocol: https
                        target_hostname: www.example.com
                        target_path: /
                        target_protocol: https
                      updated_on: '2025-02-20T10:30:45Z'
                    updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/DomainForward'
          description: Domain forward retrieved successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a domain forward
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
    post:
      description: Creates a new domain forward set for a specific protocol (HTTP
        or HTTPS). Raises an error if the set already exists.
      operationId: create_domain_forward_set_v1_domain_forwards__hostname__post
      parameters:
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainForwardSetCreateRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                created_protocol_set:
                  description: New domain forward protocol set with HTTP redirects
                  summary: Protocol set created
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    hostname: example.com.
                    protocol: http
                    redirects:
                    - protected: false
                      redirect_code: 301
                      request_hostname: example.com.
                      request_path: /
                      request_protocol: http
                      target_hostname: example.com
                      target_path: /
                      target_protocol: https
                    updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/DomainForwardSetResponse'
          description: Domain forward protocol set created successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_ALREADY_EXISTS
                detail: Domain forward already exists for Additional error context.
                status: 409
                title: Domain Forward Error
                type: domain-forward-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create domain forward set
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
  /v1/domain-forwards/{hostname}/disable:
    patch:
      description: Disables domain forwarding by removing DNS records. The domain
        forward configuration is preserved but disabled.
      operationId: disable_domain_forward_v1_domain_forwards__hostname__disable_patch
      parameters:
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Domain forward disabled successfully. DNS records have been
            removed but configuration is preserved.
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Disable domain forward
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
  /v1/domain-forwards/{hostname}/enable:
    patch:
      description: Enables domain forwarding by creating necessary DNS records
      operationId: enable_domain_forward_v1_domain_forwards__hostname__enable_patch
      parameters:
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Domain forward enabled successfully. DNS records have been
            created.
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Enable domain forward
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
  /v1/domain-forwards/{hostname}/{protocol}:
    delete:
      description: Deletes a domain forward set for a specific protocol (HTTP or HTTPS).
      operationId: delete_domain_forward_set_v1_domain_forwards__hostname___protocol__delete
      parameters:
      - in: path
        name: protocol
        required: true
        schema:
          $ref: '#/components/schemas/HttpProtocol'
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Domain forward protocol set deleted successfully. No content
            returned.
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete domain forward set
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:delete
    get:
      description: Retrieves all redirects for a specific protocol (HTTP or HTTPS)
        for the specified hostname
      operationId: get_domain_forward_set_v1_domain_forwards__hostname___protocol__get
      parameters:
      - in: path
        name: protocol
        required: true
        schema:
          $ref: '#/components/schemas/HttpProtocol'
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                http_protocol_set:
                  description: Domain forward set containing HTTP protocol redirects
                  summary: HTTP protocol set
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    hostname: example.com.
                    protocol: http
                    redirects:
                    - protected: false
                      redirect_code: 301
                      request_hostname: example.com.
                      request_path: /
                      request_protocol: http
                      target_hostname: example.com
                      target_path: /
                      target_protocol: https
                    updated_on: '2025-02-20T10:30:45Z'
                https_protocol_set:
                  description: Domain forward set containing HTTPS protocol redirects
                  summary: HTTPS protocol set
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    hostname: example.com.
                    protocol: https
                    redirects:
                    - protected: false
                      redirect_code: 302
                      request_hostname: example.com.
                      request_path: /
                      request_protocol: https
                      target_hostname: www.example.com
                      target_path: /
                      target_protocol: https
                    updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/DomainForwardSetResponse'
          description: Domain forward set retrieved successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get domain forward set
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:read
    put:
      description: Updates an existing domain forward set for a specific protocol
        (HTTP or HTTPS). All existing redirects for this protocol are replaced with
        the provided redirects. Raises an error if the set does not exist.
      operationId: update_domain_forward_set_v1_domain_forwards__hostname___protocol__put
      parameters:
      - in: path
        name: protocol
        required: true
        schema:
          $ref: '#/components/schemas/HttpProtocol'
      - description: Hostname
        in: path
        name: hostname
        required: true
        schema:
          description: Hostname
          title: Hostname
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainForwardSetRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              examples:
                updated_protocol_set:
                  description: Updated domain forward protocol set with new redirect
                    configuration
                  summary: Protocol set updated
                  value:
                    created_on: '2025-02-20T10:30:45Z'
                    hostname: example.com.
                    protocol: https
                    redirects:
                    - protected: false
                      redirect_code: 302
                      request_hostname: example.com.
                      request_path: /
                      request_protocol: https
                      target_hostname: www.example.com
                      target_path: /
                      target_protocol: https
                    updated_on: '2025-02-20T10:30:45Z'
              schema:
                $ref: '#/components/schemas/DomainForwardSetResponse'
          description: Domain forward protocol set updated successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_FORWARD_NOT_EXISTS
                detail: Domain forward not found for Additional error context.
                status: 404
                title: Domain Forward Error
                type: domain-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update domain forward set
      tags:
      - domain_forward
      x-required-permissions:
      - domain_forwards:manage
  /v1/domain-search/suggest:
    get:
      description: "Get a list of domain suggestions based on a search query.\n\n\
        Suggestions are generated and ranked by relevance rather than enumerated from\
        \ a fixed list, so the\nresults depend on the shape of `query`:\n\n- **Keyword\
        \ or phrase** (e.g. `bluewidgets`) \u2014 every result is a generated name,\
        \ and its `available`\n  flag is best-effort.\n- **Full domain name** (e.g.\
        \ `bluewidgets.de`) \u2014 the queried domain is always returned as the first\n\
        \  result, with availability checked directly against the registry.\n\nUse\
        \ a full domain name, or `GET /v1/availability`, whenever you need a definitive\
        \ answer about a\nspecific domain."
      operationId: suggest_v1_domain_search_suggest_get
      parameters:
      - description: The primary keyword or phrase for the domain search. A full domain
          name is always returned as the first result, with registry-checked availability.
        in: query
        name: query
        required: true
        schema:
          description: The primary keyword or phrase for the domain search. A full
            domain name is always returned as the first result, with registry-checked
            availability.
          title: Query
          type: string
      - description: 'Restricts results to these TLDs. This is a filter, not a guarantee:
          suggestions are ranked by relevance across the whole requested set, so a
          listed TLD may be absent from the results even when available names exist
          in it, and raising `limit` does not change that. To guarantee a TLD is represented,
          query it on its own.'
        examples:
          list:
            summary: A list of TLDs
            value:
            - com
            - net
        in: query
        name: tlds
        required: false
        schema:
          anyOf:
          - items:
              pattern: ^[a-zA-Z0-9]+(?:[.-]+[a-zA-Z0-9]+)*$
              type: string
            type: array
          - type: 'null'
          description: 'Restricts results to these TLDs. This is a filter, not a guarantee:
            suggestions are ranked by relevance across the whole requested set, so
            a listed TLD may be absent from the results even when available names
            exist in it, and raising `limit` does not change that. To guarantee a
            TLD is represented, query it on its own.'
          title: Tlds
      - description: The maximum number of domain suggestions to return
        in: query
        name: limit
        required: false
        schema:
          anyOf:
          - maximum: 100
            minimum: 1
            type: integer
          - type: 'null'
          description: The maximum number of domain suggestions to return
          title: Limit
      - description: Whether to include premium domains in the suggestions
        in: query
        name: premium
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Whether to include premium domains in the suggestions
          title: Premium
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainSearchResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_SEARCH_PROVIDER
                detail: Additional error context.
                status: 502
                title: Domain Search Error
                type: domain-search-provider
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Gateway
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Suggest domains
      tags:
      - domain_search
  /v1/domains:
    get:
      description: Retrieves a paginated list of all active domains.
      operationId: get_domains_v1_domains_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/DomainSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - description: Filter by status tag types. Can be specified multiple times.
        in: query
        name: status_tags
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/StatusTagType'
            type: array
          - type: 'null'
          description: Filter by status tag types. Can be specified multiple times.
          title: Status Tags
      - in: query
        name: status_tag_mode
        required: false
        schema:
          $ref: '#/components/schemas/TagFilterMode'
          default: match_any
      - description: Filter by user tag IDs. Can be specified multiple times.
        in: query
        name: tag_ids
        required: false
        schema:
          anyOf:
          - items:
              examples:
              - tag_01h45ytscbebyvny4gc8cr8ma2
              format: typeid
              pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
              type: string
              x-typeid-prefix: tag
            type: array
          - type: 'null'
          description: Filter by user tag IDs. Can be specified multiple times.
          title: Tag Ids
      - in: query
        name: tag_mode
        required: false
        schema:
          $ref: '#/components/schemas/TagFilterMode'
          default: match_any
      - in: query
        name: name
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - description: Filter by top-level domain (e.g., 'com', 'org'). Can be specified
          multiple times (union of all provided values).
        in: query
        name: tld
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by top-level domain (e.g., 'com', 'org'). Can be specified
            multiple times (union of all provided values).
          title: Tld
      - in: query
        name: sld
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Sld
      - in: query
        name: nameserver
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Nameserver
      - in: query
        name: transfer_lock
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Transfer Lock
      - in: query
        name: read_only
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Read Only
      - in: query
        name: is_premium
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Premium
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - in: query
        name: updated_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Updated After
      - in: query
        name: updated_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Updated Before
      - in: query
        name: expires_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Expires After
      - in: query
        name: expires_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Expires Before
      - in: query
        name: expires_in_30_days
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Expires In 30 Days
      - in: query
        name: expires_in_60_days
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Expires In 60 Days
      - in: query
        name: expires_in_90_days
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Expires In 90 Days
      - in: query
        name: registered_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Registered After
      - in: query
        name: registered_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Registered Before
      - in: query
        name: transferred_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Transferred After
      - in: query
        name: transferred_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Transferred Before
      - description: Filter domains by registry status. Can be specified multiple
          times (union of all provided values).
        in: query
        name: registry_statuses
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter domains by registry status. Can be specified multiple
            times (union of all provided values).
          title: Registry Statuses
      - description: Filter domains held at an external registrar by the connected
          registrar credential they were synced from. Can be specified multiple times
          (union of all provided values); combined with `registrar`, both must match.
          Matches exactly the domains whose `connected_account` field carries the
          id, so domains OpusDNS sponsors never match.
        in: query
        name: registrar_credential_id
        required: false
        schema:
          anyOf:
          - items:
              examples:
              - registrar_credential_01h45ytscbebyvny4gc8cr8ma2
              format: typeid
              pattern: ^registrar_credential_[0-7][0-9a-hjkmnpq-tv-z]{25}$
              type: string
              x-typeid-prefix: registrar_credential
            type: array
          - type: 'null'
          description: Filter domains held at an external registrar by the connected
            registrar credential they were synced from. Can be specified multiple
            times (union of all provided values); combined with `registrar`, both
            must match. Matches exactly the domains whose `connected_account` field
            carries the id, so domains OpusDNS sponsors never match.
          title: Registrar Credential Id
      - description: Filter domains held at an external registrar by that registrar.
          Can be specified multiple times (union of all provided values); combined
          with `registrar_credential_id`, both must match. Matches exactly the domains
          whose `connected_account` field carries the registrar, so domains OpusDNS
          sponsors never match.
        in: query
        name: registrar
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/Registrar'
            type: array
          - type: 'null'
          description: Filter domains held at an external registrar by that registrar.
            Can be specified multiple times (union of all provided values); combined
            with `registrar_credential_id`, both must match. Matches exactly the domains
            whose `connected_account` field carries the registrar, so domains OpusDNS
            sponsors never match.
          title: Registrar
      - description: Extra data to include in each result. `tags` populates the `tags`
          (user tags) and `status_tags` fields, which are otherwise null; filtering
          by `tag_ids` or `status_tags` alone does not populate them. `connected_account`
          populates the `connected_account` field for domains held at an external
          registrar.
        in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainListIncludeField'
            type: array
          - type: 'null'
          description: Extra data to include in each result. `tags` populates the
            `tags` (user tags) and `status_tags` fields, which are otherwise null;
            filtering by `tag_ids` or `status_tags` alone does not populate them.
            `connected_account` populates the `connected_account` field for domains
            held at an external registrar.
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_DomainResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all domains
      tags:
      - domain
      x-required-permissions:
      - domains:read
    post:
      description: 'Registers a new domain.


        - **Premium domains** - when the registry classifies the domain as premium,
        an `expected_price` must be supplied to confirm the non-standard price returned
        by the availability check. See the [Premium domains](/products/domains/premium)
        guide for background on how premium domains are priced and registered.

        - **Trademark claims (TMCH)** - when the TLD is in its claims phase and the
        domain matches a trademark in the Trademark Clearinghouse, a `claims_notice_acceptance_hash`
        must be supplied to acknowledge the corresponding claims notice. See the [Trademarked
        domains](/products/domains/trademarked-domains) guide for the full workflow.'
      operationId: create_domain_v1_domains_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_PREMIUM_PRICE_NOT_APPLICABLE
                    detail: 'Domain is not premium-priced; expected_price must not
                      be supplied. Provided price: 100.00.'
                    domain_name: example.com
                    expected_price: '100.00'
                    status: 400
                    title: Domain Management Error
                    type: premium-price-not-applicable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              examples:
                Claims Error:
                  value:
                    code: ERROR_CLAIMS_NOTICE_NOT_FOUND
                    detail: 'Claims notice not found for claims key: Additional error
                      context.'
                    status: 404
                    title: Claims Error
                    type: claims-notice-not-found
                Contact Management Error:
                  value:
                    code: ERROR_CONTACT_NOT_FOUND
                    contact_id: Additional error context.
                    detail: Contact not found
                    status: 404
                    title: Contact Management Error
                    type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    actual_price: '125.00'
                    code: ERROR_PREMIUM_PRICE_MISMATCH
                    detail: 'Premium domain requires price confirmation. Provided
                      price: 100.00, correct price: 125.00. Use the domain check endpoint
                      to get current premium pricing.'
                    domain_name: premium.domain
                    expected_price: '100.00'
                    status: 409
                    title: Domain Management Error
                    type: premium-price-mismatch
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_CLAIMS_NOTICE_HASH_MISMATCH
                detail: The provided claims notice acceptance hash does not match
                domain_name: Additional error context.
                status: 422
                title: Domain Management Error
                type: claims-notice-hash-mismatch
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_CLAIMS_SERVICE_ERROR
                detail: Additional error context.
                status: 503
                title: Claims Error
                type: claims-service
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a domain
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/check:
    get:
      description: 'Performs a real-time check against the authoritative registry
        for each domain and returns availability plus any registry-specific metadata
        needed to register it.


        For each domain the response includes:

        - **Availability** - whether the domain can be registered, and the registry''s
        reason if not.

        - **Premium status and pricing** - whether the domain is classified as premium
        by the registry, and if so, the price per action (create / renew / transfer
        / restore). See the [Premium domains](/products/domains/premium) guide for
        background on how premium domains are priced and registered.

        - **Trademark claims (TMCH)** - when the TLD is in its claims phase and the
        domain matches a trademark in the Trademark Clearinghouse, a `claims_key`
        is returned. See the [Trademarked domains](/products/domains/trademarked-domains)
        guide for the full workflow.


        Domains are queried in parallel, grouped by registry connection. Availability
        and metadata reflect the registry''s state at the moment of the call and are
        not cached.'
      operationId: epp_check_domain_v1_domains_check_get
      parameters:
      - description: '

          One or more fully-qualified domain names to check at the registry.


          Each domain is checked for availability and, when applicable, enriched with

          trademark claims information and premium pricing. The list of domains may

          include a mix of TLDs.

          '
        examples:
          list:
            summary: A list of domain names to check
            value:
            - example.com
            - example.org
        in: query
        name: domains
        required: true
        schema:
          description: '

            One or more fully-qualified domain names to check at the registry.


            Each domain is checked for availability and, when applicable, enriched
            with

            trademark claims information and premium pricing. The list of domains
            may

            include a mix of TLDs.

            '
          items:
            maxLength: 1024
            type: string
          maxItems: 500
          title: Domains
          type: array
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainCheckResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Check domain availability and registration metadata
      tags:
      - domain
      x-required-permissions:
      - domains:read
  /v1/domains/claims-notices:
    post:
      description: Retrieves the trademark claims notice for a `claims_key` returned
        during a domain availability check. The response contains a `claims_notice_acceptance_hash`
        to acknowledge the notice when registering the domain, a ready-to-display
        `rendered_html`, and the structured fields needed to render a custom notice.
        See the [Trademarked domains](/products/domains/trademarked-domains) guide
        for the full workflow.
      operationId: get_claims_notices_v1_domains_claims_notices_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClaimsNoticesRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClaimsNoticesResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CLAIMS_NOTICE_NOT_FOUND
                detail: 'Claims notice not found for claims key: Additional error
                  context.'
                status: 404
                title: Claims Error
                type: claims-notice-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_CLAIMS_SERVICE_ERROR
                detail: Additional error context.
                status: 503
                title: Claims Error
                type: claims-service
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve claims notices from claim keys
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/statistics:
    get:
      description: 'Counts the domains that moved in or out of your organization''s
        portfolio in a window of whole days, bucketed by the requested granularity:
        creates (new registrations), inbound transfers, deletes, outbound transfers,
        renewals and restores, plus `net` (created and transferred in, minus deleted
        and transferred out).


        Counts cover your organization and its sub-organizations, like the domain
        summary; `breakdown=organization` shows how they divide between them. A create
        is counted on the day OpusDNS took the order and a transfer on the day it
        completed, so domains that have since been deleted still appear in the window
        they were acquired in. Imported domains count as creates on the day they were
        imported. Renewals and restores are counted once per day a domain was renewed
        or restored, so a domain renewed in two different months counts in both. Domains
        held at a connected external registrar are not included.


        Every bucket the window touches is present, so the series can be charted as
        is. A bucket marked `partial` reaches outside the window and covers only part
        of its span.


        These counts are read from the domain event log, which begins later than the
        domains themselves. `data_available_from` reports the oldest event it holds:
        a window reaching further back is empty before that instant rather than genuinely
        zero.'
      operationId: get_domain_statistics_v1_domains_statistics_get
      parameters:
      - in: query
        name: start_date
        required: true
        schema:
          format: date
          title: Start Date
          type: string
      - in: query
        name: end_date
        required: true
        schema:
          format: date
          title: End Date
          type: string
      - in: query
        name: granularity
        required: false
        schema:
          $ref: '#/components/schemas/UsageGranularity'
          default: day
      - in: query
        name: tld
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Tld
      - in: query
        name: breakdown
        required: false
        schema:
          $ref: '#/components/schemas/DomainStatisticsBreakdown'
          default: none
      - in: query
        name: breakdown_limit
        required: false
        schema:
          default: 10
          maximum: 50
          minimum: 1
          title: Breakdown Limit
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainStatisticsResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get domain statistics
      tags:
      - domain
      x-required-permissions:
      - domains:read
  /v1/domains/summary:
    get:
      description: Retrieves a summary of domains including counts by status, TLD,
        and expiration timeframes
      operationId: get_domain_summary_v1_domains_summary_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainSummaryResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get domain summary
      tags:
      - domain
      x-required-permissions:
      - domains:read
  /v1/domains/tld-specific/at/{domain_reference}/withdraw:
    post:
      operationId: withdraw_domain_v1_domains_tld_specific_at__domain_reference__withdraw_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainWithdrawRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainWithdrawResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Withdraw a nic.at domain
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/be/{domain_reference}/auth_code/request:
    post:
      operationId: request_auth_code_v1_domains_tld_specific_be__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__be__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Requests your auth code directly from DNS Belgium (registry)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/cymru/{domain_reference}/auth_code/request:
    post:
      description: Nominet expires a Transfer Authorisation Code after 14 days or
        on use in a transfer, and enforces complexity requirements on it. This endpoint
        mints a compliant code, sets it through a `domain:update` and returns it,
        invalidating any previous one. It is the only way to change a `.cymru` auth
        code.
      operationId: request_auth_code_v1_domains_tld_specific_cymru__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__cymru__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Generates a fresh auth code at Nominet (.cymru)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/cz/{domain_reference}/auth_code/request:
    post:
      operationId: request_auth_code_v1_domains_tld_specific_cz__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__cz__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Requests your auth code directly from CZ.NIC (registry)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/de/{domain_reference}/transit:
    post:
      operationId: transit_domain_v1_domains_tld_specific_de__domain_reference__transit_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainTransitRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainTransitResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Transit a DENIC domain
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/dk/{domain_reference}/auth_code/request:
    post:
      operationId: request_auth_code_v1_domains_tld_specific_dk__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__dk__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Requests your auth code directly from Punktum dk (registry)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/eu/{domain_reference}/auth_code/request:
    post:
      operationId: request_auth_code_v1_domains_tld_specific_eu__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__eu__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Requests your auth code directly from EURid (registry)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/lt/{domain_reference}/auth_code/request:
    post:
      operationId: request_auth_code_v1_domains_tld_specific_lt__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__lt__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Requests your auth code directly from DOMREG (registry)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/no/applicant-declaration:
    get:
      operationId: get_norid_declaration_by_token_v1_domains_tld_specific_no_applicant_declaration_get
      parameters:
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NorIdDeclarationResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_NOT_FOUND
                detail: Additional error context.
                status: 404
                title: Domain Management Error
                type: nor-id-declaration-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Retrieve the .no applicant declaration by token
      tags:
      - domain
      - domain_tld_specific
    put:
      description: Records the applicant declaration signature (`acceptName` + `acceptDate`)
        and queues the actual registration at Norid.
      operationId: confirm_norid_declaration_by_token_v1_domains_tld_specific_no_applicant_declaration_put
      parameters:
      - in: query
        name: token
        required: true
        schema:
          title: Token
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NorIdDeclarationConfirmRequest'
        required: true
      responses:
        '204':
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_EXPIRED
                detail: The applicant declaration request has expired
                domain_name: Additional error context.
                status: 400
                title: Domain Management Error
                type: nor-id-declaration-expired
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_NOT_FOUND
                detail: Additional error context.
                status: 404
                title: Domain Management Error
                type: nor-id-declaration-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_STATE
                detail: The applicant declaration is not in a valid state
                domain_name: Additional error context.
                status: 409
                title: Domain Management Error
                type: nor-id-declaration-state
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Sign the .no applicant declaration with token
      tags:
      - domain
      - domain_tld_specific
  /v1/domains/tld-specific/no/{domain_reference}/applicant-declaration:
    post:
      description: Records the applicant declaration signature collected by the registrar
        (e.g. via Norid's own signing tool) and queues the actual registration at
        Norid, without the registrant email round-trip.
      operationId: submit_norid_declaration_v1_domains_tld_specific_no__domain_reference__applicant_declaration_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NorIdResellerDeclarationRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NorIdDeclarationResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_EXPIRED
                detail: The applicant declaration request has expired
                domain_name: Additional error context.
                status: 400
                title: Domain Management Error
                type: nor-id-declaration-expired
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_NORID_DECLARATION_NOT_FOUND
                    detail: Additional error context.
                    status: 404
                    title: Domain Management Error
                    type: nor-id-declaration-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_STATE
                detail: The applicant declaration is not in a valid state
                domain_name: Additional error context.
                status: 409
                title: Domain Management Error
                type: nor-id-declaration-state
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Submit the .no applicant declaration on behalf of the subscriber
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/no/{domain_reference}/resend-declaration-email:
    post:
      operationId: resend_norid_declaration_email_v1_domains_tld_specific_no__domain_reference__resend_declaration_email_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_NORID_DECLARATION_NOT_FOUND
                    detail: Additional error context.
                    status: 404
                    title: Domain Management Error
                    type: nor-id-declaration-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_NORID_DECLARATION_STATE
                detail: The applicant declaration is not in a valid state
                domain_name: Additional error context.
                status: 409
                title: Domain Management Error
                type: nor-id-declaration-state
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Resend the .no applicant declaration email to the registrant
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/nu/{domain_reference}/auth_code/request:
    post:
      description: '`.nu` auth codes are owned by the registry: registrars can only
        send the literal `auto`, and the generated code is returned in the `iis:updData`
        extension of a `domain:update`. This endpoint runs that update and stores
        the fresh code, invalidating any previous one.'
      operationId: request_auth_code_v1_domains_tld_specific_nu__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__nu__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Generates a fresh auth code at Internetstiftelsen (.nu)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/se/{domain_reference}/auth_code/request:
    post:
      description: '`.se` auth codes are owned by the registry: registrars can only
        send the literal `auto`, and the generated code is returned in the `iis:updData`
        extension of a `domain:update`. This endpoint runs that update and stores
        the fresh code, invalidating any previous one.'
      operationId: request_auth_code_v1_domains_tld_specific_se__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__se__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Generates a fresh auth code at Internetstiftelsen (.se)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/tld-specific/wales/{domain_reference}/auth_code/request:
    post:
      description: Nominet expires a Transfer Authorisation Code after 14 days or
        on use in a transfer, and enforces complexity requirements on it. This endpoint
        mints a compliant code, sets it through a `domain:update` and returns it,
        invalidating any previous one. It is the only way to change a `.wales` auth
        code.
      operationId: request_auth_code_v1_domains_tld_specific_wales__domain_reference__auth_code_request_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api__domain__tld_specific__wales__models__RequestAuthcodeResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Generates a fresh auth code at Nominet (.wales)
      tags:
      - domain
      - domain_tld_specific
      x-required-permissions:
      - domains:manage
  /v1/domains/transfer:
    post:
      description: 'Start the transfer process for a domain <br>

        The domain will be in state `pending_transfer` until the transfer is completed.

        This process can take up to 5 days, until the transfer is approved'
      operationId: transfer_domain_v1_domains_transfer_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainTransferIn'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_TLD_NOT_AVAILABLE
                    detail: This TLD is not available
                    status: 400
                    title: Domain Management Error
                    tld: Additional error context.
                    type: domain-tld-not-available
                Domain Transfer AuthInfo Malformed:
                  value:
                    code: ERROR_DOMAIN_TRANSFER_AUTHINFO_MALFORMED
                    detail: There was an error transferring the domain
                    domain_name: Additional error context.
                    reason: 'Domain transfer failed: AuthInfo is missing or malformed'
                    status: 400
                    title: Domain Transfer AuthInfo Malformed
                    type: domain-transfer-auth-info-malformed
                Domain Transfer Error:
                  value:
                    code: ERROR_DOMAIN_TRANSFER
                    detail: There was an error transferring the domain
                    domain_name: Additional error context.
                    reason: An unspecified error occurred
                    status: 400
                    title: Domain Transfer Error
                    type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER_INVALID_AUTH_CODE
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: Domain transfer failed, invalid auth code provided
                status: 403
                title: Domain Transfer Error
                type: domain-transfer-invalid-auth
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_CONTACT_NOT_FOUND
                contact_id: Additional error context.
                detail: Contact not found
                status: 404
                title: Contact Management Error
                type: contact-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_DOMAIN_EXISTS
                    detail: Domain already exists
                    domain_name: Additional error context.
                    status: 409
                    title: Domain Management Error
                    type: domain-exists
                Domain Transfer Already Owned:
                  value:
                    code: ERROR_DOMAIN_TRANSFER_ALREADY_OWNED
                    detail: There was an error transferring the domain
                    domain_name: Additional error context.
                    reason: Domain is already managed by your registry account; transfer
                      is not applicable
                    status: 409
                    title: Domain Transfer Already Owned
                    type: domain-transfer-already-owned
                Domain Transfer Error:
                  value:
                    code: ERROR_DOMAIN_TRANSFER_NOT_ALLOWED
                    detail: There was an error transferring the domain
                    domain_name: Additional error context.
                    reason: Domain transfer was rejected by the registry
                    status: 409
                    title: Domain Transfer Error
                    type: domain-transfer-rejected
                Domain Transfer Internal Not Supported:
                  value:
                    code: ERROR_DOMAIN_TRANSFER_INTERNAL_NOT_SUPPORTED
                    detail: There was an error transferring the domain
                    domain_name: Additional error context.
                    reason: Domain is already managed by this registrar; internal
                      transfers are not supported
                    status: 409
                    title: Domain Transfer Internal Not Supported
                    type: domain-transfer-internal-not-supported
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_POLICY_VALIDATION
                detail: Additional error context.
                status: 422
                title: Policy Validation Error
                type: policy-validation-error
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Transfer a domain
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}:
    delete:
      description: 'Initiates the deletion process for a domain. The domain will be
        marked for deletion

        and will enter a redemption period during which it may be restored.'
      operationId: delete_domain_v1_domains__domain_reference__delete
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_DELETE_PROHIBITED
                detail: 'Domain deletion is prohibited due to current status: '
                domain_name: Additional error context.
                prohibiting_statuses: []
                status: 409
                title: Domain Management Error
                type: domain-delete-prohibited
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a domain
      tags:
      - domain
      x-required-permissions:
      - domains:delete
    get:
      description: Retrieves a single active domain by either its name or id.
      operationId: get_domain_v1_domains__domain_reference__get
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - description: Extra data to include in the response. `tags` populates the `tags`
          and `status_tags` fields, which are otherwise null. `renewal_price` resolves
          the domain's renewal price. `connected_account` populates the `connected_account`
          field for domains held at an external registrar.
        in: query
        name: include
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/DomainIncludeField'
            type: array
          - type: 'null'
          description: Extra data to include in the response. `tags` populates the
            `tags` and `status_tags` fields, which are otherwise null. `renewal_price`
            resolves the domain's renewal price. `connected_account` populates the
            `connected_account` field for domains held at an external registrar.
          title: Include
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve a domain
      tags:
      - domain
      x-required-permissions:
      - domains:read
    patch:
      description: 'Updates various attributes of an existing domain. Only the fields
        provided in the request

        will be updated; all other fields will remain unchanged. <br>

        Providing `clientTransferProhibited` as a status will set the `transfer_lock`
        property. <br>

        `transfer_lock` is read-only and cannot be set here: send it in the request
        body and it is

        ignored, leaving the lock unchanged. Use `status_changes` to release a lock
        before a

        transfer out, for example

        `{"status_changes": {"remove": ["clientTransferProhibited"]}}`.'
      operationId: update_domain_v1_domains__domain_reference__patch
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              examples:
                Contact Management Error:
                  value:
                    code: ERROR_CONTACT_NOT_FOUND
                    contact_id: Additional error context.
                    detail: Contact not found
                    status: 404
                    title: Contact Management Error
                    type: contact-not-found
                Domain Management Error:
                  value:
                    code: ERROR_DOMAIN_NOT_FOUND
                    detail: Domain not found
                    domain_name: Additional error context.
                    status: 404
                    title: Domain Management Error
                    type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a domain
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/dnssec:
    delete:
      description: Removes all DNSSEC data for a domain
      operationId: delete_dnssec_v1_domains__domain_reference__dnssec_delete
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete DNSSEC data
      tags:
      - domain
      x-required-permissions:
      - domains:manage
    get:
      description: Fetches all DNSSEC records associated with the specified domain.
      operationId: get_dnssec_v1_domains__domain_reference__dnssec_get
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainDnssecDataResponse'
                title: Response Get Dnssec V1 Domains  Domain Reference  Dnssec Get
                type: array
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve DNSSEC data
      tags:
      - domain
      x-required-permissions:
      - domains:read
    put:
      description: Replaces all existing DNSSEC records for the domain with the provided
        records.
      operationId: create_or_update_dnssec_v1_domains__domain_reference__dnssec_put
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/DomainDnssecDataCreate'
              title: Dnssec Data
              type: array
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainDnssecDataResponse'
                title: Response Create Or Update Dnssec V1 Domains  Domain Reference  Dnssec
                  Put
                type: array
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              examples:
                Domain Management Error:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_NOT_SUPPORTED
                    detail: DNSSEC not supported for this TLD
                    domain_name: Additional error context.
                    status: 422
                    title: Domain Management Error
                    type: domain-dnssec-not-supported
                Policy Validation Error:
                  value:
                    code: ERROR_POLICY_VALIDATION
                    detail: Additional error context.
                    status: 422
                    title: Policy Validation Error
                    type: policy-validation-error
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update DNSSEC data
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/dnssec/disable:
    post:
      operationId: disable_and_unpublish_dnssec_records_v1_domains__domain_reference__dnssec_disable_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Disable DNSSEC for domains using our nameservers
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/dnssec/enable:
    post:
      operationId: enable_and_publish_dnssec_records_v1_domains__domain_reference__dnssec_enable_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainDnssecDataResponse'
                title: Response Enable And Publish Dnssec Records V1 Domains  Domain
                  Reference  Dnssec Enable Post
                type: array
          description: Successful Response
        '202':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainDnssecDataResponse'
                title: Response 202 Enable And Publish Dnssec Records V1 Domains  Domain
                  Reference  Dnssec Enable Post
                type: array
          description: The zone is signed, but the registry has not accepted the DS
            record yet because it could not see the new key material on the public
            nameservers. A background job resubmits it with backoff, so the response
            carries no records. Until it succeeds the zone resolves as unsigned; if
            the job gives up, DNSSEC is switched back off and a domain modification
            failure event carries the registry's diagnostic.
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              examples:
                DNSSEC Enable Superseded:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_ENABLE_SUPERSEDED
                    detail: DNSSEC was disabled for 'example.com.' while it was being
                      enabled; the DS record was withdrawn and DNSSEC is off
                    status: 409
                    title: DNSSEC Enable Superseded
                    type: domain-dnssec-enable-superseded
                    zone_name: example.com.
                DNSSEC Zone Records Unavailable:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_ZONE_RECORDS_UNAVAILABLE
                    detail: DNS zone 'example.com.' is DNSSEC-enabled but has no usable
                      DS records to publish
                    status: 409
                    title: DNSSEC Zone Records Unavailable
                    type: domain-dnssec-zone-records-unavailable
                    zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              examples:
                DNSSEC Digest Policy Error:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_DIGEST_POLICY
                    detail: The DNS zone publishes DS digest type(s) [4], but only
                      digest type(s) [2] can be submitted for TLD 'it'
                    domain_name: example.it
                    status: 422
                    title: DNSSEC Digest Policy Error
                    tld: it
                    type: domain-dnssec-digest-policy
                Domain Management Error:
                  value:
                    code: ERROR_DOMAIN_DNSSEC_NOT_SUPPORTED
                    detail: DNSSEC not supported for this TLD
                    domain_name: Additional error context.
                    status: 422
                    title: Domain Management Error
                    type: domain-dnssec-not-supported
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Enable DNSSEC for domains using our nameservers
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/renew:
    post:
      description: 'Extends the registration period of an existing domain. The renewal
        period is added

        to the current expiration date of the domain.'
      operationId: renew_domain_v1_domains__domain_reference__renew_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainRenewRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainRenewResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Renew a domain
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/restore:
    post:
      operationId: restore_domain_v1_domains__domain_reference__restore_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DomainRestoreRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainRestoreResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Restore an eligible domain (during redemption period)
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/transfer:
    delete:
      description: This will cancel the in-progress domain transfer and delete the
        domain object
      operationId: cancel_domain_transfer_v1_domains__domain_reference__transfer_delete
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Cancel a domain transfer
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/domains/{domain_reference}/transfer/outbound:
    post:
      operationId: resolve_outbound_transfer_v1_domains__domain_reference__transfer_outbound_post
      parameters:
      - in: path
        name: domain_reference
        required: true
        schema:
          anyOf:
          - examples:
            - domain_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^domain_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: domain
          - type: string
          title: Domain Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OutboundTransferRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutboundTransferResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_TRANSFER
                detail: There was an error transferring the domain
                domain_name: Additional error context.
                reason: An unspecified error occurred
                status: 400
                title: Domain Transfer Error
                type: domain-transfer
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_DOMAIN_NOT_FOUND
                detail: Domain not found
                domain_name: Additional error context.
                status: 404
                title: Domain Management Error
                type: domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_REGISTRY_POLICY
                detail: The registry rejected the request due to a policy violation
                domain_name: Additional error context.
                status: 422
                title: Registry Policy Error
                type: domain-registry-policy
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Approve or reject an outbound domain transfer
      tags:
      - domain
      x-required-permissions:
      - domains:manage
  /v1/email-forwards:
    get:
      description: Retrieves a paginated list of all email forwards for the organization.
      operationId: list_email_forwards_v1_email_forwards_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: enabled
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Enabled
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/EmailForwardSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_EmailForwardResponse_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all email forwards
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:read
    post:
      description: 'Creates an email forward configuration with optional aliases.
        Can be created enabled or disabled (default: disabled). Includes created_on
        and updated_on timestamps.'
      operationId: create_email_forward_v1_email_forwards_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              catch_all:
                description: Use '*' as alias to forward all unmatched emails for
                  the hostname.
                summary: Catch-all email forwarding
                value:
                  aliases:
                  - alias: '*'
                    forward_to:
                    - inbox@example.net
                  enabled: true
                  hostname: example.com.
              email_forward:
                description: Create email forwarding with named aliases for a hostname.
                summary: Standard email forwarding setup
                value:
                  aliases:
                  - alias: sales
                    forward_to:
                    - sales-team@example.net
                  - alias: support
                    forward_to:
                    - support@example.net
                    - oncall@example.net
                  enabled: false
                  hostname: mail.example.com.
            schema:
              $ref: '#/components/schemas/EmailForwardCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                catch_all_email_forwarding_response:
                  description: Response when creating email forwarding with a catch-all
                    alias.
                  summary: Response for catch-all email forwarding setup
                  value:
                    aliases:
                    - alias: '*'
                      email_forward_alias_id: email_forward_alias_01jx0000000000000000000003
                      forward_to:
                      - inbox@example.net
                    created_on: '2025-11-14T09:01:38Z'
                    email_forward_id: email_forward_01jx0000000000000000000002
                    enabled: true
                    hostname: example.com.
                    updated_on: '2025-11-14T09:01:38Z'
                standard_email_forwarding_response:
                  description: Response when creating email forwarding with named
                    aliases.
                  summary: Response for standard email forwarding setup
                  value:
                    aliases:
                    - alias: sales
                      email_forward_alias_id: email_forward_alias_01jx0000000000000000000001
                      forward_to:
                      - sales-team@example.net
                    - alias: support
                      email_forward_alias_id: email_forward_alias_01jx0000000000000000000002
                      forward_to:
                      - support@example.net
                      - oncall@example.net
                    created_on: '2025-11-14T09:01:38Z'
                    email_forward_id: email_forward_01jx0000000000000000000001
                    enabled: false
                    hostname: mail.example.com.
                    updated_on: '2025-11-14T09:01:38Z'
              schema:
                $ref: '#/components/schemas/EmailForwardResponse'
          description: Email forwarding created successfully
        '400':
          content:
            application/problem+json:
              examples:
                email_forward_alias_rejected:
                  description: The detail states what is wrong with the alias. Correct
                    it and retry.
                  summary: An alias in the request was rejected
                  value:
                    code: ERROR_EMAIL_FORWARD_VALIDATION
                    detail: Alias cannot contain @
                    status: 400
                    title: Email Forward Error
                    type: email-forward-validation
                email_forward_domain_rejected:
                  description: The hostname could not be set up for email forwarding.
                    Contact support.
                  summary: Email forwarding could not be set up for the hostname
                  value:
                    code: ERROR_EMAIL_FORWARD_VALIDATION
                    detail: Email forwarding could not be set up for this domain.
                      Please contact support.
                    status: 400
                    title: Email Forward Error
                    type: email-forward-validation
              schema:
                $ref: '#/components/schemas/Problem'
          description: The hostname, or one of the aliases in the request, was rejected
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ZONE_NOT_FOUND
                detail: Zone not found
                status: 404
                title: DNS Error
                type: dns-zone-not-found
                zone_name: example.com.
              schema:
                $ref: '#/components/schemas/Problem'
          description: DNS zone was not found
        '409':
          content:
            application/problem+json:
              examples:
                email_forward_already_exists:
                  summary: A forward already exists for the hostname
                  value:
                    code: ERROR_EMAIL_FORWARD_ALREADY_EXISTS
                    detail: 'Email forward already exists for hostname: mail.example.com'
                    status: 409
                    title: Email Forward Error
                    type: email-forward-already-exists
                email_forward_limit_exceeded:
                  description: The limit defaults to a per-environment value and can
                    be raised or lowered per organization by support.
                  summary: The organization is at its email forward limit
                  value:
                    code: ERROR_EMAIL_FORWARD_LIMIT_EXCEEDED
                    detail: Email forward limit of 250 reached for this organization.
                      Delete an existing email forward or contact support to raise
                      the limit.
                    limit: 250
                    status: 409
                    title: Email Forward Error
                    type: email-forward-limit-exceeded
              schema:
                $ref: '#/components/schemas/Problem'
          description: Email forwarding configuration already exists, or the organization
            is at its email forward limit
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              examples:
                email_forward_capacity:
                  description: Nothing in the request needs changing. Contact support,
                    then retry.
                  summary: Email forwarding capacity is temporarily exhausted
                  value:
                    code: ERROR_EMAIL_FORWARD_CAPACITY
                    detail: Email forward management is temporarily unavailable. Existing
                      email forwards are not affected. Please contact support.
                    status: 503
                    title: Email Forward Error
                    type: email-forward-capacity
                email_forward_configuration:
                  description: The requested hostname was not the reason and needs
                    no change. Contact support, then retry.
                  summary: Email forwarding is temporarily misconfigured
                  value:
                    code: ERROR_EMAIL_FORWARD_CONFIGURATION
                    detail: Email forward management is temporarily unavailable. Existing
                      email forwards are not affected. Please contact support.
                    status: 503
                    title: Email Forward Error
                    type: email-forward-configuration
              schema:
                $ref: '#/components/schemas/Problem'
          description: Email forwarding is temporarily unavailable; the request itself
            is valid
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create email forward configuration
      tags:
      - email_forward
      x-required-permissions:
      - dns:manage
      - email_forwards:manage
  /v1/email-forwards/{email_forward_id}:
    delete:
      description: Permanently deletes the email forward configuration including all
        aliases. If enabled, automatically disables first (removes DNS records and
        unregisters from the email forwarding provider).
      operationId: delete_email_forward_v1_email_forwards__email_forward_id__delete
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete email forward configuration
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:delete
    get:
      description: Retrieves the email forward configuration for the specified email
        forward including all aliases
      operationId: get_email_forward_v1_email_forwards__email_forward_id__get
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailForwardResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_NOT_FOUND
                detail: 'Email forward not found for hostname: Additional error context.'
                status: 404
                title: Email Forward Error
                type: email-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get email forward configuration
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:read
  /v1/email-forwards/{email_forward_id}/aliases:
    post:
      description: Creates a new email forward alias for the specified email forward.
        Use '*' as the alias name to configure a catch-all alias that forwards all
        unmatched emails for the domain.
      operationId: create_email_forward_alias_v1_email_forwards__email_forward_id__aliases_post
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              catch_all_alias:
                description: Use '*' to configure a catch-all alias.
                summary: Catch-all alias
                value:
                  alias: '*'
                  forward_to:
                  - catchall@example.net
              named_alias:
                description: Create a regular alias for email forwarding.
                summary: Named alias
                value:
                  alias: support
                  forward_to:
                  - support@example.net
                  - oncall@example.net
            schema:
              $ref: '#/components/schemas/EmailForwardAliasCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                catch_all_alias_response:
                  description: Response when creating a catch-all alias.
                  summary: Response for catch-all alias
                  value:
                    alias: '*'
                    email_forward_alias_id: email_forward_alias_01jx0000000000000000000005
                    forward_to:
                    - catchall@example.net
                named_alias_response:
                  description: Response when creating a regular alias.
                  summary: Response for named alias
                  value:
                    alias: support
                    email_forward_alias_id: email_forward_alias_01jx0000000000000000000004
                    forward_to:
                    - support@example.net
                    - oncall@example.net
              schema:
                $ref: '#/components/schemas/EmailForwardAlias'
          description: Email forwarding alias created successfully
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_NOT_FOUND
                detail: 'Email forward not found for ID: email_forward_01jx0000000000000000000009'
                status: 404
                title: Email Forward Error
                type: email-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Email forwarding configuration was not found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_ALIAS_ALREADY_EXISTS
                detail: Alias already exists
                status: 409
                title: Email Forward Error
                type: email-forward-alias-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Email forwarding alias already exists
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create email forward alias
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:manage
  /v1/email-forwards/{email_forward_id}/aliases/{alias_id}:
    delete:
      description: Deletes a specific email forward alias specified by email_forward_alias_id
        for the specified email forward
      operationId: delete_email_forward_alias_v1_email_forwards__email_forward_id__aliases__alias_id__delete
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - in: path
        name: alias_id
        required: true
        schema:
          examples:
          - email_forward_alias_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_alias_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Alias Id
          type: string
          x-typeid-prefix: email_forward_alias
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_ALIAS_NOT_FOUND
                detail: Alias could not be found
                email_forward_id: Additional error context.
                status: 404
                title: Email Forward Error
                type: email-forward-alias-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete email forward alias
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:manage
    put:
      description: Updates the forward_to address for a specific email forward alias
        specified by email_forward_alias_id
      operationId: update_email_forward_alias_v1_email_forwards__email_forward_id__aliases__alias_id__put
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - in: path
        name: alias_id
        required: true
        schema:
          examples:
          - email_forward_alias_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_alias_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Alias Id
          type: string
          x-typeid-prefix: email_forward_alias
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailForwardAliasUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailForwardAlias'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_ALIAS_NOT_FOUND
                detail: Alias could not be found
                email_forward_id: Additional error context.
                status: 404
                title: Email Forward Error
                type: email-forward-alias-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update email forward alias
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:manage
  /v1/email-forwards/{email_forward_id}/disable:
    patch:
      description: Disables email forwarding by removing MX and SPF DNS records and
        unregistering the domain from the email forwarding provider. The email forward
        configuration is preserved but disabled.
      operationId: disable_email_forward_v1_email_forwards__email_forward_id__disable_patch
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_NOT_FOUND
                detail: 'Email forward not found for hostname: Additional error context.'
                status: 404
                title: Email Forward Error
                type: email-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Disable email forwarding
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:manage
  /v1/email-forwards/{email_forward_id}/enable:
    patch:
      description: Enables email forwarding by creating necessary MX and SPF DNS records
        and registering the domain with the email forwarding provider.
      operationId: enable_email_forward_v1_email_forwards__email_forward_id__enable_patch
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_NOT_FOUND
                detail: 'Email forward not found for hostname: Additional error context.'
                status: 404
                title: Email Forward Error
                type: email-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Enable email forwarding
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:manage
  /v1/email-forwards/{email_forward_id}/metrics:
    get:
      description: Retrieves metrics and statistics for a specific email forward,
        including delivery rates and status counts.
      operationId: get_email_forward_metrics_v1_email_forwards__email_forward_id__metrics_get
      parameters:
      - in: path
        name: email_forward_id
        required: true
        schema:
          examples:
          - email_forward_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^email_forward_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Email Forward Id
          type: string
          x-typeid-prefix: email_forward
      - in: query
        name: start_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Start Time
      - in: query
        name: end_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: End Time
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailForwardMetrics'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EMAIL_FORWARD_NOT_FOUND
                detail: 'Email forward not found for hostname: Additional error context.'
                status: 404
                title: Email Forward Error
                type: email-forward-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve email forward metrics
      tags:
      - email_forward
      x-required-permissions:
      - email_forwards:read
  /v1/events:
    get:
      description: Retrieves a paginated list of events for the organization
      operationId: get_events_v1_events_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/EventSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: object_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/EventObjectType'
          - type: 'null'
          title: Object Type
      - in: query
        name: object_id
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Object Id
      - in: query
        name: type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/EventType'
          - type: 'null'
          title: Type
      - in: query
        name: subtype
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/EventSubtype'
          - type: 'null'
          title: Subtype
      - in: query
        name: acknowledged
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Acknowledged
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_EventResponse_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get pending events
      tags:
      - event
      x-required-permissions:
      - events:read
  /v1/events/{event_id}:
    get:
      description: Get an event by its ID
      operationId: get_event_v1_events__event_id__get
      parameters:
      - in: path
        name: event_id
        required: true
        schema:
          examples:
          - event_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^event_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Event Id
          type: string
          x-typeid-prefix: event
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EVENT_NOT_FOUND
                detail: Event not found
                event_id: Additional error context.
                status: 404
                title: Event Error
                type: event-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get event
      tags:
      - event
      x-required-permissions:
      - events:read
    patch:
      description: Acknowledge an event
      operationId: acknowledge_event_v1_events__event_id__patch
      parameters:
      - in: path
        name: event_id
        required: true
        schema:
          examples:
          - event_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^event_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Event Id
          type: string
          x-typeid-prefix: event
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_EVENT_NOT_FOUND
                detail: Event not found
                event_id: Additional error context.
                status: 404
                title: Event Error
                type: event-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Acknowledge event
      tags:
      - event
      x-required-permissions:
      - events:manage
  /v1/hosts:
    post:
      description: Create a new host object
      operationId: create_host_v1_hosts_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HostCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Additional error context.
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_PARENT_DOMAIN_NOT_FOUND
                detail: Parent domain not found for host 'Additional error context.'
                hostname: Additional error context.
                parent_domain: ''
                status: 404
                title: Host Management Error
                type: parent-domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_HOST_ALREADY_EXISTS
                detail: Host already exists
                hostname: Additional error context.
                status: 409
                title: Host Management Error
                type: host-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              example:
                code: ERROR_HOST_OBJECTS_NOT_SUPPORTED
                detail: Host objects are not supported for this tld
                status: 422
                title: Host Management Error
                tld: Additional error context.
                type: host-object-not-supported
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a Host Object
      tags:
      - host
      x-required-permissions:
      - domains:manage
      - hosts:manage
  /v1/hosts/{host_reference}:
    delete:
      description: Deletes a host object; only possible if the host is not in use
      operationId: delete_host_v1_hosts__host_reference__delete
      parameters:
      - in: path
        name: host_reference
        required: true
        schema:
          anyOf:
          - examples:
            - host_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: host
          - type: string
          title: Host Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Additional error context.
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              examples:
                Host Management Error:
                  value:
                    code: ERROR_PARENT_DOMAIN_NOT_FOUND
                    detail: Parent domain not found for host 'Additional error context.'
                    hostname: Additional error context.
                    parent_domain: ''
                    status: 404
                    title: Host Management Error
                    type: parent-domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_HOST_IN_USE
                detail: Host is linked to one or more domains
                host_reference: Additional error context.
                status: 409
                title: Host Management Error
                type: host-in-use
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a Host Object
      tags:
      - host
      x-required-permissions:
      - hosts:delete
    get:
      description: Retrieves a host object by either its ID or hostname
      operationId: get_host_v1_hosts__host_reference__get
      parameters:
      - in: path
        name: host_reference
        required: true
        schema:
          anyOf:
          - examples:
            - host_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: host
          - type: string
          title: Host Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Additional error context.
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              examples:
                Host Management Error:
                  value:
                    code: ERROR_PARENT_DOMAIN_NOT_FOUND
                    detail: Parent domain not found for host 'Additional error context.'
                    hostname: Additional error context.
                    parent_domain: ''
                    status: 404
                    title: Host Management Error
                    type: parent-domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retrieve a Host Object
      tags:
      - host
      x-required-permissions:
      - hosts:read
    put:
      description: Updates the IP addresses of a host object, referenced by either
        its ID or hostname
      operationId: update_host_v1_hosts__host_reference__put
      parameters:
      - in: path
        name: host_reference
        required: true
        schema:
          anyOf:
          - examples:
            - host_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: host
          - type: string
          title: Host Reference
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HostUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Additional error context.
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              examples:
                Host Management Error:
                  value:
                    code: ERROR_PARENT_DOMAIN_NOT_FOUND
                    detail: Parent domain not found for host 'Additional error context.'
                    hostname: Additional error context.
                    parent_domain: ''
                    status: 404
                    title: Host Management Error
                    type: parent-domain-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a Host Object
      tags:
      - host
      x-required-permissions:
      - hosts:manage
  /v1/job/{job_id}:
    delete:
      operationId: delete_job_v1_job__job_id__delete
      parameters:
      - description: Job ID
        in: path
        name: job_id
        required: true
        schema:
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_NOT_FOUND
                detail: No job found with id 'Additional error context.'
                job_id: Additional error context.
                status: 404
                title: Batch Operation Error
                type: job-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete (cancel) a queued job
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
    get:
      operationId: get_job_v1_job__job_id__get
      parameters:
      - description: Job ID
        in: path
        name: job_id
        required: true
        schema:
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_NOT_FOUND
                detail: No job found with id 'Additional error context.'
                job_id: Additional error context.
                status: 404
                title: Batch Operation Error
                type: job-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get individual job details
      tags:
      - jobs
      x-required-permissions:
      - jobs:read
  /v1/job/{job_id}/pause:
    post:
      operationId: pause_job_v1_job__job_id__pause_post
      parameters:
      - description: Job ID
        in: path
        name: job_id
        required: true
        schema:
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_NOT_FOUND
                detail: No job found with id 'Additional error context.'
                job_id: Additional error context.
                status: 404
                title: Batch Operation Error
                type: job-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Pause a job
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/job/{job_id}/resume:
    post:
      operationId: resume_job_v1_job__job_id__resume_post
      parameters:
      - description: Job ID
        in: path
        name: job_id
        required: true
        schema:
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_NOT_FOUND
                detail: No job found with id 'Additional error context.'
                job_id: Additional error context.
                status: 404
                title: Batch Operation Error
                type: job-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Resume a paused job
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/job/{job_id}/retry:
    post:
      operationId: retry_job_v1_job__job_id__retry_post
      parameters:
      - description: Job ID
        in: path
        name: job_id
        required: true
        schema:
          examples:
          - job_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^job_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Job Id
          type: string
          x-typeid-prefix: job
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_NOT_FOUND
                detail: No job found with id 'Additional error context.'
                job_id: Additional error context.
                status: 404
                title: Batch Operation Error
                type: job-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_JOB_STATUS_CONFLICT
                detail: Additional error context.
                status: 409
                title: Batch Operation Error
                type: job-status-conflict
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retry a failed or dead-lettered job
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/jobs:
    get:
      operationId: list_batches_v1_jobs_get
      parameters:
      - description: Filter by batch status (pending or complete)
        in: query
        name: status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BatchStatus'
          - type: 'null'
          description: Filter by batch status (pending or complete)
          title: Status
      - description: Sort field
        in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/BatchSortField'
          default: created_on
          description: Sort field
      - description: Sort order
        in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
          description: Sort order
      - description: Page number (1-indexed)
        in: query
        name: page
        required: false
        schema:
          default: 1
          description: Page number (1-indexed)
          minimum: 1
          title: Page
          type: integer
      - description: Number of batches per page
        in: query
        name: page_size
        required: false
        schema:
          default: 50
          description: Number of batches per page
          maximum: 100
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_JobBatchMetadataResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List batches for organization
      tags:
      - jobs
      x-required-permissions:
      - jobs:read
    post:
      operationId: create_batch_v1_jobs_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              bulk_dns_zone_create:
                description: Create multiple DNS zones with the same RRsets. Useful
                  for setting up identical DNS configurations across many domains.
                summary: Bulk DNS zone creation
                value:
                  commands:
                  - command: dns_zone_create_bulk
                    idempotency_key: bulk-zones-2025-01
                    payload:
                      instances:
                      - name: zone1.com
                      - name: zone2.com
                      - name: zone3.com
                      template:
                        dnssec_status: disabled
                        rrsets:
                        - name: '@'
                          records:
                          - rdata: 192.0.2.1
                          ttl: 300
                          type: A
                        - name: www
                          records:
                          - rdata: 192.0.2.2
                          ttl: 300
                          type: A
                    version: v1
              bulk_dns_zone_patch_records:
                description: Patch individual records across multiple DNS zones. Each
                  zone can have different patch operations. Use 'upsert' to add/update
                  records and 'remove' to delete specific records by rdata.
                summary: Bulk DNS zone patch records
                value:
                  commands:
                  - command: dns_zone_patch_records_bulk
                    idempotency_key: bulk-patch-records-2025-01
                    payload:
                      instances:
                      - ops:
                        - op: upsert
                          record:
                            name: www
                            rdata: 192.0.2.100
                            ttl: 300
                            type: A
                        - op: remove
                          record:
                            name: www
                            rdata: 192.0.2.1
                            ttl: 300
                            type: A
                        zone_name: zone1.com
                      - ops:
                        - op: upsert
                          record:
                            name: mail
                            rdata: 10 mail.zone2.com.
                            ttl: 3600
                            type: MX
                        zone_name: zone2.com
                    version: v1
              bulk_dns_zone_patch_rrsets:
                description: Patch rrsets across multiple DNS zones. Each zone can
                  have different patch operations. Use 'upsert' to add/update rrsets
                  and 'remove' to delete them.
                summary: Bulk DNS zone patch rrsets
                value:
                  commands:
                  - command: dns_zone_patch_rrsets_bulk
                    idempotency_key: bulk-patch-rrsets-2025-01
                    payload:
                      instances:
                      - ops:
                        - op: upsert
                          rrset:
                            name: api
                            records:
                            - rdata: 192.0.2.10
                            ttl: 300
                            type: A
                        - op: remove
                          rrset:
                            name: old
                            records: []
                            ttl: 300
                            type: A
                        zone_name: zone1.com
                      - ops:
                        - op: upsert
                          rrset:
                            name: api
                            records:
                            - rdata: 192.0.2.20
                            ttl: 300
                            type: A
                        zone_name: zone2.com
                    version: v1
              bulk_dns_zone_restamp_vanity_ns:
                description: Restamp multiple zones' apex NS + SOA onto a vanity nameserver
                  set, or unbrand them to OpusDNS system defaults. The template's
                  vanity_nameserver_set_id applies to every zone; an instance may
                  override it (set null to unbrand just that zone).
                summary: Bulk DNS zone vanity NS restamp
                value:
                  commands:
                  - command: dns_zone_restamp_vanity_ns_bulk
                    idempotency_key: bulk-restamp-vanity-ns-2050-01
                    payload:
                      instances:
                      - name: zone1.com
                      - name: zone2.com
                      - name: zone3.com
                      template:
                        vanity_nameserver_set_id: vns_01h9xk4p2e2v8q9r5t7w0c3m6n
                    version: v1
              bulk_dns_zone_update:
                description: Update multiple DNS zones with the same RRsets. Useful
                  for applying identical DNS record changes across many zones.
                summary: Bulk DNS zone update
                value:
                  commands:
                  - command: dns_zone_update_bulk
                    idempotency_key: bulk-zone-updates-2025-01
                    payload:
                      instances:
                      - name: zone1.com
                      - name: zone2.com
                      - name: zone3.com
                      template:
                        rrsets:
                        - name: '@'
                          records:
                          - rdata: 192.0.2.100
                          ttl: 300
                          type: A
                        - name: www
                          records:
                          - rdata: 192.0.2.101
                          ttl: 300
                          type: A
                    version: v1
              bulk_domain_create:
                description: Create multiple domains with shared settings using a
                  single bulk command. Template values apply to all domains; instances
                  can override specific fields.
                summary: Bulk domain creation
                value:
                  commands:
                  - command: domain_create_bulk
                    idempotency_key: bulk-create-2025-01
                    payload:
                      instances:
                      - name: domain1.com
                      - name: domain2.com
                      - name: domain3.com
                        period:
                          unit: y
                          value: 2
                      - expected_price: '2500.00'
                        name: premium-domain.com
                      template:
                        contacts:
                          admin:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          billing:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          registrant:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          tech:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                        create_zone: true
                        nameservers:
                        - hostname: ns1.example.com
                          ip_addresses: []
                        - hostname: ns2.example.com
                          ip_addresses: []
                        period:
                          unit: y
                          value: 1
                        renewal_mode: renew
                    version: v1
              bulk_domain_transfer:
                description: Transfer multiple domains with shared settings. Each
                  domain requires its own auth_code in the instance, while contacts
                  and nameservers come from the template.
                summary: Bulk domain transfer
                value:
                  commands:
                  - command: domain_transfer_bulk
                    idempotency_key: bulk-transfer-2025-01
                    payload:
                      instances:
                      - auth_code: AUTH123ABC
                        name: transfer1.com
                      - auth_code: AUTH456DEF
                        name: transfer2.com
                      - auth_code: AUTH789GHI
                        name: transfer3.com
                      - auth_code: AUTHPREM1
                        expected_price: '1750.00'
                        name: premium-transfer.com
                      template:
                        contacts:
                          admin:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          billing:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          registrant:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                          tech:
                          - attributes: {}
                            contact_id: contact_01kc433yvre99af2wasxhtpswf
                        create_zone: false
                        nameservers:
                        - hostname: ns1.example.com
                          ip_addresses: []
                        - hostname: ns2.example.com
                          ip_addresses: []
                        renewal_mode: renew
                    version: v1
              bulk_parking_create:
                description: Create multiple parking entries with shared settings
                  using a single bulk command. Template values apply to all entries;
                  instances can override the enabled setting.
                summary: Bulk parking creation
                value:
                  commands:
                  - command: parking_create_bulk
                    idempotency_key: bulk-parking-create-2025-01
                    payload:
                      instances:
                      - domain: parked1.com
                      - domain: parked2.com
                      - domain: parked3.com
                        enabled: false
                      template:
                        enabled: true
                    version: v1
              bulk_parking_delete:
                description: Delete multiple parking entries at once by specifying
                  their parking IDs.
                summary: Bulk parking delete
                value:
                  commands:
                  - command: parking_delete_bulk
                    idempotency_key: bulk-parking-delete-2025-01
                    payload:
                      instances:
                      - parking_reference: parking_01kfzcw9vze6crvqd6mhdw8rkc
                      - parking_reference: parked2.com
                      - parking_reference: parking_01kfzcw9w1ebbse9qcrkdxsv6b
                    version: v1
              bulk_parking_disable:
                description: Disable multiple parking entries at once by specifying
                  their parking IDs.
                summary: Bulk parking disable
                value:
                  commands:
                  - command: parking_disable_bulk
                    idempotency_key: bulk-parking-disable-2025-01
                    payload:
                      instances:
                      - parking_reference: parking_01kfzcw9vze6crvqd6mhdw8rkc
                      - parking_reference: parked2.com
                      - parking_reference: parking_01kfzcw9w1ebbse9qcrkdxsv6b
                    version: v1
              bulk_parking_enable:
                description: Enable multiple parking entries at once by specifying
                  their parking IDs.
                summary: Bulk parking enable
                value:
                  commands:
                  - command: parking_enable_bulk
                    idempotency_key: bulk-parking-enable-2025-01
                    payload:
                      instances:
                      - parking_reference: parking_01kfzcw9vze6crvqd6mhdw8rkc
                      - parking_reference: parked2.com
                      - parking_reference: parking_01kfzcw9w1ebbse9qcrkdxsv6b
                    version: v1
              bulk_updates:
                description: Submit multiple domain update commands in a single batch
                summary: Bulk domain updates
                value:
                  commands:
                  - command: domain_update
                    idempotency_key: update-domain-001
                    payload:
                      contacts: {}
                      domain_id: domain_01kc433yxxf69vnhtvd03tm0fa
                      renewal_mode: renew
                    version: v1
                  - command: domain_update
                    idempotency_key: update-domain-002
                    payload:
                      contacts: {}
                      domain_id: domain_01kc433z02f55ttp31ef952nhb
                      renewal_mode: renew
                    version: v1
                  - command: domain_update
                    idempotency_key: update-domain-003
                    payload:
                      contacts: {}
                      domain_id: domain_01kc433z1yfg8ajdcndxf1rftd
                      renewal_mode: renew
                    version: v1
              dns_zone:
                description: Submit a batch with a DNS zone creation command
                summary: Create a DNS zone
                value:
                  commands:
                  - command: dns_zone_create
                    idempotency_key: create-zone-example-com
                    payload:
                      dnssec_status: disabled
                      name: example.com
                      rrsets:
                      - name: '@'
                        records:
                        - rdata: 192.0.2.1
                        - rdata: 192.0.2.2
                        ttl: 3600
                        type: A
                      - name: www
                        records:
                        - rdata: example.com.
                        ttl: 3600
                        type: CNAME
                      - name: '@'
                        records:
                        - rdata: '"v=spf1 include:_spf.example.com ~all"'
                        ttl: 3600
                        type: TXT
                    version: v1
              dns_zone_update:
                description: Submit a batch with a DNS zone update command to modify
                  existing records
                summary: Update a DNS zone
                value:
                  commands:
                  - command: dns_zone_update
                    idempotency_key: update-zone-example-com
                    payload:
                      name: example.com
                      rrsets:
                      - name: '@'
                        records:
                        - rdata: 192.0.2.10
                        - rdata: 192.0.2.11
                        ttl: 3600
                        type: A
                      - name: mail
                        records:
                        - rdata: 10 mail.example.com.
                        ttl: 3600
                        type: MX
                    version: v1
              scheduled:
                description: Submit a batch with not_before set to schedule future
                  execution
                summary: Scheduled batch
                value:
                  commands:
                  - command: domain_create
                    idempotency_key: scheduled-create-001
                    payload:
                      contacts:
                        admin:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        billing:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        registrant:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        tech:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                      create_zone: false
                      name: scheduled-example.com
                      period:
                        unit: y
                        value: 1
                      renewal_mode: renew
                    version: v1
                  not_before: '2025-06-01T00:00:00Z'
              single_contact:
                description: Submit a batch with one contact creation command
                summary: Create a single contact
                value:
                  commands:
                  - command: contact_create
                    idempotency_key: contact-john-doe-001
                    payload:
                      city: New York
                      country: US
                      disclose: false
                      email: john.doe@example.com
                      email_ace: john.doe@example.com
                      first_name: John
                      last_name: Doe
                      phone: +1 212-555-1234
                      postal_code: '10001'
                      street: 123 Main St
                    version: v1
              single_domain:
                description: Submit a batch with one domain registration command
                summary: Create a single domain
                value:
                  commands:
                  - command: domain_create
                    idempotency_key: create-example-com-001
                    payload:
                      contacts:
                        admin:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        billing:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        registrant:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                        tech:
                        - attributes: {}
                          contact_id: contact_01kc433yvre99af2wasxhtpswf
                      create_zone: false
                      name: example.com
                      nameservers:
                      - hostname: ns1.example.com
                        ip_addresses: []
                      - hostname: ns2.example.com
                        ip_addresses: []
                      period:
                        unit: y
                        value: 1
                      renewal_mode: renew
                    version: v1
            schema:
              $ref: '#/components/schemas/JobBatchRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                bulk_update_response:
                  description: Response when creating a batch with multiple domain
                    updates
                  summary: Bulk update batch created
                  value:
                    batch_id: batch_01kc433z64f6qacp9zn27mqz02
                    errors: []
                    jobs_created: 3
                    jobs_failed: 0
                    status_url: /v1/jobs/batch_01kc433z64f6qacp9zn27mqz02
                    total_commands: 3
                single_domain_response:
                  description: Response when creating a batch with one domain registration
                  summary: Single domain batch created
                  value:
                    batch_id: batch_01kc433z42eak962tsgjx2pgd6
                    errors: []
                    jobs_created: 1
                    jobs_failed: 0
                    status_url: /v1/jobs/batch_01kc433z42eak962tsgjx2pgd6
                    total_commands: 1
              schema:
                $ref: '#/components/schemas/CreateJobBatchResponse'
          description: Batch created successfully
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_EMPTY
                detail: Additional error context.
                status: 400
                title: Batch Operation Error
                type: batch-empty
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_JOB_CREATION_FAILED
                command: Additional error context.
                detail: Failed to create job for command 'Additional error context.'
                status: 503
                title: Batch Operation Error
                type: batch-job-creation
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a batch of commands for async execution
      tags:
      - jobs
      x-required-permissions:
      - contacts:manage
      - dns:manage
      - domains:manage
      - jobs:manage
      - parking:manage
      - vanity_ns:manage
  /v1/jobs/{batch_id}:
    delete:
      operationId: delete_batch_v1_jobs__batch_id__delete
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete (cancel) all queued jobs in a batch
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
    get:
      operationId: get_batch_v1_jobs__batch_id__get
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                completed:
                  description: A fully processed batch with mostly successful jobs
                    and a few failures
                  summary: Batch completed
                  value:
                    batch_id: batch_01h45ytscbebyvny4gc8cr8ma3
                    canceled: 0
                    dead_letter: 0
                    failed: 2
                    label: Bulk RRset Patch
                    progress_percentage: 100.0
                    queued: 0
                    running: 0
                    succeeded: 98
                    total: 100
                in_progress:
                  description: A batch that is still being processed with jobs in
                    various states
                  summary: Batch in progress
                  value:
                    batch_id: batch_01h45ytscbebyvny4gc8cr8ma2
                    canceled: 0
                    dead_letter: 0
                    failed: 0
                    label: Bulk Domain Registration
                    progress_percentage: 50.0
                    queued: 3
                    running: 2
                    succeeded: 5
                    total: 10
                with_dead_letter:
                  description: A completed batch where some jobs permanently failed
                    after exhausting retries
                  summary: Batch with dead letter jobs
                  value:
                    batch_id: batch_01h45ytscbebyvny4gc8cr8ma4
                    canceled: 0
                    dead_letter: 2
                    failed: 3
                    progress_percentage: 100.0
                    queued: 0
                    running: 0
                    succeeded: 45
                    total: 50
              schema:
                $ref: '#/components/schemas/JobBatchStatusResponse'
          description: Batch status retrieved successfully
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_STATUS_FETCH_FAILED
                correlation_id: Additional error context.
                detail: Failed to fetch batch status for correlation_id 'Additional
                  error context.'
                status: 503
                title: Batch Operation Error
                type: batch-status-fetch
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get batch details and execution status
      tags:
      - jobs
      x-required-permissions:
      - jobs:read
  /v1/jobs/{batch_id}/jobs:
    get:
      operationId: get_batch_jobs_v1_jobs__batch_id__jobs_get
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - description: Filter by job status (repeatable)
        in: query
        name: status
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/JobStatus'
            type: array
          - type: 'null'
          description: Filter by job status (repeatable)
          title: Status
      - description: Sort field
        in: query
        name: sort_by
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BatchSortField'
          - type: 'null'
          description: Sort field
          title: Sort By
      - description: Sort order
        in: query
        name: sort_order
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/SortOrder'
          - type: 'null'
          description: Sort order
          title: Sort Order
      - description: Page number (1-indexed)
        in: query
        name: page
        required: false
        schema:
          default: 1
          description: Page number (1-indexed)
          minimum: 1
          title: Page
          type: integer
      - description: Number of jobs per page
        in: query
        name: page_size
        required: false
        schema:
          default: 100
          description: Number of jobs per page
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              examples:
                failed_jobs:
                  description: Jobs that failed execution, filtered by status parameter
                  summary: Failed jobs filtered
                  value:
                    pagination:
                      current_page: 1
                      has_next_page: false
                      has_previous_page: false
                      page_size: 100
                      total_items: 2
                      total_pages: 1
                    results:
                    - attempts: 1
                      command: domain_create_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Create Domain 'invalid-domain.com'
                      domain_name: invalid-domain.com
                      error_class: ValidationError
                      error_message: Domain name contains invalid characters
                      finished_at: '2025-01-15T10:00:06Z'
                      job_id: job_01h45ytscbebyvny4gc8cr8ma6
                      operation: create
                      payload:
                        domain:
                          contacts:
                            admin:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                          name: invalid-domain.com
                          period:
                            unit: y
                            value: 1
                          renewal_mode: renew
                        operation: create
                        type: domain_create_bulk
                      resource_key: invalid-domain.com
                      started_at: '2025-01-15T10:00:05Z'
                      status: failed
                    - attempts: 5
                      command: domain_update_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Update Domain 'flaky-domain.com'
                      domain_name: flaky-domain.com
                      error_class: DomainsClientError
                      error_code: ERROR_DOMAIN_TRANSFER_INVALID_AUTH_CODE
                      error_details:
                        code: ERROR_DOMAIN_TRANSFER_INVALID_AUTH_CODE
                        detail: There was an error transferring the domain
                        domain_name: flaky-domain.com
                        reason: Domain transfer failed, invalid auth code provided
                        status: 403
                        title: Domain Transfer Error
                        type: domain-transfer-invalid-auth
                      error_message: 'Domains service error: There was an error transferring
                        the domain'
                      finished_at: '2025-01-15T10:15:30Z'
                      job_id: job_01h45ytscbebyvny4gc8cr8ma7
                      operation: update
                      payload:
                        domain:
                          domain_id: domain_01h45ytscbebyvny4gc8cr8x3
                          nameservers:
                          - hostname: ns1.example.com
                          - hostname: ns2.example.com
                          renewal_mode: renew
                        operation: update
                        type: domain_update_bulk
                      resource_key: domain_01h45ytscbebyvny4gc8cr8x3
                      started_at: '2025-01-15T10:05:00Z'
                      status: dead_letter
                mixed_status:
                  description: A batch with jobs in various states of completion
                  summary: Jobs with mixed statuses
                  value:
                    pagination:
                      current_page: 1
                      has_next_page: false
                      has_previous_page: false
                      page_size: 100
                      total_items: 4
                      total_pages: 1
                    results:
                    - attempts: 1
                      command: domain_update_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Update Domain 'example.com'
                      domain_name: example.com
                      finished_at: '2025-01-15T10:00:12Z'
                      job_id: job_01h45ytscbebyvny4gc8cr8ma2
                      operation: update
                      payload:
                        domain:
                          contacts:
                            admin:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                            tech:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                          domain_id: domain_01h45ytscbebyvny4gc8cr8x1
                          nameservers:
                          - hostname: ns1.example.com
                          - hostname: ns2.example.com
                          renewal_mode: renew
                        operation: update
                        type: domain_update_bulk
                      resource_key: domain_01h45ytscbebyvny4gc8cr8x1
                      started_at: '2025-01-15T10:00:05Z'
                      status: succeeded
                    - attempts: 1
                      command: domain_update_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Update Domain 'example.org'
                      domain_name: example.org
                      finished_at: '2025-01-15T10:00:15Z'
                      job_id: job_01h45ytscbebyvny4gc8cr8ma3
                      operation: update
                      payload:
                        domain:
                          domain_id: domain_01h45ytscbebyvny4gc8cr8x2
                          renewal_mode: expire
                          status_changes:
                            add:
                            - clientHold
                            remove: []
                        operation: update
                        type: domain_update_bulk
                      resource_key: domain_01h45ytscbebyvny4gc8cr8x2
                      started_at: '2025-01-15T10:00:06Z'
                      status: succeeded
                    - attempts: 1
                      command: domain_create_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Create Domain 'newdomain.com'
                      domain_name: newdomain.com
                      job_id: job_01h45ytscbebyvny4gc8cr8ma4
                      operation: create
                      payload:
                        domain:
                          contacts:
                            admin:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                            registrant:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                            tech:
                            - contact_id: contact_01h45ytscbebyvny4gc8ab1
                          create_zone: false
                          name: newdomain.com
                          nameservers:
                          - hostname: ns1.example.com
                          - hostname: ns2.example.com
                          period:
                            unit: y
                            value: 1
                          renewal_mode: renew
                        operation: create
                        type: domain_create_bulk
                      resource_key: newdomain.com
                      started_at: '2025-01-15T10:00:07Z'
                      status: running
                    - attempts: 0
                      command: dns_zone_create_bulk
                      created_on: '2025-01-15T10:00:00Z'
                      display: Create DNS Zone 'example.net'
                      job_id: job_01h45ytscbebyvny4gc8cr8ma5
                      operation: create
                      payload:
                        operation: create
                        type: dns_zone_create_bulk
                        zone:
                          name: example.net
                          rrsets: []
                      resource_key: example.net
                      status: queued
              schema:
                $ref: '#/components/schemas/PageResponse_JobResponse_'
          description: Batch jobs retrieved successfully
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '503':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_STATUS_FETCH_FAILED
                correlation_id: Additional error context.
                detail: Failed to fetch batch status for correlation_id 'Additional
                  error context.'
                status: 503
                title: Batch Operation Error
                type: batch-status-fetch
              schema:
                $ref: '#/components/schemas/Problem'
          description: Service Unavailable
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get individual jobs within a batch
      tags:
      - jobs
      x-required-permissions:
      - jobs:read
  /v1/jobs/{batch_id}/pause:
    post:
      operationId: pause_batch_v1_jobs__batch_id__pause_post
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Pause all eligible jobs in a batch
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/jobs/{batch_id}/resume:
    post:
      operationId: resume_batch_v1_jobs__batch_id__resume_post
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Resume all paused jobs in a batch
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/jobs/{batch_id}/retry:
    post:
      operationId: retry_batch_v1_jobs__batch_id__retry_post
      parameters:
      - description: Batch ID
        in: path
        name: batch_id
        required: true
        schema:
          examples:
          - batch_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^batch_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Batch Id
          type: string
          x-typeid-prefix: batch
      - description: 'Optional repeatable filter: only retry jobs whose error_class
          matches one of these values. Example: `?error_class=BillingInsufficientFundsError`
          to retry only insufficient-funds failures. Omit to retry all failed/dead-lettered
          jobs in the batch.'
        in: query
        name: error_class
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: 'Optional repeatable filter: only retry jobs whose error_class
            matches one of these values. Example: `?error_class=BillingInsufficientFundsError`
            to retry only insufficient-funds failures. Omit to retry all failed/dead-lettered
            jobs in the batch.'
          title: Error Class
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobBatchRetryResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_BATCH_NOT_FOUND
                correlation_id: Additional error context.
                detail: No batch found with correlation_id 'Additional error context.'
                status: 404
                title: Batch Operation Error
                type: batch-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retry failed and dead-lettered jobs in a batch
      tags:
      - jobs
      x-required-permissions:
      - jobs:manage
  /v1/organizations:
    get:
      description: Retrieves a paginated list of organizations under the current organization
      operationId: list_organizations_v1_organizations_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/OrganizationSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - maxLength: 200
            type: string
          - type: 'null'
          title: Search
      - in: query
        name: country_code
        required: false
        schema:
          anyOf:
          - pattern: ^\w{2}$
            type: string
          - type: 'null'
          title: Country Code
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_Organization_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all organizations
      tags:
      - organization
      x-required-permissions:
      - organization:read
    post:
      description: Create a new organization under the current organization
      operationId: create_organization_v1_organizations_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationCreate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              examples:
                Organization Management Error:
                  value:
                    code: ERROR_INDEPENDENT_BILLING_NOT_APPROVED
                    detail: The parent organization is not approved to create sub-organizations
                      with independent billing.
                    status: 422
                    title: Organization Management Error
                    type: independent-billing-not-approved
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create an organization
      tags:
      - organization
  /v1/organizations/attributes:
    get:
      description: Retrieves a list of organization attributes for the current organization
      operationId: get_current_organization_attributes_v1_organizations_attributes_get
      parameters:
      - description: Optional list of attribute keys to filter
        in: query
        name: keys
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Optional list of attribute keys to filter
          title: Keys
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/OrganizationAttributeResponse'
                title: Response Get Current Organization Attributes V1 Organizations
                  Attributes Get
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List organization attributes
      tags:
      - organization
      x-required-permissions:
      - organization:read
    patch:
      description: Updates one or more organization attributes for the current organization
      operationId: update_current_organization_attributes_v1_organizations_attributes_patch
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/OrganizationAttributeUpdate'
              title: Attributes
              type: array
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/OrganizationAttributeResponse'
                title: Response Update Current Organization Attributes V1 Organizations
                  Attributes Patch
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              example:
                attribute_key: email_forward_limit
                code: ERROR_ORGANIZATION_ATTRIBUTE_VALUE_INVALID
                detail: Organization attribute 'email_forward_limit' must be a positive
                  integer, got 'not-a-number'.
                status: 422
                title: Organization Management Error
                type: organization-attribute-value-invalid
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update organization attributes
      tags:
      - organization
  /v1/organizations/ip-restrictions:
    get:
      description: 'List all IP restrictions for the organization.


        Returns a list of all IP restrictions configured for your organization.

        Single IP addresses are returned with CIDR notation (/32 for IPv4, /128 for
        IPv6).'
      operationId: list_ip_restrictions_v1_organizations_ip_restrictions_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/IpRestrictionResponse'
                title: Response List Ip Restrictions V1 Organizations Ip Restrictions
                  Get
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List IP restrictions
      tags:
      - organization
      x-required-permissions:
      - organization:read
    post:
      description: 'Create a new IP restriction for the organization.


        Accepts either a single IP address or a CIDR network range.

        Individual IP addresses are stored and returned with CIDR notation (/32 for
        IPv4, /128 for IPv6).'
      operationId: create_ip_restriction_v1_organizations_ip_restrictions_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IpRestrictionCreate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IpRestrictionResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create an IP restriction
      tags:
      - organization
  /v1/organizations/ip-restrictions/{ip_restriction_id}:
    delete:
      description: 'Delete an IP restriction.


        Permanently removes the specified IP restriction from your organization.'
      operationId: delete_ip_restriction_v1_organizations_ip_restrictions__ip_restriction_id__delete
      parameters:
      - in: path
        name: ip_restriction_id
        required: true
        schema:
          title: Ip Restriction Id
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete an IP restriction
      tags:
      - organization
    get:
      description: 'Get a specific IP restriction by ID.


        Returns the details of a specific IP restriction if it exists and belongs
        to your organization.

        Single IP addresses are returned with CIDR notation (/32 for IPv4, /128 for
        IPv6).'
      operationId: get_ip_restriction_v1_organizations_ip_restrictions__ip_restriction_id__get
      parameters:
      - in: path
        name: ip_restriction_id
        required: true
        schema:
          title: Ip Restriction Id
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IpRestrictionResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get an IP restriction
      tags:
      - organization
      x-required-permissions:
      - organization:read
    patch:
      description: 'Update an existing IP restriction.


        You can update the IP network range or the last usage timestamp.

        Individual IP addresses are stored and returned with CIDR notation (/32 for
        IPv4, /128 for IPv6).'
      operationId: update_ip_restriction_v1_organizations_ip_restrictions__ip_restriction_id__patch
      parameters:
      - in: path
        name: ip_restriction_id
        required: true
        schema:
          title: Ip Restriction Id
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IpRestrictionUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IpRestrictionResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update an IP restriction
      tags:
      - organization
  /v1/organizations/product-waitlist:
    get:
      description: 'Lists the waitlisted products your organization has been invited
        to, or that you have already applied for, with where your own application
        stands on each. Any other product is omitted entirely. An API key sees the
        invited products but has no application of its own: `status` is null and `can_apply`
        is false.'
      operationId: list_product_waitlists_v1_organizations_product_waitlist_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaitlistProductListResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List product waitlists
      tags:
      - organization
      - product_waitlist
      x-required-permissions:
      - organization:read
  /v1/organizations/product-waitlist/{product}/apply:
    post:
      description: 'Applies you for a product''s waitlist, optionally saying what
        you would use the product for. Any member of an invited organization may apply.
        The application is recorded as `pending` until OpusDNS decides on it. One
        application per user per product: a second apply is refused, and a rejection
        is reconsidered by OpusDNS rather than by applying again. A colleague''s application
        does not stand in for yours, nor block it.'
      operationId: apply_for_product_waitlist_v1_organizations_product_waitlist__product__apply_post
      parameters:
      - in: path
        name: product
        required: true
        schema:
          $ref: '#/components/schemas/WaitlistProduct'
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
              - $ref: '#/components/schemas/WaitlistApplyRequest'
              - type: 'null'
              title: Body
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaitlistEntryResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_WAITLIST_NOT_INVITED
                detail: No waitlist is available for ai_concierge
                product: ai_concierge
                status: 404
                title: Waitlist Error
                type: waitlist-not-invited
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              examples:
                Waitlist Error:
                  value:
                    code: ERROR_WAITLIST_ENTRY_REJECTED
                    detail: Your application for ai_concierge was rejected
                    product: ai_concierge
                    status: 409
                    title: Waitlist Error
                    type: waitlist-entry-rejected
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      summary: Apply for a product waitlist
      tags:
      - organization
      - product_waitlist
      x-required-permissions:
      - organization:read
  /v1/organizations/role-permissions:
    get:
      description: Retrieves the catalog of `resource:scope` permissions a custom
        role may grant
      operationId: list_role_permissions_v1_organizations_role_permissions_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicPermissionSet'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List grantable role permissions
      tags:
      - organization
      x-required-permissions:
      - organization:read
  /v1/organizations/roles:
    get:
      description: 'Retrieves all roles assignable in the current organization: the
        built-in roles plus the organization''s custom roles'
      operationId: list_roles_v1_organizations_roles_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PublicRoleDefinition'
                title: Response List Roles V1 Organizations Roles Get
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List roles
      tags:
      - organization
      x-required-permissions:
      - organization:read
    post:
      description: Creates an organization-owned custom role granting the requested
        permissions. The escalation-bearing admin/owner permissions cannot be granted.
      operationId: create_role_v1_organizations_roles_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomRoleCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRoleDefinition'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_DUPLICATE_ROLE_NAME
                detail: A role named 'support' already exists in this organization
                status: 409
                title: Role Management Error
                type: duplicate-role-name
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a custom role
      tags:
      - organization
  /v1/organizations/roles/{label}:
    delete:
      description: Deletes a custom role. Refused while the role is still assigned
        to any subject, and for built-in roles.
      operationId: delete_role_v1_organizations_roles__label__delete
      parameters:
      - in: path
        name: label
        required: true
        schema:
          title: Label
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ROLE_NOT_FOUND
                detail: Role not found
                role_name: support
                status: 404
                title: Role Management Error
                type: role-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                binding_count: 1
                code: ERROR_ROLE_IN_USE
                detail: Role is still assigned to one or more subjects and cannot
                  be deleted
                role_name: support
                status: 409
                title: Role Management Error
                type: role-in-use
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a custom role
      tags:
      - organization
    get:
      description: Retrieves a single role (built-in or custom) by its name
      operationId: get_role_v1_organizations_roles__label__get
      parameters:
      - in: path
        name: label
        required: true
        schema:
          title: Label
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRoleDefinition'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ROLE_NOT_FOUND
                detail: Role not found
                role_name: support
                status: 404
                title: Role Management Error
                type: role-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a role
      tags:
      - organization
      x-required-permissions:
      - organization:read
    patch:
      description: Updates a custom role's name, description and/or permission set.
        Permission changes apply to every subject holding the role instantly. Built-in
        roles are immutable.
      operationId: update_role_v1_organizations_roles__label__patch
      parameters:
      - in: path
        name: label
        required: true
        schema:
          title: Label
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomRoleUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRoleDefinition'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ROLE_NOT_FOUND
                detail: Role not found
                role_name: support
                status: 404
                title: Role Management Error
                type: role-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_BUILT_IN_ROLE_IMMUTABLE
                detail: Built-in roles cannot be modified or deleted
                role_name: viewer
                status: 409
                title: Role Management Error
                type: built-in-role-immutable
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a custom role
      tags:
      - organization
  /v1/organizations/users:
    get:
      description: Retrieves a paginated list of users under the current organization
      operationId: list_users_v1_organizations_users_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/UserSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - maxLength: 200
            type: string
          - type: 'null'
          title: Search
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_UserPublicWithRole_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all users
      tags:
      - organization
      x-required-permissions:
      - organization:read
  /v1/organizations/{organization_id}:
    delete:
      description: Permanently deletes an organization
      operationId: delete_organization_v1_organizations__organization_id__delete
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete an organization
      tags:
      - organization
    get:
      description: Retrieves details for a specific organization
      operationId: get_organization_v1_organizations__organization_id__get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationWithBillingData'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get organization details
      tags:
      - organization
      x-required-permissions:
      - organization:read
    patch:
      description: Updates details for a specific organization
      operationId: update_organization_v1_organizations__organization_id__patch
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update an organization
      tags:
      - organization
  /v1/organizations/{organization_id}/attributes:
    get:
      description: Retrieves a list of organization attributes for the specified organization
      operationId: get_organization_attributes_v1_organizations__organization_id__attributes_get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - description: Optional list of attribute keys to filter
        in: query
        name: keys
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Optional list of attribute keys to filter
          title: Keys
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/OrganizationAttributeResponse'
                title: Response Get Organization Attributes V1 Organizations  Organization
                  Id  Attributes Get
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List organization attributes
      tags:
      - organization
      x-required-permissions:
      - organization:read
    patch:
      description: Updates one or more organization attributes for the specified organization
      operationId: update_organization_attributes_v1_organizations__organization_id__attributes_patch
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/OrganizationAttributeUpdate'
              title: Attributes
              type: array
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/OrganizationAttributeResponse'
                title: Response Update Organization Attributes V1 Organizations  Organization
                  Id  Attributes Patch
                type: array
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              example:
                attribute_key: email_forward_limit
                code: ERROR_ORGANIZATION_ATTRIBUTE_VALUE_INVALID
                detail: Organization attribute 'email_forward_limit' must be a positive
                  integer, got 'not-a-number'.
                status: 422
                title: Organization Management Error
                type: organization-attribute-value-invalid
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unprocessable Content
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update organization attributes
      tags:
      - organization
  /v1/organizations/{organization_id}/billing/invoices:
    get:
      description: Retrieves a paginated list of all invoices for the organization
      operationId: list_invoices_v1_organizations__organization_id__billing_invoices_get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_InvoiceResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all invoices for the organization
      tags:
      - organization
      x-required-permissions:
      - billing:manage
  /v1/organizations/{organization_id}/billing/receipts:
    get:
      description: Retrieves a paginated list of all payment receipts for the organization
      operationId: list_receipts_v1_organizations__organization_id__billing_receipts_get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_InvoiceResponse_'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all payment receipts for the organization
      tags:
      - organization
      x-required-permissions:
      - billing:manage
  /v1/organizations/{organization_id}/pricing/product-type/{product_type}:
    get:
      description: Retrieves pricing data for a specific product type. If a product
        action/class are specified, only prices for those are returned, if any.
      operationId: get_pricing_plans_v1_organizations__organization_id__pricing_product_type__product_type__get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: path
        name: product_type
        required: true
        schema:
          $ref: '#/components/schemas/BillingTransactionProductType'
      - in: query
        name: product_action
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BillingTransactionAction'
          - type: 'null'
          title: Product Action
      - in: query
        name: product_class
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Product Class
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPricesResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List product prices
      tags:
      - organization
      x-required-permissions:
      - organization:read
  /v1/organizations/{organization_id}/transactions:
    get:
      description: Retrieves a paginated list of transactions for an organization
      operationId: get_transactions_v1_organizations__organization_id__transactions_get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/BillingTransactionSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: product_reference
        required: false
        schema:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          title: Product Reference
      - in: query
        name: product_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BillingTransactionProductType'
          - type: 'null'
          title: Product Type
      - in: query
        name: action
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BillingTransactionAction'
          - type: 'null'
          title: Action
      - in: query
        name: status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/BillingTransactionStatus'
          - type: 'null'
          title: Status
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - in: query
        name: completed_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Completed After
      - in: query
        name: completed_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Completed Before
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_BillingTransactionResponse_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List all transactions
      tags:
      - organization
      x-required-permissions:
      - organization:read
  /v1/organizations/{organization_id}/transactions/{transaction_id}:
    get:
      description: Retrieves details for a specific transaction for an organization
      operationId: get_transaction_v1_organizations__organization_id__transactions__transaction_id__get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: path
        name: transaction_id
        required: true
        schema:
          examples:
          - billing_transaction_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^billing_transaction_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Transaction Id
          type: string
          x-typeid-prefix: billing_transaction
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingTransactionResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a specific transaction
      tags:
      - organization
      x-required-permissions:
      - organization:read
  /v1/organizations/{organization_id}/usage/{product}:
    get:
      description: Retrieves the organization's usage of a metered product as a time
        series, bucketed by the requested granularity and grouped per sub-metric.
        Reports usage quantities only.
      operationId: get_usage_series_v1_organizations__organization_id__usage__product__get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: path
        name: product
        required: true
        schema:
          $ref: '#/components/schemas/UsageProduct'
      - description: Inclusive start date (YYYY-MM-DD)
        in: query
        name: start_date
        required: true
        schema:
          description: Inclusive start date (YYYY-MM-DD)
          format: date
          title: Start Date
          type: string
      - description: Inclusive end date (YYYY-MM-DD)
        in: query
        name: end_date
        required: true
        schema:
          description: Inclusive end date (YYYY-MM-DD)
          format: date
          title: End Date
          type: string
      - description: Time-bucket size
        in: query
        name: granularity
        required: false
        schema:
          $ref: '#/components/schemas/UsageGranularity'
          default: day
          description: Time-bucket size
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiInferenceUsageSeriesResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Usage over time
      tags:
      - organization
      - usage
      x-required-permissions:
      - organization:read
  /v1/organizations/{organization_id}/usage/{product}/summary:
    get:
      description: Retrieves the organization's total usage of a metered product over
        a date range, grouped per sub-metric. Reports usage quantities only.
      operationId: get_usage_summary_v1_organizations__organization_id__usage__product__summary_get
      parameters:
      - in: path
        name: organization_id
        required: true
        schema:
          examples:
          - organization_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^organization_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Organization Id
          type: string
          x-typeid-prefix: organization
      - in: path
        name: product
        required: true
        schema:
          $ref: '#/components/schemas/UsageProduct'
      - description: Inclusive start date (YYYY-MM-DD)
        in: query
        name: start_date
        required: true
        schema:
          description: Inclusive start date (YYYY-MM-DD)
          format: date
          title: Start Date
          type: string
      - description: Inclusive end date (YYYY-MM-DD)
        in: query
        name: end_date
        required: true
        schema:
          description: Inclusive end date (YYYY-MM-DD)
          format: date
          title: End Date
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiInferenceUsageSummaryResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Usage summary
      tags:
      - organization
      - usage
      x-required-permissions:
      - organization:read
  /v1/parking:
    get:
      description: Retrieves a paginated list of parking entries for the organization
      operationId: list_parking_v1_parking_get
      parameters:
      - description: Page number
        in: query
        name: page
        required: false
        schema:
          default: 1
          description: Page number
          minimum: 1
          title: Page
          type: integer
      - description: Page size
        in: query
        name: page_size
        required: false
        schema:
          default: 10
          description: Page size
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/ParkingSortField'
          default: created_on
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: desc
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - in: query
        name: enabled
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Enabled
      - in: query
        name: compliance_status
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ComplianceStatus'
          - type: 'null'
          title: Compliance Status
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageResponse_ParkingResponse_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List parking entries
      tags:
      - parking
      x-required-permissions:
      - parking:read
  /v1/parking/metrics:
    get:
      description: Retrieves aggregated metrics for all parking entries of the organization.
      operationId: get_total_parking_metrics_v1_parking_metrics_get
      parameters:
      - in: query
        name: start_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Start Time
      - in: query
        name: end_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: End Time
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParkingTotalMetricsResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get total metrics for all parking entries
      tags:
      - parking
      x-required-permissions:
      - parking:read
  /v1/parking/signup:
    post:
      description: Accept the parking agreement to enable parking features for your
        organization.
      operationId: signup_for_parking_v1_parking_signup_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParkingSignupRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParkingSignupResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      summary: Sign up for parking
      tags:
      - parking
      x-required-permissions:
      - parking:manage
  /v1/parking/signup/status:
    get:
      description: Check if your organization has accepted the parking agreement.
      operationId: get_parking_signup_status_v1_parking_signup_status_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParkingSignupStatusResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get parking signup status
      tags:
      - parking
      x-required-permissions:
      - parking:read
  /v1/parking/{parking_reference}/metrics:
    get:
      description: Retrieves metrics for a specific parking entry by ID or domain
        name.
      operationId: get_parking_metrics_v1_parking__parking_reference__metrics_get
      parameters:
      - in: path
        name: parking_reference
        required: true
        schema:
          anyOf:
          - examples:
            - parking_01h45ytscbebyvny4gc8cr8ma2
            format: typeid
            pattern: ^parking_[0-7][0-9a-hjkmnpq-tv-z]{25}$
            type: string
            x-typeid-prefix: parking
          - type: string
          title: Parking Reference
      - in: query
        name: start_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Start Time
      - in: query
        name: end_time
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: End Time
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParkingMetricsResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_PERMISSION_DENIED
                detail: Insufficient permissions to perform this action
                status: 403
                title: Permission Denied
                type: permission-denied
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_PARKING_NOT_FOUND
                detail: 'Parking not found for domain: parking_abc123'
                status: 404
                title: Parking Error
                type: parking-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get metrics for a parking entry
      tags:
      - parking
      x-required-permissions:
      - parking:read
  /v1/reports:
    get:
      operationId: list_reports_v1_reports_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 50
          maximum: 100
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: report_type
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ReportType'
            type: array
          - type: 'null'
          title: Report Type
      - in: query
        name: status
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/ReportStatus'
            type: array
          - type: 'null'
          title: Status
      - in: query
        name: trigger_type
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ReportTriggerType'
          - type: 'null'
          title: Trigger Type
      - in: query
        name: created_after
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created After
      - in: query
        name: created_before
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Created Before
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicReportListRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List Reports
      tags:
      - report
      x-required-permissions:
      - organization:read
    post:
      operationId: create_report_v1_reports_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
              - $ref: '#/components/schemas/CreateReportReq'
              - type: 'null'
              title: Req
      responses:
        '202':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create Report
      tags:
      - report
      x-required-permissions:
      - organization:read
  /v1/reports/{report_id}:
    get:
      operationId: get_report_v1_reports__report_id__get
      parameters:
      - in: path
        name: report_id
        required: true
        schema:
          title: Report Id
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicReportRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get Report
      tags:
      - report
      x-required-permissions:
      - organization:read
  /v1/reports/{report_id}/download:
    get:
      operationId: download_report_v1_reports__report_id__download_get
      parameters:
      - in: path
        name: report_id
        required: true
        schema:
          title: Report Id
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Download Report
      tags:
      - report
      x-required-permissions:
      - organization:read
  /v1/tags:
    get:
      description: Retrieves a paginated list of tags
      operationId: list_tags_v1_tags_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/TagSortField'
          default: label
      - in: query
        name: sort_order
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          default: asc
      - description: Filter by tag types (OR semantics)
        in: query
        name: tag_types
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/TagType'
            type: array
          - type: 'null'
          description: Filter by tag types (OR semantics)
          title: Tag Types
      - in: query
        name: search
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination_TagResponse_'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List tags
      tags:
      - tag
      x-required-permissions:
      - tags:read
    post:
      description: Create a new tag
      operationId: create_tag_v1_tags_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_LABEL_ALREADY_EXISTS
                detail: A tag with label 'Additional error context.' already exists
                label: Additional error context.
                status: 409
                title: Tag Management Error
                type: tag-label-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a tag
      tags:
      - tag
      x-required-permissions:
      - tags:manage
  /v1/tags/objects:
    post:
      description: Add, remove, or replace tags on multiple objects at once. 'replace'
        is mutually exclusive with 'add' and 'remove'.
      operationId: bulk_update_object_tags_v1_tags_objects_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkObjectTagChanges'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectTagChangesResponse'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: ERROR_ILLEGAL_OBJECT_TYPE_FOR_TAG
                detail: One or more provided object ids are not valid for this tag
                object_ids: Additional error context.
                status: 400
                title: Tag Management Error
                type: illegal-object-type-tag
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_NOT_FOUND
                detail: Tag not found
                status: 404
                tag_id: Additional error context.
                title: Tag Management Error
                type: tag-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Bulk tag or untag objects
      tags:
      - tag
      x-required-permissions:
      - tags:manage
  /v1/tags/{tag_id}:
    delete:
      description: Delete a tag
      operationId: delete_tag_v1_tags__tag_id__delete
      parameters:
      - in: path
        name: tag_id
        required: true
        schema:
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_NOT_FOUND
                detail: Tag not found
                status: 404
                tag_id: Additional error context.
                title: Tag Management Error
                type: tag-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a tag
      tags:
      - tag
      x-required-permissions:
      - tags:delete
    get:
      description: Retrieve a single tag by its ID
      operationId: get_tag_v1_tags__tag_id__get
      parameters:
      - in: path
        name: tag_id
        required: true
        schema:
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_NOT_FOUND
                detail: Tag not found
                status: 404
                tag_id: Additional error context.
                title: Tag Management Error
                type: tag-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a tag
      tags:
      - tag
      x-required-permissions:
      - tags:read
    patch:
      description: Update a tag's label, description, or color
      operationId: update_tag_v1_tags__tag_id__patch
      parameters:
      - in: path
        name: tag_id
        required: true
        schema:
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_NOT_FOUND
                detail: Tag not found
                status: 404
                tag_id: Additional error context.
                title: Tag Management Error
                type: tag-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '409':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_LABEL_ALREADY_EXISTS
                detail: A tag with label 'Additional error context.' already exists
                label: Additional error context.
                status: 409
                title: Tag Management Error
                type: tag-label-already-exists
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a tag
      tags:
      - tag
      x-required-permissions:
      - tags:manage
  /v1/tags/{tag_id}/objects:
    post:
      description: Add or remove objects from a tag. Objects are matched by the tag's
        type (e.g. a DOMAIN tag only accepts domain IDs).
      operationId: update_tag_objects_v1_tags__tag_id__objects_post
      parameters:
      - in: path
        name: tag_id
        required: true
        schema:
          examples:
          - tag_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Tag Id
          type: string
          x-typeid-prefix: tag
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ObjectTagChanges'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectTagChangesResponse'
          description: Successful Response
        '401':
          content:
            application/problem+json:
              example:
                code: ERROR_AUTHENTICATION
                detail: Additional error context.
                status: 401
                title: Authentication Error
                type: authentication
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TAG_NOT_FOUND
                detail: Tag not found
                status: 404
                tag_id: Additional error context.
                title: Tag Management Error
                type: tag-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Tag or untag objects
      tags:
      - tag
      x-required-permissions:
      - tags:manage
  /v1/tlds/:
    get:
      description: Retrieves a list of TLD Specifications we have support for
      operationId: get_tld_specifications_v1_tlds__get
      parameters:
      - in: query
        name: fields
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Fields
      - in: query
        name: tlds
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Tlds
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  items:
                    additionalProperties: true
                    type: object
                  type: array
                title: Response Get Tld Specifications V1 Tlds  Get
                type: object
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get list of Specifications for all TLDs we support
      tags:
      - tld
      x-required-permissions:
      - organization:read
  /v1/tlds/portfolio:
    get:
      description: Retrieves a list of TLDs we have support for
      operationId: get_tld_portfolio_v1_tlds_portfolio_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TldResponseShort'
                title: Response Get Tld Portfolio V1 Tlds Portfolio Get
                type: array
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get the list of TLDs we support
      tags:
      - tld
      x-required-permissions:
      - organization:read
  /v1/tlds/{tld}:
    get:
      description: Retrieves the TLD specification for a given TLD
      operationId: get_tld_spec_v1_tlds__tld__get
      parameters:
      - in: path
        name: tld
        required: true
        schema:
          title: Tld
          type: string
      - description: Override the resolved account backend.
        in: query
        name: backend
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/RegistryServiceBackend'
          - type: 'null'
          description: Override the resolved account backend.
          title: Backend
      - description: Override the customer spec ref.
        in: query
        name: customer_spec_ref
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Override the customer spec ref.
          title: Customer Spec Ref
      - description: Override the spec version pin (or LATEST).
        in: query
        name: version
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Override the spec version pin (or LATEST).
          title: Version
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TldSpecificationResponse'
          description: Successful Response
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_TLD_NOT_FOUND
                detail: Unknown TLD
                status: 404
                title: TLD ERROR
                type: tld-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get the TLD specification
      tags:
      - tld
      x-required-permissions:
      - organization:read
  /v1/users:
    post:
      description: Create a new user
      operationId: create_user_v1_users_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPublic'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a user
      tags:
      - user
      x-required-permissions:
      - users:manage
  /v1/users/me:
    get:
      description: Get the current user
      operationId: get_current_user_v1_users_me_get
      parameters:
      - in: query
        name: attributes
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Attributes
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserProfile'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      summary: Get current user
      tags:
      - user
      x-required-permissions:
      - users:read
  /v1/users/{user_id}:
    delete:
      description: Delete a user by ID
      operationId: delete_user_v1_users__user_id__delete
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '403':
          content:
            application/problem+json:
              examples:
                User Management Error:
                  value:
                    code: ERROR_CANNOT_DELETE_OWNER
                    detail: Additional error context.
                    status: 403
                    title: User Management Error
                    type: cannot-delete-owner
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a user
      tags:
      - user
      x-required-permissions:
      - users:delete
    get:
      description: Get a user by ID
      operationId: get_user_v1_users__user_id__get
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - in: query
        name: attributes
        required: false
        schema:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Attributes
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPublicWithAttributes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a user
      tags:
      - user
      x-required-permissions:
      - users:read
    patch:
      description: Update a user by ID
      operationId: update_user_v1_users__user_id__patch
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPublicWithAttributes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Update a user
      tags:
      - user
      x-required-permissions:
      - users:manage
  /v1/users/{user_id}/permissions:
    get:
      description: Get the permissions for a user
      operationId: get_user_permissions_v1_users__user_id__permissions_get
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicPermissionSet'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get user permissions
      tags:
      - user
      x-required-permissions:
      - users:read
  /v1/users/{user_id}/role:
    get:
      description: Get the role for a user
      operationId: get_role_v1_users__user_id__role_get
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRoleAssignment'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get user role
      tags:
      - user
      x-required-permissions:
      - users:read
    put:
      description: Set the role for a user, replacing any existing role. Accepts a
        built-in role name or the label of a custom role owned by the user's organization
      operationId: set_user_role_v1_users__user_id__role_put
      parameters:
      - in: path
        name: user_id
        required: true
        schema:
          examples:
          - user_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^user_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: User Id
          type: string
          x-typeid-prefix: user
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicRoleAssignmentRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRoleAssignment'
          description: Successful Response
        '403':
          content:
            application/problem+json:
              example:
                code: ERROR_ONLY_OWNER_CAN_MANAGE_ADMIN_ROLE
                detail: Additional error context.
                status: 403
                title: User Management Error
                type: only-owner-can-manage-admin-role
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              example:
                code: ERROR_ROLE_NOT_FOUND
                detail: Role not found
                role_name: support_staff
                status: 404
                title: Role Management Error
                type: role-not-found
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      summary: Set user role
      tags:
      - user
  /v1/vanity-nameserver-sets:
    get:
      operationId: list_vanity_nameserver_sets_v1_vanity_nameserver_sets_get
      parameters:
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListVanityNameserverSetsRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List vanity nameserver sets
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:read
    post:
      operationId: create_vanity_nameserver_set_v1_vanity_nameserver_sets_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              three_nameservers:
                description: A set with three branded hostnames under a different
                  parent domain.
                summary: Three-nameserver set
                value:
                  hostnames:
                  - ns1.acme.example
                  - ns2.acme.example
                  - ns3.acme.example
                  name: Acme nameservers
                  parent_domain_name: acme.example
                  soa_rname: hostmaster.acme.example
              two_nameservers:
                description: Create a vanity NS set with two branded hostnames under
                  example.com.
                summary: Two-nameserver set
                value:
                  hostnames:
                  - ns1.example.com
                  - ns2.example.com
                  name: Example brand nameservers
                  parent_domain_name: example.com
                  soa_rname: hostmaster.example.com
            schema:
              $ref: '#/components/schemas/VanityNameserverSetCreate'
        required: true
      responses:
        '202':
          content:
            application/json:
              examples:
                provisioning:
                  description: The set is accepted and activates once its prerequisites
                    check out.
                  summary: Newly created set (provisioning)
                  value:
                    is_default: false
                    name: Example brand nameservers
                    nameservers:
                    - hostname: ns1.example.com
                      position: 0
                    - hostname: ns2.example.com
                      position: 1
                    organization_id: organization_01kvn2kr34e9ts01z1330tkvfx
                    parent_domain_name: example.com
                    set_id: vns_01kvn2kr1qep2bd7e60tt65fxn
                    soa_rname: hostmaster.example.com
                    status: provisioning
              schema:
                $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          description: The set was accepted and is provisioning asynchronously.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Create a vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/check:
    post:
      operationId: check_vanity_nameserver_set_v1_vanity_nameserver_sets_check_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            examples:
              by_set_id:
                description: Run the read-only diagnostic for a vanity NS set by its
                  set_id.
                summary: Diagnose a set
                value:
                  set_id: vns_01kvn2kr1qep2bd7e60tt65fxn
            schema:
              $ref: '#/components/schemas/VanityNsCheckPublicReq'
        required: true
      responses:
        '200':
          content:
            application/json:
              examples:
                action_required:
                  description: An externally-registered parent domain whose nameserver
                    A/AAAA records are not yet in place.
                  summary: "Action required \u2014 records not yet published"
                  value:
                    checks:
                    - confidence: authoritative
                      detail: Vanity NS hostnames are not yet resolving to the assigned
                        anycast addresses.
                      id: ns_a_records
                      label: Nameserver A/AAAA records
                      observed:
                        required_records:
                          A:
                          - 192.174.68.145
                          - 176.97.158.145
                          AAAA:
                          - 2001:67c:1bc::145
                          - 2001:67c:10b8::145
                      remediation: Publish A (and AAAA) records for each nameserver
                        hostname pointing at the addresses in required_records.
                      severity: required
                      source: public_dns
                      status: fail
                    parent_domain_name: example.com
                    set_id: vns_01kvn2kr1qep2bd7e60tt65fxn
                    status: provisioning
                    summary:
                      detail: Nameserver A/AAAA records are not yet published for
                        ns1.example.com, ns2.example.com.
                      state: action_required
                ready:
                  description: The vanity nameservers resolve and glue is in place.
                  summary: "Ready \u2014 all checks pass"
                  value:
                    checks:
                    - confidence: authoritative
                      detail: All nameserver hostnames resolve to the assigned anycast
                        addresses.
                      id: ns_a_records
                      label: Nameserver A/AAAA records
                      observed:
                        required_records:
                          A:
                          - 192.174.68.145
                          - 176.97.158.145
                          AAAA:
                          - 2001:67c:1bc::145
                          - 2001:67c:10b8::145
                      severity: required
                      source: public_dns
                      status: pass
                    - confidence: authoritative
                      detail: Every nameserver is registered as a host object at the
                        registry.
                      id: registry_glue_registered
                      label: Glue registered at registry
                      severity: recommended
                      source: registry_epp
                      status: pass
                    - confidence: best_effort
                      detail: The parent zone publishes glue for every nameserver.
                      id: registry_glue_visible
                      label: Glue visible in parent zone
                      severity: recommended
                      source: authoritative_dns
                      status: pass
                    parent_domain_name: example.com
                    set_id: vns_01kvn2kr1qep2bd7e60tt65fxn
                    status: active
                    summary:
                      detail: All required checks passed; the vanity nameservers are
                        live.
                      state: ready
              schema:
                $ref: '#/components/schemas/VanityNsCheckRes'
          description: Diagnostic report for the set.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Run a read-only diagnostic on a vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:read
  /v1/vanity-nameserver-sets/default:
    delete:
      operationId: clear_vanity_nameserver_set_default_v1_vanity_nameserver_sets_default_delete
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClearVanityNameserverSetDefaultRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Unset the organization's default vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/{set_id}:
    delete:
      operationId: delete_vanity_nameserver_set_v1_vanity_nameserver_sets__set_id__delete
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '202':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete a vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
    get:
      operationId: get_vanity_nameserver_set_v1_vanity_nameserver_sets__set_id__get
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get a vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:read
    patch:
      operationId: set_vanity_nameserver_set_renewal_mode_v1_vanity_nameserver_sets__set_id__patch
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetRenewalModeReq'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Set the vanity nameserver set's renewal mode (expire = cancel at period
        end, renew = un-cancel)
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/{set_id}/default:
    patch:
      operationId: set_vanity_nameserver_set_default_v1_vanity_nameserver_sets__set_id__default_patch
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetVanityNameserverSetDefaultRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Set a vanity nameserver set as the org default
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/{set_id}/restore:
    post:
      operationId: restore_vanity_nameserver_set_v1_vanity_nameserver_sets__set_id__restore_post
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Restore a suspended vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/{set_id}/retry:
    post:
      operationId: retry_vanity_nameserver_set_v1_vanity_nameserver_sets__set_id__retry_post
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VanityNameserverSetSummaryDTO'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Retry activation for a failed vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:manage
  /v1/vanity-nameserver-sets/{set_id}/zones:
    get:
      operationId: list_zones_referencing_vanity_nameserver_set_v1_vanity_nameserver_sets__set_id__zones_get
      parameters:
      - in: path
        name: set_id
        required: true
        schema:
          examples:
          - vns_01h45ytscbebyvny4gc8cr8ma2
          format: typeid
          pattern: ^vns_[0-7][0-9a-hjkmnpq-tv-z]{25}$
          title: Set Id
          type: string
          x-typeid-prefix: vns
      - in: query
        name: page
        required: false
        schema:
          default: 1
          minimum: 1
          title: Page
          type: integer
      - in: query
        name: page_size
        required: false
        schema:
          default: 10
          maximum: 1000
          minimum: 1
          title: Page Size
          type: integer
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListZonesReferencingSetRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List DNS zones referencing a vanity nameserver set
      tags:
      - nameserver
      x-required-permissions:
      - vanity_ns:read
  /v1/whitelabel-branding:
    get:
      operationId: get_whitelabel_branding_v1_whitelabel_branding_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhitelabelBrandingResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get the organization's whitelabel branding config
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:read
    patch:
      operationId: patch_whitelabel_branding_v1_whitelabel_branding_patch
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WhitelabelBrandingPatch'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhitelabelBrandingResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Change the organization's whitelabel branding config (relabel / enable
        / renewal mode)
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
    post:
      operationId: create_whitelabel_branding_v1_whitelabel_branding_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              discriminator:
                mapping:
                  base: '#/components/schemas/WhitelabelBaseCreate'
                  plus: '#/components/schemas/WhitelabelPlusCreate'
                propertyName: tier
              oneOf:
              - $ref: '#/components/schemas/WhitelabelBaseCreate'
              - $ref: '#/components/schemas/WhitelabelPlusCreate'
              title: Body
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCreateRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Buy the organization's whitelabel branding (base or plus tier)
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/assets:
    get:
      operationId: list_whitelabel_assets_v1_whitelabel_branding_assets_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListBrandingAssetsResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List uploaded branding assets
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:read
    post:
      operationId: upload_whitelabel_asset_v1_whitelabel_branding_assets_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_upload_whitelabel_asset_v1_whitelabel_branding_assets_post'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandingAsset'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Upload a branding asset
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/assets/{asset_id}:
    delete:
      operationId: delete_whitelabel_asset_v1_whitelabel_branding_assets__asset_id__delete
      parameters:
      - in: path
        name: asset_id
        required: true
        schema:
          title: Asset Id
          type: string
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '204':
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Delete an uploaded branding asset
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/document:
    get:
      operationId: get_whitelabel_document_v1_whitelabel_branding_document_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandingDocument'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Get the stored branding document
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:read
    post:
      operationId: put_whitelabel_document_v1_whitelabel_branding_document_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BrandingDocument'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandingDocument'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Upsert the branding document
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
    put:
      operationId: put_whitelabel_document_v1_whitelabel_branding_document_put
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BrandingDocument'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandingDocument'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Upsert the branding document
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/email/preview:
    post:
      operationId: preview_whitelabel_email_v1_whitelabel_branding_email_preview_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreviewMailReq'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreviewMailRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Preview a transactional email template with a draft branding document
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/email/templates:
    get:
      operationId: list_whitelabel_email_templates_v1_whitelabel_branding_email_templates_get
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MailTemplateCatalogRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: List the editable transactional email templates and their content blocks
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:read
  /v1/whitelabel-branding/recheck:
    post:
      operationId: recheck_whitelabel_branding_v1_whitelabel_branding_recheck_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
              - $ref: '#/components/schemas/WhitelabelBrandingRecheck'
              - type: 'null'
              title: Body
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhitelabelBrandingResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Re-run onboarding for the organization's whitelabel branding config
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/restore:
    post:
      operationId: restore_whitelabel_branding_v1_whitelabel_branding_restore_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhitelabelBrandingResponse'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Restore a terminated whitelabel (re-enable and reprovision from the
        preserved state)
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
  /v1/whitelabel-branding/tier:
    post:
      operationId: upgrade_whitelabel_to_plus_v1_whitelabel_branding_tier_post
      parameters:
      - $ref: '#/components/parameters/DatetimeFormatHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WhitelabelUpgradeToPlus'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCreateRes'
          description: Successful Response
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
      - OAuth2PasswordBearer: []
      - APIKeyHeader: []
      summary: Upgrade the whitelabel to the plus tier (served on the customer's own
        domain)
      tags:
      - whitelabel
      x-required-permissions:
      - whitelabel_branding:manage
servers:
- description: Production environment
  url: https://api.opusdns.com
- description: Sandbox environment
  url: https://sandbox.opusdns.com
tags:
- description: 'Endpoints for authentication.

    '
  name: authentication
  x-displayName: Authentication
- description: "Endpoints for fetching historical data for objects and requests \n"
  name: archive
  x-displayName: Archive
- description: 'Endpoints for checking domain availability.

    '
  name: availability
  x-displayName: Availability
- description: "Endpoints for submitting and tracking batch command execution.\n\n\
    The Jobs API enables asynchronous execution of bulk operations through batches.\
    \ Submit multiple commands in a single request and poll for completion status.\n\
    \n### Supported Commands\n\n#### Single-resource commands\n\n| Command | Description\
    \ |\n|---------|-------------|\n| `domain_create` | Register a new domain |\n\
    | `domain_update` | Modify domain settings (contacts, nameservers, statuses, renewal\
    \ mode) |\n| `domain_transfer` | Initiate an inbound domain transfer |\n| `dns_zone_create`\
    \ | Create a new DNS zone with optional records |\n| `dns_zone_update` | Update\
    \ an existing DNS zone |\n| `contact_create` | Create a new contact |\n\n####\
    \ Bulk commands (template + instances)\n\nBulk commands use a **template + instances**\
    \ pattern. The template defines shared settings applied to all items, while each\
    \ instance specifies a target resource and optional per-resource overrides.\n\n\
    | Command | Description |\n|---------|-------------|\n| `domain_create_bulk` |\
    \ Register multiple domains |\n| `domain_update_bulk` | Update multiple domains\
    \ (statuses, nameservers, contacts, renewal mode) |\n| `domain_transfer_bulk`\
    \ | Transfer multiple domains |\n| `dns_zone_create_bulk` | Create multiple DNS\
    \ zones |\n| `dns_zone_update_bulk` | Replace rrsets (and zone attributes like\
    \ DNSSEC) across multiple DNS zones |\n| `dns_zone_patch_rrsets_bulk` | Upsert\
    \ or remove entire rrsets (by name + type) across multiple zones |\n| `dns_zone_patch_records_bulk`\
    \ | Upsert or remove individual rdata values across multiple zones |\n| `contact_create_bulk`\
    \ | Create multiple contacts |\n| `parking_create_bulk` | Create parking pages\
    \ for multiple domains |\n| `parking_enable_bulk` | Enable parking on multiple\
    \ domains |\n| `parking_disable_bulk` | Disable parking on multiple domains |\n\
    | `parking_delete_bulk` | Delete parking pages for multiple domains |\n\n### Batch\
    \ Lifecycle\n\nEach job within a batch transitions through states:\n\n1. **blocked**\
    \ \u2014 Waiting for eligibility (scheduled via `not_before`, or awaiting capacity)\n\
    2. **queued** \u2014 Eligible and awaiting processing\n3. **paused** \u2014 Paused;\
    \ must be explicitly resumed to continue\n4. **running** \u2014 Currently being\
    \ executed\n5. **succeeded** \u2014 Completed successfully\n6. **failed** \u2014\
    \ Execution failed (check `error_class` and `error_message`)\n7. **canceled**\
    \ \u2014 Job was canceled before completion\n8. **dead_letter** \u2014 Permanently\
    \ failed after exhausting retries\n\nA batch itself has a `status` field that\
    \ is either `pending` (jobs are still in progress) or `complete` (all jobs have\
    \ reached a terminal state).\n\n### Usage Pattern\n\n1. **Submit a batch** \u2014\
    \ `POST /v1/jobs` with an array of commands\n2. **Poll for status** \u2014 `GET\
    \ /v1/jobs/{batch_id}` to check progress counts and `progress_percentage`\n3.\
    \ **Review results** \u2014 `GET /v1/jobs/{batch_id}/jobs` to see individual job\
    \ outcomes\n\n### Managing Batches\n\n- **Pause** \u2014 `POST /v1/jobs/{batch_id}/pause`\
    \ pauses all eligible jobs in the batch\n- **Resume** \u2014 `POST /v1/jobs/{batch_id}/resume`\
    \ resumes all paused jobs\n- **Retry** \u2014 `POST /v1/jobs/{batch_id}/retry`\
    \ retries failed and dead-lettered jobs in the batch (see [Retrying Failed Jobs](#retrying-failed-jobs))\n\
    - **Cancel** \u2014 `DELETE /v1/jobs/{batch_id}` cancels all pending jobs in the\
    \ batch\n\nIndividual jobs can also be paused, resumed, retried, or canceled via\
    \ the `/v1/job/{job_id}` endpoints.\n\n### Retrying Failed Jobs\n\nIf jobs in\
    \ a batch end up in `failed` or `dead_letter` state \u2014 for example because\
    \ the account had insufficient funds at the time the batch was processed \u2014\
    \ you can re-attempt them without rebuilding the batch from scratch.\n\n- **Single\
    \ job:** `POST /v1/job/{job_id}/retry`\n- **Whole batch:** `POST /v1/jobs/{batch_id}/retry`\n\
    \n#### What gets retried\n\nOnly jobs in `failed` or `dead_letter` status are\
    \ eligible. Jobs in any other status are left unchanged:\n\n- `succeeded` \u2014\
    \ already complete; retrying returns **409 Conflict**\n- `canceled` \u2014 you\
    \ explicitly canceled these, so the retry won't undo that; returns **409 Conflict**\
    \ (single) or is silently skipped (batch)\n- `queued`, `blocked`, `paused`, `running`\
    \ \u2014 still in progress; not touched\n\nCalling batch retry on a mixed-state\
    \ batch returns `retried_count` (the number of `failed` / `dead_letter` jobs that\
    \ were reset for retry); everything else is left alone. If the batch has no retryable\
    \ jobs, `retried_count` is `0`. The response also splits that total into `queued_count`\
    \ (jobs dispatched immediately) and `blocked_count` (jobs held behind the topic's\
    \ rate limit or backlog \u2014 these are released automatically as capacity frees\
    \ up).\n\n#### What happens to a retried job\n\nEach retried job is reset to a\
    \ fresh attempt:\n\n- `status` \u2192 `queued`, or `blocked` if the job's topic\
    \ is rate-limited and has no capacity (or a higher-priority backlog is waiting)\
    \ \u2014 a blocked job is released to `queued` automatically as capacity frees\
    \ up\n- `attempts` \u2192 `0`\n- `not_before` \u2192 now\n- `error_class` and\
    \ `error_message` \u2192 cleared\n- The job is republished for worker pickup once\
    \ it is `queued`\n\nThe original `payload`, `idempotency_key`, `correlation_id`\
    \ (batch id), `max_attempts`, and backoff configuration are preserved. Each retry\
    \ is processed under the same worker idempotency guarantees as the original \u2014\
    \ for billing operations specifically, a retried job will not double-charge an\
    \ account that was already debited.\n\n#### Filtering by error type\n\nA batch\
    \ may contain a mix of failures that you do and don't want to retry. For example,\
    \ after adding funds to your account, you may want to retry only the jobs that\
    \ failed with `BillingInsufficientFundsError`, while leaving alone jobs that failed\
    \ for other reasons (e.g. an invalid domain name that should not be re-attempted).\n\
    \nPass one or more `error_class` query parameters to filter:\n\n```\nPOST /v1/jobs/{batch_id}/retry?error_class=BillingInsufficientFundsError\n\
    POST /v1/jobs/{batch_id}/retry?error_class=BillingInsufficientFundsError&error_class=DomainRegistryTemporaryError\n\
    ```\n\nMultiple values are OR'd \u2014 a job is retried if its `error_class` matches\
    \ **any** of the supplied values. Omitting the filter retries all `failed` and\
    \ `dead_letter` jobs in the batch.\n\nThe `error_class` for each failed job is\
    \ visible on the individual job response (`GET /v1/jobs/{batch_id}/jobs`), so\
    \ the typical flow is:\n\n1. List the failed jobs in the batch and group by `error_class`.\n\
    2. Determine which failures are recoverable.\n3. Call retry with the relevant\
    \ `error_class` filter.\n\n### Limits\n\n- Maximum **50,000 commands** per batch\n\
    - Bulk commands support up to **1,000 instances** per command\n\n### Scheduling\n\
    \nUse `not_before` to schedule batch execution for a future time (UTC timestamp).\
    \ If not provided, processing begins as soon as a worker is available.\n\n###\
    \ Idempotency\n\nEach command can include an optional `idempotency_key` to prevent\
    \ duplicate execution. If a command with the same idempotency key has already\
    \ been processed, it will be skipped.\n\n### Domain Status Updates in Batches\n\
    \nThe `domain_update` and `domain_update_bulk` commands support two mutually exclusive\
    \ approaches for modifying domain statuses. These work the same way as the `PATCH\
    \ /v1/domains/{domain_reference}` endpoint \u2014 see the [Domain management](#tag/Domain-management)\
    \ documentation for full details on `statuses` vs `status_changes`.\n\n#### Using\
    \ `status_changes` in bulk templates\n\nThe `domain_update_bulk` command is particularly\
    \ useful with `status_changes` when you need to apply the same relative status\
    \ change across many domains. Set `status_changes` in the **template** and list\
    \ the target domains as **instances**. Each instance identifies a domain by either\
    \ `name` or `domain_id` (but not both):\n\n```json\n{\n  \"command\": \"domain_update_bulk\"\
    ,\n  \"payload\": {\n    \"template\": {\n      \"status_changes\": {\n      \
    \  \"add\": [\"clientTransferProhibited\"]\n      }\n    },\n    \"instances\"\
    : [\n      { \"name\": \"example.com\" },\n      { \"name\": \"example.net\" },\n\
    \      { \"name\": \"example.org\" }\n    ]\n  }\n}\n```\n\n#### Per-domain overrides\n\
    \nIf an instance provides its own `statuses` or `status_changes` field, it completely\
    \ overrides the template's status settings for that domain. This lets you apply\
    \ a default change to most domains while handling exceptions individually:\n\n\
    ```json\n{\n  \"command\": \"domain_update_bulk\",\n  \"payload\": {\n    \"template\"\
    : {\n      \"status_changes\": {\n        \"add\": [\"clientTransferProhibited\"\
    ]\n      }\n    },\n    \"instances\": [\n      { \"name\": \"example.com\" },\n\
    \      { \"name\": \"special-case.com\", \"status_changes\": { \"remove\": [\"\
    clientHold\"] } }\n    ]\n  }\n}\n```\n\n### DNS Zone Bulk Commands\n\nThe three\
    \ `dns_zone_*_bulk` commands operate at different levels of granularity. Picking\
    \ the right one depends on how much of the zone's existing state you want to preserve.\n\
    \n| Command | Operates on | Use when |\n|---------|-------------|----------|\n\
    | `dns_zone_update_bulk` | Whole zone | Resetting rrsets (or zone attributes like\
    \ DNSSEC) across many zones |\n| `dns_zone_patch_rrsets_bulk` | Whole rrsets by\
    \ `(name, type)` | Replacing *all* records of a given type at a given name |\n\
    | `dns_zone_patch_records_bulk` | Individual rdata values | Adding or removing\
    \ a single record without touching siblings |\n\nThese are the bulk equivalents\
    \ of the single-zone `PUT` and `PATCH` DNS endpoints \u2014 see the [DNS Management](#tag/DNS-Management)\
    \ documentation for the underlying semantics. The bulk variants accept up to **100\
    \ ops per instance** for the two patch commands.\n\n#### `dns_zone_update_bulk`\n\
    \nBulk equivalent of `PUT /v1/dns/{zone_name}/rrsets` plus zone-level attribute\
    \ updates. For each zone, whatever rrsets you supply become the zone's rrsets\
    \ \u2014 anything not listed is removed. System-managed record types (SOA, DNSKEY,\
    \ DS) cannot be set via this command. This is also the command to flip DNSSEC\
    \ on or off across many zones.\n\nBoth `rrsets` and `dnssec_status` are partial-update\
    \ fields:\n\n| Value | Meaning |\n| --- | --- |\n| omitted (in both template and\
    \ instance) | leave that field unchanged on the zone |\n| `[]` (rrsets only) |\
    \ delete all records |\n| `[...]` / a status value | replace |\n\nAn instance\
    \ with neither `rrsets` nor `dnssec_status` (after the template is merged in)\
    \ is rejected as a no-op.\n\nPayload: `template` (shared `rrsets` and `dnssec_status`)\
    \ + `instances[]` (per-zone overrides).\n\n```json\n{\n  \"command\": \"dns_zone_update_bulk\"\
    ,\n  \"payload\": {\n    \"template\": {\n      \"rrsets\": [\n        {\"name\"\
    : \"@\", \"type\": \"A\", \"ttl\": 300, \"records\": [{\"rdata\": \"203.0.113.10\"\
    }]}\n      ],\n      \"dnssec_status\": \"enabled\"\n    },\n    \"instances\"\
    : [\n      { \"name\": \"example.com\" },\n      {\n        \"name\": \"example.net\"\
    ,\n        \"rrsets\": [\n          {\"name\": \"@\", \"type\": \"A\", \"ttl\"\
    : 300, \"records\": [{\"rdata\": \"203.0.113.20\"}]}\n        ]\n      }\n   \
    \ ]\n  }\n}\n```\n\nBulk-toggle DNSSEC across many zones without touching their\
    \ records \u2014 omit `rrsets` everywhere:\n\n```json\n{\n  \"command\": \"dns_zone_update_bulk\"\
    ,\n  \"payload\": {\n    \"template\": { \"dnssec_status\": \"enabled\" },\n \
    \   \"instances\": [\n      { \"name\": \"example.com\" },\n      { \"name\":\
    \ \"example.net\" },\n      { \"name\": \"example.org\" }\n    ]\n  }\n}\n```\n\
    \n#### `dns_zone_patch_rrsets_bulk`\n\nBulk equivalent of `PATCH /v1/dns/{zone_name}/rrsets`.\
    \ Each instance is `{ zone_name, ops[] }`, where each op targets an rrset by `(name,\
    \ type)`:\n\n- `op: \"upsert\"` \u2014 create or **replace** the rrset with the\
    \ records you provide. Any prior records for that `(name, type)` are discarded.\n\
    - `op: \"remove\"` \u2014 delete the entire rrset (pass `records: []`).\n\n```json\n\
    {\n  \"command\": \"dns_zone_patch_rrsets_bulk\",\n  \"payload\": {\n    \"instances\"\
    : [\n      {\n        \"zone_name\": \"example.com\",\n        \"ops\": [\n  \
    \        {\n            \"op\": \"upsert\",\n            \"rrset\": {\n      \
    \        \"name\": \"www\", \"type\": \"A\", \"ttl\": 300,\n              \"records\"\
    : [\n                {\"rdata\": \"203.0.113.10\"},\n                {\"rdata\"\
    : \"203.0.113.11\"}\n              ]\n            }\n          },\n          {\n\
    \            \"op\": \"remove\",\n            \"rrset\": {\"name\": \"old\", \"\
    type\": \"CNAME\", \"ttl\": 300, \"records\": []}\n          }\n        ]\n  \
    \    }\n    ]\n  }\n}\n```\n\n#### `dns_zone_patch_records_bulk`\n\nBulk equivalent\
    \ of `PATCH /v1/dns/{zone_name}/records`. Each instance is `{ zone_name, ops[]\
    \ }`, where each op targets a single `rdata` value inside an rrset. Note the op\
    \ payload uses a single `rdata` field, not `records[]`.\n\n- `op: \"upsert\"`\
    \ \u2014 add or update that one rdata value (creates the rrset if it doesn't exist).\
    \ Sibling records in the rrset are untouched.\n- `op: \"remove\"` \u2014 remove\
    \ just that one rdata value. Other records in the rrset remain.\n\n```json\n{\n\
    \  \"command\": \"dns_zone_patch_records_bulk\",\n  \"payload\": {\n    \"instances\"\
    : [\n      {\n        \"zone_name\": \"example.com\",\n        \"ops\": [\n  \
    \        {\n            \"op\": \"upsert\",\n            \"record\": {\n     \
    \         \"name\": \"@\", \"type\": \"MX\", \"ttl\": 300,\n              \"rdata\"\
    : \"5 new-mail.example.com.\"\n            }\n          },\n          {\n    \
    \        \"op\": \"remove\",\n            \"record\": {\n              \"name\"\
    : \"@\", \"type\": \"MX\", \"ttl\": 300,\n              \"rdata\": \"10 old-mail.example.com.\"\
    \n            }\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n"
  name: jobs
  x-displayName: Jobs
- description: "Endpoints for creating and managing contacts.\n\n### Contact Verification\
    \ Attestation\n\n`POST /v1/contacts/{contact_id}/verifications/attest` submits\
    \ attestations for a contact. The request is forwarded synchronously to the contact-verification\
    \ service, which is the source of truth for the response. When DENIC is among\
    \ the registries that flagged the contact for verification, OpusDNS additionally\
    \ queues a registry-side attest job behind the scenes.\n\n#### Workflow\n\nWhen\
    \ a registry signals that a contact requires verification (e.g. DENIC's `contactVerificationRequired`\
    \ notification), OpusDNS marks each affected domain with the `VERIFICATION_REQUIRED`\
    \ status tag. Submit attestations via this endpoint and the response reports the\
    \ resulting per-claim verification state.\n\n#### Request format\n\nThe request\
    \ body wraps the attestations under `attestations`. Fields are snake_case and\
    \ enum values are UPPERCASE.\n\n```json\n{\n  \"attestations\": [\n    {\n   \
    \   \"claim\": \"NAME\",\n      \"method\": \"AUTH\",\n      \"proof\": \"IDCARD\"\
    ,\n      \"attestation_reference\": \"ticket-12345\"\n    }\n  ]\n}\n```\n\n|\
    \ Field | Type | Notes |\n|-------|------|-------|\n| `claim` | enum | `NAME`,\
    \ `ADDRESS`, `EMAIL`, `PHONE`, `LEGAL_ENTITY` |\n| `method` | enum | `AUTH`, `VDIG`,\
    \ `ELECTRONIC_DOCUMENT`, `PHYSICAL_DOCUMENT`, `BVR`, `PVR`, `DATA`, `REACHABILITY`\
    \ |\n| `proof` | enum | `IDCARD`, `PASSPORT`, `POPULATION_REGISTER`, `RESIDENCE_PERMIT`,\
    \ `PROOF_OF_ARRIVAL`, `DRIVERS_LICENCE`, `COMPANY_REGISTER`, `COMPANY_STATEMENT`,\
    \ `BANK_ACCOUNT`, `ONLINE_PAYMENT_ACCOUNT`, `UTILITY_ACCOUNT`, `BANK_STATEMENT`,\
    \ `TAX_STATEMENT`, `WRITTEN_ATTESTATION`, `DIGITAL_ATTESTATION`, `POSTAL_VER_TRANSACTION_LOG`,\
    \ `EMAIL_VER_TRANSACTION_LOG`, `PHONE_VER_TRANSACTION_LOG`, `ADDRESS_DATABASE`\
    \ |\n| `attestation_reference` | string | Caller-supplied reference (e.g. internal\
    \ ticket ID, document hash). Up to 255 chars. |\n\n**DENIC-only constraint:**\
    \ when the contact has DENIC verification pending, all items in a single request\
    \ must share the same `method`, `proof`, and `attestation_reference`. DENIC's\
    \ `contactUPDATE` carries one verification block per call; the API enforces this\
    \ only when DENIC is in scope so callers see a synchronous 400 instead of a partial-success.\
    \ Contacts not pending DENIC verification accept heterogeneous batches.\n\n####\
    \ Response\n\nThe endpoint returns **HTTP 200 OK** with an object containing the\
    \ per-claim verification state from the contact-verification service:\n\n```json\n\
    {\n  \"verifications\": [\n    {\n      \"claim\": \"NAME\",\n      \"state\"\
    : \"VERIFIED\",\n      \"method\": \"AUTH\",\n      \"proof\": \"IDCARD\",\n \
    \     \"attestation_reference\": \"ticket-12345\",\n      \"verified_on\": \"\
    2026-05-15T12:00:00Z\",\n      \"expires_on\": null\n    }\n  ]\n}\n```\n\n| Field\
    \ | Type | Notes |\n|-------|------|-------|\n| `claim` | enum | The claim this\
    \ entry describes. |\n| `state` | enum | `UNVERIFIED`, `VERIFIED`, `IN_PROGRESS`,\
    \ `EXPIRED`. |\n| `method` | enum or null | The method that produced the current\
    \ state. |\n| `proof` | enum or null | The proof that produced the current state.\
    \ |\n| `attestation_reference` | string or null | Reference recorded with the\
    \ current state. |\n| `verified_on` | RFC3339 datetime or null | When the claim\
    \ entered the `VERIFIED` state. |\n| `expires_on` | RFC3339 datetime or null |\
    \ When the current verification expires. |\n\nWhen DENIC verification was pending\
    \ for the contact, the registry-side `contactUPDATE` is queued behind the scenes\
    \ and emits a `CONTACT/VERIFICATION/SUCCESS` or `CONTACT/VERIFICATION/FAILURE`\
    \ poll-message event keyed on `contact_id`. The `VERIFICATION_REQUIRED` status\
    \ tag on the affected domains is cleared on success.\n\n#### Error codes\n\n|\
    \ Code | Status | Meaning |\n|------|--------|---------|\n| `ERROR_DOMAIN_VERIFICATION_INCONSISTENT_METHOD_PROOF`\
    \ | 400 | DENIC verification is pending for this contact and items in the request\
    \ disagree on `method`, `proof`, or `attestation_reference`. |\n| `ERROR_DOMAIN_VERIFICATION_INVALID_COMBINATION`\
    \ | (async) | The registry rejected the DENIC attestation as an invalid method/proof/reference\
    \ combination. Surfaces as a `CONTACT/VERIFICATION/FAILURE` poll-message event.\
    \ |\n| `ERROR_DOMAIN_VERIFICATION_REGISTRY_REJECTED` | (async) | DENIC accepted\
    \ the submission at the protocol level but indicated the verification attempt\
    \ itself was not successful. Surfaces as a `CONTACT/VERIFICATION/FAILURE` poll-message\
    \ event. |\n"
  name: contact
  x-displayName: Contacts
- description: "Endpoints for managing DNS zones and records.\n\n### Zone, RRset,\
    \ and Record\n\nOpusDNS uses standard DNS terminology, and the distinction matters\
    \ when choosing which endpoint to call:\n\n- **Zone** \u2014 a DNS zone (e.g.,\
    \ `example.com`). Contains many rrsets.\n- **RRset (Resource Record Set)** \u2014\
    \ all records that share the same `(name, type)` tuple within a zone (e.g., the\
    \ set of all `A` records for `www.example.com`). An rrset is the smallest unit\
    \ DNS resolvers return in a query response.\n- **Record** \u2014 a single `rdata`\
    \ value inside an rrset (e.g., `203.0.113.10`). An rrset contains one or more\
    \ records.\n\nThree different update endpoints let you operate at different levels\
    \ of granularity:\n\n| Endpoint | Scope | Semantics |\n|----------|-------|-----------|\n\
    | `PUT /v1/dns/{zone_name}/rrsets` | Whole zone | Replaces all user-managed rrsets\
    \ in the zone |\n| `PATCH /v1/dns/{zone_name}/rrsets` | RRset-level | Upserts\
    \ or removes entire rrsets by `(name, type)` |\n| `PATCH /v1/dns/{zone_name}/records`\
    \ | Record-level | Upserts or removes individual rdata values inside an rrset\
    \ |\n\nAll three endpoints refuse writes targeting rrsets you cannot manage. SOA,\
    \ DNSKEY, DS, and the NS rrset at the zone apex are system-managed by OpusDNS:\
    \ a payload rrset or patch op targeting one \u2014 upsert **or** remove \u2014\
    \ is rejected with a `409` protected-rrset error (these rrsets are reported with\
    \ `\"protected\": true` in zone responses). To change the nameservers a domain\
    \ delegates to, update the nameservers on the domain instead.\n\nNS rrsets **below**\
    \ the apex delegate a subdomain to other nameservers and are managed like any\
    \ other record type, on all three endpoints and at zone creation. Two caveats:\
    \ records (including domain/email forwards and parking) at or below a delegated\
    \ name stop resolving publicly, because the delegated nameservers are authoritative\
    \ for that subtree; and delegations from DNSSEC-signed zones are *insecure* delegations\
    \ \u2014 child DS records are not supported, so the delegated subtree is not covered\
    \ by the parent's chain of trust.\n\n### `PUT /v1/dns/{zone_name}/rrsets` \u2014\
    \ Replace all rrsets\n\nSupply the complete set of rrsets the zone should contain.\
    \ Any existing user-managed rrset **not** in the request is removed. System-managed\
    \ rrsets cannot be set or removed via this endpoint; omit them from the payload.\n\
    \nUse this when you have authoritative, end-state data for a zone and want to\
    \ reset it to that state.\n\n### `PATCH /v1/dns/{zone_name}/rrsets` \u2014 Upsert\
    \ or remove whole rrsets\n\nSubmit an `ops[]` array where each op targets an rrset\
    \ by `(name, type)`:\n\n- `op: \"upsert\"` \u2014 create or **replace** the rrset\
    \ at `(name, type)` with the records you provide. Any records that previously\
    \ existed at that `(name, type)` are discarded.\n- `op: \"remove\"` \u2014 delete\
    \ the entire rrset at `(name, type)` (pass `records: []`).\n\n```json\n{\n  \"\
    ops\": [\n    {\n      \"op\": \"upsert\",\n      \"rrset\": {\n        \"name\"\
    : \"www\",\n        \"type\": \"A\",\n        \"ttl\": 300,\n        \"records\"\
    : [\n          {\"rdata\": \"203.0.113.10\"},\n          {\"rdata\": \"203.0.113.11\"\
    }\n        ]\n      }\n    },\n    {\n      \"op\": \"remove\",\n      \"rrset\"\
    : {\"name\": \"old\", \"type\": \"CNAME\", \"ttl\": 300, \"records\": []}\n  \
    \  }\n  ]\n}\n```\n\nUse this when you want to define the complete set of records\
    \ for a given `(name, type)` \u2014 e.g., \"`www` should have exactly these two\
    \ A records\". Any other A records for `www` that currently exist will be removed.\n\
    \n### `PATCH /v1/dns/{zone_name}/records` \u2014 Upsert or remove individual records\n\
    \nSubmit an `ops[]` array where each op targets a single `rdata` value inside\
    \ an rrset. Note the op payload uses a single `rdata` field, not `records[]`.\n\
    \n- `op: \"upsert\"` \u2014 add or update that one rdata value. The containing\
    \ rrset is created if it doesn't exist; sibling records in the rrset are left\
    \ alone.\n- `op: \"remove\"` \u2014 remove just that one rdata value. Other records\
    \ in the same rrset remain.\n\n```json\n{\n  \"ops\": [\n    {\n      \"op\":\
    \ \"upsert\",\n      \"record\": {\n        \"name\": \"@\", \"type\": \"MX\"\
    , \"ttl\": 300,\n        \"rdata\": \"5 new-mail.example.com.\"\n      }\n   \
    \ },\n    {\n      \"op\": \"remove\",\n      \"record\": {\n        \"name\"\
    : \"@\", \"type\": \"MX\", \"ttl\": 300,\n        \"rdata\": \"10 old-mail.example.com.\"\
    \n      }\n    }\n  ]\n}\n```\n\nUse this when you need to surgically add or remove\
    \ an individual record without disturbing sibling records in the same rrset \u2014\
    \ e.g., \"add one more MX target\", \"rotate one A record IP out of a pool\".\n\
    \n### Choosing the right endpoint\n\n| Scenario | Endpoint |\n|----------|----------|\n\
    | Migrating a zone from another provider; want to set it to a known state | `PUT\
    \ /rrsets` |\n| Replacing *all* records of a given name+type (e.g., the full MX\
    \ set) | `PATCH /rrsets` with `upsert` |\n| Adding or removing a single record\
    \ without touching its siblings | `PATCH /records` |\n| Swapping a name from CNAME\
    \ to A | `PATCH /rrsets` with `remove` + `upsert` |\n\nFor bulk variants that\
    \ operate across many zones in a single request, see the [Jobs](#tag/Jobs) documentation.\n"
  name: dns
  x-displayName: DNS Management
- description: "Endpoints for creating and managing domains.\n\n### Domain References\n\
    \nMost domain endpoints accept a `domain_reference` path parameter. This can be\
    \ either the **domain ID** (e.g., `domain_01jt7deb8mftf8261a54v6m3ey`) or the\
    \ **domain name** (e.g., `example.com`). Both are interchangeable wherever `domain_reference`\
    \ appears.\n\n### Transfer Lock\n\nThe `transfer_lock` field on a domain response\
    \ reflects whether the domain has the `clientTransferProhibited` status. Setting\
    \ or removing `clientTransferProhibited` via the `statuses` or `status_changes`\
    \ fields will automatically update `transfer_lock` accordingly. The `transfer_lock`\
    \ field itself is read-only.\n\n### DNS Zone Creation\n\nWhen creating or transferring\
    \ a domain, you can set `create_zone` to `true` to automatically provision a DNS\
    \ zone on OpusDNS nameserver infrastructure. Zone creation and nameserver assignment\
    \ are handled asynchronously after the domain operation completes, so there may\
    \ be a short delay before the zone is created and nameservers are active.\n\n\
    ### Updating Domain Statuses\n\n`PATCH /v1/domains/{domain_reference}` supports\
    \ two mutually exclusive approaches for modifying client statuses. You **cannot**\
    \ use both in the same request.\n\n#### Option 1: `statuses` (absolute / declarative)\n\
    \nProvide the **complete list** of client statuses the domain should have. The\
    \ API computes the diff against the current state and adds or removes statuses\
    \ accordingly.\n\n```json\n{\n  \"statuses\": [\"clientTransferProhibited\", \"\
    clientDeleteProhibited\"]\n}\n```\n\nUse this when you know exactly which statuses\
    \ the domain should end up with. Any current client statuses not in the list will\
    \ be removed.\n\n#### Option 2: `status_changes` (relative / delta)\n\nSpecify\
    \ which statuses to **add** and/or **remove** relative to the domain's current\
    \ state. Statuses not mentioned are left unchanged.\n\n```json\n{\n  \"status_changes\"\
    : {\n    \"add\": [\"clientTransferProhibited\"],\n    \"remove\": [\"clientHold\"\
    ]\n  }\n}\n```\n\nUse this when you want to make a targeted change without needing\
    \ to know the domain's full current status set. This is especially useful in bulk\
    \ operations where different domains may have different existing statuses.\n\n\
    #### Validation rules\n\n- At least one of `add` or `remove` must contain a value\n\
    - A status cannot appear in both `add` and `remove`\n- Only client statuses are\
    \ accepted \u2014 server statuses cannot be modified\n\n#### When to use which\n\
    \n| Scenario | Recommended approach |\n|----------|---------------------|\n| Setting\
    \ up a domain's statuses for the first time | `statuses` |\n| Locking many domains\
    \ for transfer without touching other statuses | `status_changes` with `add` |\n\
    | Releasing a hold on a specific domain | `status_changes` with `remove` |\n|\
    \ Replacing all statuses as part of a known workflow | `statuses` |\n| Applying\
    \ the same change across a batch of domains with varying existing statuses | `status_changes`\
    \ via `domain_update_bulk` |\n\n#### Blocking statuses\n\nSome statuses prevent\
    \ domain updates entirely. If the domain has any of the following, the update\
    \ will be rejected:\n\n- `clientUpdateProhibited`\n- `serverUpdateProhibited`\n\
    - `pendingTransfer`\n- `pendingRestore`\n- `pendingDelete`\n- `redemptionPeriod`\n\
    \nTo update a domain that has `clientUpdateProhibited`, you can remove that status\
    \ in a request that makes no other changes, or remove it first and then make additional\
    \ changes in a follow-up request.\n"
  name: domain
  x-displayName: Domain management
- description: ''
  name: domain_tld_specific
  x-displayName: TLD specific domain management
- description: "Endpoints for searching domains.\n\n### Keyword queries vs. full domain\
    \ names\n\n`GET /v1/domain-search/suggest` behaves differently depending on the\
    \ shape of the `query` value:\n\n- **Keyword or phrase** (e.g. `bluewidgets`)\
    \ \u2014 every result is a name produced by our suggestion engine, which generates\
    \ candidates and ranks them by relevance. No particular name is guaranteed to\
    \ appear.\n- **Full domain name** (e.g. `bluewidgets.de`) \u2014 the queried domain\
    \ is always returned as the first result, and its availability is checked directly\
    \ against the registry rather than coming from the suggestion engine.\n\nUse a\
    \ full domain name whenever you need a definitive answer about one specific domain.\
    \ To check several specific domains at once, use `GET /v1/availability` instead.\n\
    \n### `tlds` restricts results, it does not guarantee them\n\nThe `tlds` parameter\
    \ is a filter: results are limited to the TLDs you list, but a TLD you list may\
    \ still be absent from the response. Suggestions are ranked by relevance across\
    \ the whole requested set, so a keyword whose strongest candidates are `.com`/`.net`/`.org`\
    \ names can return no `.de` results even though available `.de` names exist for\
    \ that keyword.\n\nThis is consistent for a given keyword rather than random \u2014\
    \ the same query returns the same TLD mix each time \u2014 and raising `limit`\
    \ does not change it.\n\nTo guarantee that a TLD is represented, query it on its\
    \ own:\n\n```\nGET /v1/domain-search/suggest?query=bluewidgets&tlds=de&limit=5\n\
    ```\n\nIssuing one request per TLD is the reliable way to build a per-TLD view\
    \ in a search interface.\n\n### Availability of suggestions\n\nThe `available`\
    \ flag on a generated suggestion is best-effort. Our suggestion engine's data\
    \ is not authoritative for every TLD, and it is less accurate for some ccTLDs,\
    \ so a suggestion can occasionally be shown as available when it is not.\n\nAvailability\
    \ is authoritative in two cases: when the query is a full domain name (the first\
    \ result), and for domains checked via `GET /v1/availability`. Always confirm\
    \ with one of those before presenting a domain as purchasable.\n"
  name: domain_search
  x-displayName: Domain search
- description: "Endpoints for managing host objects (nameserver glue records).\n\n\
    ### What is a host object?\n\nA host object represents a nameserver hostname registered\
    \ at a registry. When a nameserver hostname is subordinate to a domain in your\
    \ portfolio (e.g. `ns1.example.com` under `example.com`), the registry requires\
    \ a host object carrying one or more IP addresses \u2014 commonly known as glue\
    \ records \u2014 so that resolvers can reach the nameserver even though its address\
    \ lives inside the zone it serves.\n\nThese endpoints manage **subordinate** host\
    \ objects: the parent domain of the hostname must be managed in your OpusDNS account.\
    \ Hostnames whose parent domain is not in your account are rejected with `ERROR_PARENT_DOMAIN_NOT_FOUND`.\
    \ External nameservers (e.g. your DNS provider's hostnames) do not need host objects\
    \ \u2014 simply reference them by hostname when setting a domain's nameservers.\n\
    \n### Referencing a host\n\n`GET`, `PUT` and `DELETE` accept either the host ID\
    \ (`host_...`) or the hostname as the `{host_reference}` path parameter.\n\n###\
    \ Lifecycle\n\n- **Create** \u2014 `POST /v1/hosts` with the hostname and at least\
    \ one IP address. The host object is created at the registry of the parent domain.\
    \ Creating a host that already exists returns `ERROR_HOST_ALREADY_EXISTS`.\n-\
    \ **Update** \u2014 `PUT /v1/hosts/{host_reference}` replaces the host's IP addresses\
    \ with the provided list. If the provided addresses match the current state at\
    \ the registry, the request succeeds without performing a registry update.\n-\
    \ **Delete** \u2014 `DELETE /v1/hosts/{host_reference}` removes the host object.\
    \ A host that is still in use as a nameserver by one or more domains cannot be\
    \ deleted and returns `ERROR_HOST_IN_USE`.\n\nNot all TLDs use host objects; for\
    \ TLDs without host object support, creation is rejected with `ERROR_HOST_OBJECTS_NOT_SUPPORTED`.\n"
  name: host
  x-displayName: Hosts
- description: 'Endpoints for creating and managing email forwards.

    '
  name: email_forward
  x-displayName: Email forwards
- description: 'Endpoints for creating and managing domain forwards.

    '
  name: domain_forward
  x-displayName: Domain forwards
- description: 'Endpoints for managing domain parking.

    '
  name: parking
  x-displayName: Domain parking
- description: 'Endpoints for interacting with events.

    '
  name: event
  x-displayName: Event handling
- description: 'Endpoints for managing nameservers.

    '
  name: nameserver
  x-displayName: Vanity Nameservers
- description: 'Endpoints for managing an organization''s whitelabel branding configuration.


    An organization has one whitelabel config, on one tier at a time.

    `GET /v1/whitelabel-branding` returns it, or `404` when nothing is set up.


    The **base** tier serves the customer on a subdomain of a zone OpusDNS owns, so
    it needs nothing from them but a name.

    The **plus** tier serves them on their own domain for the fully unbranded experience.


    `POST /v1/whitelabel-branding` buys a whitelabel on the chosen tier: `{"tier":
    "base", "label": "acme", "period": {"value": 1, "unit": "y"}}`, or for plus `{"tier":
    "plus", "label": "acme", "hostname": "customer.com", "dashboard_subdomain": "dash",
    "auth_subdomain": "auth", "period": {...}}`.

    A `label` is required for both tiers: every whitelabel keeps a managed subdomain,
    composed as `app.<label>.<base-tier suffix>` (dashboard) and `auth.<label>.<base-tier
    suffix>` (login).

    For base, that composed pair is what gets served: onboarding skips domain verification
    (the zone is OpusDNS-owned) but still points each host at the whitelabel edge,
    which issues a per-host certificate on demand.

    For plus, the customer''s own domain is served instead (omitting `dashboard_subdomain`
    serves the dashboard on the apex); the domain must be an OpusDNS-hosted zone owned
    by the organization, which onboarding verifies before pointing both hosts at the
    whitelabel edge. Set `create_zone: true` to have onboarding stand the zone up
    if it does not already exist. The managed base pair is published alongside the
    custom domain as a backup address.

    Labels are validated on the way in, and branding-service additionally rejects
    reserved ones (that rejection surfaces as a 400).

    Because every whitelabel composes its label, both tiers are only purchasable in
    environments configured with a base-tier zone; elsewhere create answers 403.


    Both tiers are paid, and a whitelabel is a single subscription: the tiers are
    alternatives, not add-ons.


    `POST /v1/whitelabel-branding/tier` upgrades a base whitelabel to plus in place,
    with the plus create''s domain fields (`hostname`, `dashboard_subdomain`, `auth_subdomain`
    - no `tier`, no `period`).

    The subscription keeps its term and renewal date and simply renews at the plus
    price; a yearly term additionally settles a one-time prorated fee for the remaining
    whole months now, a monthly term pays nothing now.

    The managed subdomain label is kept.

    Downgrades are not offered (cancel and rebook instead), so a whitelabel already
    on plus answers 409.


    `POST /v1/whitelabel-branding/recheck` re-runs onboarding - the customer''s retry
    after fixing their DNS setup.

    A plus recheck may also carry a corrected `hostname` plus subdomains to re-point
    the config before re-running, which is accepted only before provisioning has started.

    A base whitelabel takes no repoint: its hostnames come from its label, so it is
    moved with `PATCH` instead.


    A disabled whitelabel answers 409 to both `/recheck` and `/tier`: re-enable it
    first (`PATCH {"enabled": true}` alone re-runs onboarding).


    `PATCH /v1/whitelabel-branding` changes the config without touching its subscription
    or price.

    `{"label": "newname"}` moves the managed subdomain to a different label at any
    time, including while the whitelabel is active. On base this changes the served
    host; on plus it moves the backup pair, leaving the custom domain unchanged (re-point
    that through recheck).

    `{"enabled": false}` stops serving the whitelabel: its login client is disabled
    and OpusDNS withdraws its routing - the edge records for the served hosts are
    removed and the managed subdomain unpublished (a plus host whose DNS is still
    pointed at the edge keeps reaching the branded dashboard, but its login stays
    disabled).

    The configuration, the branding document and the provisioning history are kept,
    so `{"enabled": true}` brings it back without re-provisioning.

    Like the other write routes this is asynchronous: the response is `202` once the
    change is recorded, and a job converges the login client and the routing to it
    shortly after.

    Disabling a whitelabel does **not** cancel its subscription; billing continues
    until the subscription itself is cancelled.

    '
  name: whitelabel
  x-displayName: Whitelabel Branding
- description: 'Endpoints for creating and managing organizations.

    '
  name: organization
  x-displayName: Organizations
- description: 'Endpoints for products that are not generally available yet and are
    reached through a waitlist.


    A waitlisted product is invitation-only: OpusDNS invites an organization, its
    members apply, and OpusDNS decides on each application. Until your organization
    is invited, the product does not exist as far as this API is concerned - it is
    left out of the listing, and applying for it answers `404`. Once you have applied,
    the product stays in your listing whatever happens to the invite afterwards.


    ### Endpoints


    | Method | Path | Description |

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

    | `GET` | `/v1/organizations/product-waitlist` | The waitlisted products you may
    see, and where your own application stands on each |

    | `POST` | `/v1/organizations/product-waitlist/{product}/apply` | Apply for one
    product''s waitlist |


    Both routes act on your own organization - the one you authenticated as - even
    when an `X-Organization-Context` header names one of its sub-organizations. Neither
    takes an organization in the path.


    ### Product state


    Each entry in the listing describes one product and your own standing with it.
    Applications are per user, so two members of one organization can see different
    states for the same product:


    | Field | Description |

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

    | `product` | The product key, used as `{product}` in the apply path |

    | `display_name` | Human-readable product name |

    | `description` | What the product does |

    | `status` | `pending`, `granted` or `rejected`, or `null` while you have not
    applied |

    | `applied_on` | When you applied, or `null` |

    | `decided_on` | When OpusDNS decided, or `null` |

    | `can_apply` | Whether an apply from you would be accepted right now |


    An API key has no application of its own: it sees the products your organization
    is invited to, with `status` `null` and `can_apply` `false`.


    ### Applying


    `POST /v1/organizations/product-waitlist/{product}/apply` records your application
    as `pending`. Any member of an invited organization may apply. It requires a user
    token: an API-key token has no user to record.


    The body is optional. Send `{"note": "..."}` to say what you would use the product
    for - it is the one thing OpusDNS has to go on when deciding, so it is worth filling
    in. A note is trimmed and may be up to 1000 characters; a blank or whitespace-only
    one is rejected rather than stored. Posting no body at all applies without a note.


    One application per user per product. A second apply answers `409`, whatever state
    the first one reached - a rejection is reconsidered by OpusDNS approving it after
    all, not by applying again. A colleague''s application neither stands in for yours
    nor blocks it. `can_apply` in the listing tells you in advance whether an apply
    would be accepted.


    Being granted a product means you, the user who applied, gain access to it. Your
    colleagues apply on their own, or ask OpusDNS if the whole organization should
    have it.


    A decision is not final: OpusDNS can approve an application it rejected, and can
    withdraw a product it granted, which puts the application back to `rejected`.

    '
  name: product_waitlist
  x-displayName: Product waitlist
- description: 'Endpoints for retrieving TLD specifications.

    '
  name: tld
  x-displayName: TLD specification
- description: "Some requirements for users:\n - A user must belong to one and only\
    \ one organization.\n - Both their email address and username must be unique within\
    \ the whole system.\n"
  name: user
  x-displayName: Users
- description: "Endpoints for generating and downloading reports.\n\nReports provide\
    \ exportable snapshots of your domain, DNS, and billing data. Reports are generated\
    \ asynchronously and can be downloaded as ZIP files once complete.\n\n### Report\
    \ Types\n\n| Type | Description |\n|------|-------------|\n| `domain_inventory`\
    \ | Full inventory of all domains in the organization |\n| `dns_zone_summary`\
    \ | Summary of all DNS zones and their configuration |\n| `dns_zone_records` |\
    \ Detailed export of all DNS records across zones |\n| `billing_transactions`\
    \ | Billing transactions for the current month to date |\n| `billing_transactions_monthly`\
    \ | Billing transactions for the previous calendar month |\n| `registrar_portfolio_pdf`\
    \ | Credential-scoped registrar portfolio report as a PDF inside the ZIP download\
    \ |\n\n### Billing Transaction Reports\n\nBilling transaction reports export all\
    \ completed transactions as a CSV with the following columns: `product_reference`,\
    \ `action`, `period`, `product_type`, `amount`, `currency`, `completed_on`.\n\n\
    There are two billing report types:\n\n- **`billing_transactions`** \u2014 On-demand\
    \ report covering the current month to date (1st of the month through the time\
    \ of the request). Request this via the API like any other report type.\n- **`billing_transactions_monthly`**\
    \ \u2014 Automatically generated on the 1st of each month at 5 AM UTC, covering\
    \ the full previous calendar month. These are scheduled reports and do not need\
    \ to be manually requested.\n\nBoth types maintain their own retention of 30 reports\
    \ each, so requesting on-demand reports will not displace the monthly archive.\n\
    \n### Registrar Portfolio PDF Reports\n\nRegistrar portfolio reports are requested\
    \ with `POST /v1/reports` and require `registrar_credential_id`:\n\n```json\n\
    {\n  \"report_type\": \"registrar_portfolio_pdf\",\n  \"registrar_credential_id\"\
    : \"registrar_credential_...\"\n}\n```\n\nThe report uses registrar data from\
    \ the registrar-elements OpenSearch index, populated by the scheduled daily registrar\
    \ syncs. Report generation does not trigger a sync; it uses the most recently\
    \ synced data as-is. If the credential has no portfolio data yet (for example,\
    \ a credential created since the last sync), the report ends as `empty` rather\
    \ than `failed`: there is nothing to report on yet, and the next run after a sync\
    \ produces the real report.\n\nThe downloaded ZIP contains `registrar-portfolio-{report_typeid}.pdf`.\
    \ Before each PDF generation, the report service loads the organization's current\
    \ available TLD list from the backend and uses it to mark TLDs in the portfolio\
    \ as available or unavailable. The first version includes the sections backed\
    \ by indexed data: portfolio overview, domains/statuses/TLDs/nameservers, TLD\
    \ availability, expiry summaries, contact validation summary, and DNS record summaries.\
    \ Additional sections that require new OpenSearch fields will be added explicitly\
    \ when those fields are indexed.\n\n### Report Lifecycle\n\nA report transitions\
    \ through the following statuses:\n\n1. **pending** \u2014 Report has been queued\
    \ for generation\n2. **generating** \u2014 Report is being built\n3. **completed**\
    \ \u2014 Report is ready for download\n4. **failed** \u2014 Generation failed\n\
    5. **empty** \u2014 The organization had no data for this report type (for example\
    \ no domains, zones or forwards). No file is produced and download returns `409\
    \ Conflict`. `record_count` is `0`.\n\n`completed`, `failed` and `empty` are terminal.\n\
    \n### Usage Pattern\n\n1. **Request a report** \u2014 `POST /v1/reports` with\
    \ the desired `report_type`\n2. **Poll for completion** \u2014 `GET /v1/reports/{report_id}`\
    \ until `status` is terminal (`completed`, `empty` or `failed`)\n3. **Download**\
    \ \u2014 `GET /v1/reports/{report_id}/download` returns the report as a streamed\
    \ ZIP file\n\n### Downloading Reports\n\n`GET /v1/reports/{report_id}/download`\
    \ streams the report file directly to the client. The report **must** have status\
    \ `completed` before it can be downloaded \u2014 calling this endpoint on a report\
    \ that is still `pending` or `generating`, or that ended `empty`, returns `409\
    \ Conflict`.\n\n**Response details:**\n\n| Header | Value |\n|--------|-------|\n\
    | `Content-Type` | `application/zip` |\n| `Content-Disposition` | `attachment;\
    \ filename={report_type}-{report_id}.zip` |\n| `Content-Length` | File size in\
    \ bytes (included when known) |\n\nThe response body is streamed in chunks, so\
    \ clients should read the body incrementally rather than buffering it entirely\
    \ in memory. When `Content-Length` is present, it can be used to display download\
    \ progress.\n\n### Trigger Types\n\n| Type | Description |\n|------|-------------|\n\
    | `on_demand` | Manually requested via the API |\n| `scheduled` | Automatically\
    \ generated on a recurring schedule |\n\n### Rate Limiting\n\nReport creation\
    \ is rate-limited at two levels:\n\n- **Cooldown** \u2014 After creating a report,\
    \ you must wait **5 minutes** before requesting another report of the same type.\
    \ Requests during the cooldown return `429 Too Many Requests` with a `Retry-After`\
    \ header.\n- **Hourly limit** \u2014 Only **one report per type per organization\
    \ per clock hour** (UTC) can be generated. Duplicate requests within the same\
    \ hour will not produce an additional report.\n\n### Retention\n\nThe **30 most\
    \ recent reports** of each type are kept per organization. Older reports and their\
    \ associated files are automatically deleted when a new report is generated. Of\
    \ the `empty` reports of a type, only the most recent one is kept, so scheduled\
    \ runs for an organization without data do not fill the list with identical entries.\
    \ `registrar_portfolio_pdf` is exempt from that rule, because its reports are\
    \ per registrar credential and an `empty` result for one credential says nothing\
    \ about another.\n\n### Listing Reports\n\nUse `GET /v1/reports` to list reports\
    \ with optional filters:\n\n| Parameter | Description |\n|-----------|-------------|\n\
    | `report_type` | Filter by report type (repeatable) |\n| `status` | Filter by\
    \ report status (repeatable) |\n| `trigger_type` | Filter by trigger type |\n\
    | `created_after` | Only reports created after this timestamp |\n| `created_before`\
    \ | Only reports created before this timestamp |\n"
  name: report
  x-displayName: Reports
- description: Endpoints for creating new Tags
  name: tag
  x-displayName: Tags
- description: 'Endpoints for reporting your organization''s usage of metered products.


    These endpoints expose the usage your organization has incurred for a metered
    product, so you can monitor consumption over time and in total. Usage is reported
    as quantities only; billing costs are never included.


    ### Endpoints


    | Method | Path | Description |

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

    | `GET` | `/v1/organizations/{organization_id}/usage/{product}` | Usage as a time
    series, bucketed by granularity and grouped per sub-metric |

    | `GET` | `/v1/organizations/{organization_id}/usage/{product}/summary` | Usage
    totals over a date range, grouped per sub-metric |


    `{product}` selects the metered product. Currently supported: `ai_inference` (AI
    token consumption from OpusDNS AI features). The response carries a top-level
    `product` field identifying the reported product.


    ### Query Parameters


    | Parameter | Description |

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

    | `start_date` | Inclusive start date (`YYYY-MM-DD`) |

    | `end_date` | Inclusive end date (`YYYY-MM-DD`) |

    | `granularity` | Time-bucket size for the series endpoint: `day` (default), `week`,
    or `month` |


    `start_date` must be on or before `end_date`, otherwise the request is rejected
    with `422 Unprocessable Content`.


    ### Reported Metrics


    #### `ai_inference`


    Each group reports token counts and request volume for one AI model:


    | Field | Description |

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

    | `model` | The AI model the usage was recorded against |

    | `input_tokens` | Prompt (input) tokens consumed |

    | `output_tokens` | Generated (output) tokens |

    | `cache_read_tokens` | Tokens served from prompt cache |

    | `cache_write_tokens` | Tokens written to prompt cache |

    | `request_count` | Number of requests |


    Usage is scoped to your billing organization and requires the organization `view`
    permission.

    '
  name: usage
  x-displayName: Usage
x-tagGroups:
- name: Account management
  tags:
  - authentication
  - user
  - organization
  - product_waitlist
  - usage
- name: Domains
  tags:
  - domain
  - domain_tld_specific
  - tld
  - host
  - contact
  - event
  - availability
  - tag
- name: Services
  tags:
  - dns
  - nameserver
  - whitelabel
  - email_forward
  - domain_forward
  - parking
  - domain_search
  - archive
  - report
  - jobs
