components:
  schemas:
    Account:
      additionalProperties: false
      properties:
        created_at:
          format: date-time
          type: string
        id:
          type: string
        name:
          type: string
        status:
          type: string
      required:
        - id
        - name
        - status
        - created_at
      type: object
    AccountOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AccountOutputBody.json
          format: uri
          readOnly: true
          type: string
        account:
          $ref: "#/components/schemas/Account"
      required:
        - account
      type: object
    Add-noteRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Add-noteRequest.json
          format: uri
          readOnly: true
          type: string
        body:
          minLength: 1
          type: string
        mentioned_user_ids:
          items:
            type: string
          type:
            - array
            - "null"
      required:
        - body
      type: object
    Add-thread-tagRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Add-thread-tagRequest.json
          format: uri
          readOnly: true
          type: string
        tag_id:
          type: string
      required:
        - tag_id
      type: object
    Alias:
      additionalProperties: false
      properties:
        address:
          type: string
        created_at:
          format: date-time
          type: string
        id:
          type: string
        mailbox_id:
          type: string
      required:
        - id
        - mailbox_id
        - address
        - created_at
      type: object
    AliasListOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AliasListOutputBody.json
          format: uri
          readOnly: true
          type: string
        aliases:
          items:
            $ref: "#/components/schemas/Alias"
          type:
            - array
            - "null"
      required:
        - aliases
      type: object
    AliasOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AliasOutputBody.json
          format: uri
          readOnly: true
          type: string
        alias:
          $ref: "#/components/schemas/Alias"
      required:
        - alias
      type: object
    Assign-threadRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Assign-threadRequest.json
          format: uri
          readOnly: true
          type: string
        user_id:
          type: string
      required:
        - user_id
      type: object
    AssignInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AssignInputBody.json
          format: uri
          readOnly: true
          type: string
        role:
          default: member
          enum:
            - member
            - manager
          type: string
        user_id:
          type: string
      required:
        - user_id
        - role
      type: object
    AttachmentMeta:
      additionalProperties: false
      properties:
        content_type:
          type: string
        filename:
          type: string
        id:
          type: string
        size_bytes:
          format: int64
          type: integer
      required:
        - id
        - filename
        - content_type
        - size_bytes
      type: object
    AttachmentsOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AttachmentsOutputBody.json
          format: uri
          readOnly: true
          type: string
        attachments:
          items:
            $ref: "#/components/schemas/AttachmentMeta"
          type:
            - array
            - "null"
      required:
        - attachments
      type: object
    Auth-logoutResponse:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Auth-logoutResponse.json
          format: uri
          readOnly: true
          type: string
        ok:
          type: boolean
      required:
        - ok
      type: object
    AuthBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AuthBody.json
          format: uri
          readOnly: true
          type: string
        access_token:
          type: string
        account_id:
          type: string
        csrf_token:
          type: string
        expires_at:
          type: string
        refresh_token:
          type: string
        role:
          type: string
        user_id:
          type: string
      required:
        - account_id
        - user_id
        - role
      type: object
    Availability:
      additionalProperties: false
      properties:
        available:
          type: boolean
        currency:
          type: string
        domain:
          type: string
        first_free:
          type: boolean
        price_cents:
          format: int64
          type: integer
      required:
        - domain
        - available
        - price_cents
        - currency
        - first_free
      type: object
    AvailabilityOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/AvailabilityOutputBody.json
          format: uri
          readOnly: true
          type: string
        availability:
          $ref: "#/components/schemas/Availability"
      required:
        - availability
      type: object
    Billing-checkoutRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Billing-checkoutRequest.json
          format: uri
          readOnly: true
          type: string
        cancel_url:
          type: string
        plan:
          default: monthly
          enum:
            - monthly
            - yearly
          type: string
        success_url:
          type: string
      required:
        - plan
        - success_url
        - cancel_url
      type: object
    BodyAttachment:
      additionalProperties: false
      properties:
        content_type:
          type: string
        filename:
          type: string
        id:
          type: string
        size:
          format: int64
          type: integer
      required:
        - id
        - filename
        - content_type
        - size
      type: object
    BodyOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/BodyOutputBody.json
          format: uri
          readOnly: true
          type: string
        attachments:
          items:
            $ref: "#/components/schemas/BodyAttachment"
          type:
            - array
            - "null"
        cc:
          items:
            type: string
          type:
            - array
            - "null"
        from:
          type: string
        from_addr:
          type: string
        subject:
          type: string
        text:
          type: string
        to:
          items:
            type: string
          type:
            - array
            - "null"
      required:
        - subject
        - from
        - from_addr
        - to
        - cc
        - text
        - attachments
      type: object
    CheckoutOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/CheckoutOutputBody.json
          format: uri
          readOnly: true
          type: string
        url:
          type: string
      required:
        - url
      type: object
    ComposeAttachment:
      additionalProperties: false
      properties:
        content_type:
          type: string
        data_base64:
          description: base64-encoded file bytes
          type: string
        filename:
          minLength: 1
          type: string
      required:
        - filename
        - data_base64
      type: object
    ComposeInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ComposeInputBody.json
          format: uri
          readOnly: true
          type: string
        attachments:
          items:
            $ref: "#/components/schemas/ComposeAttachment"
          type:
            - array
            - "null"
        body_text:
          type: string
        cc:
          items:
            type: string
          type:
            - array
            - "null"
        in_reply_to:
          type: string
        mailbox_id:
          type: string
        subject:
          maxLength: 255
          type: string
        thread_id:
          description: attach as an inline reply to this thread
          type: string
        to:
          items:
            type: string
          minItems: 1
          type:
            - array
            - "null"
      required:
        - mailbox_id
        - to
        - subject
        - body_text
      type: object
    ComposeOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ComposeOutputBody.json
          format: uri
          readOnly: true
          type: string
        message_id:
          type: string
        status:
          type: string
      required:
        - message_id
        - status
      type: object
    CountsOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/CountsOutputBody.json
          format: uri
          readOnly: true
          type: string
        counts:
          $ref: "#/components/schemas/ThreadCounts"
      required:
        - counts
      type: object
    Create-aliasRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Create-aliasRequest.json
          format: uri
          readOnly: true
          type: string
        address:
          format: email
          type: string
      required:
        - address
      type: object
    Create-tagRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Create-tagRequest.json
          format: uri
          readOnly: true
          type: string
        color:
          type: string
        name:
          maxLength: 40
          minLength: 1
          type: string
      required:
        - name
      type: object
    CreateMailboxInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/CreateMailboxInputBody.json
          format: uri
          readOnly: true
          type: string
        address:
          format: email
          type: string
        display_name:
          maxLength: 120
          type: string
        type:
          default: personal
          enum:
            - personal
            - shared
          type: string
      required:
        - address
        - display_name
        - type
      type: object
    CreateRecordInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/CreateRecordInputBody.json
          format: uri
          readOnly: true
          type: string
        name:
          type: string
        rdata: {}
        ttl:
          default: 3600
          format: int64
          type: integer
        type:
          enum:
            - A
            - AAAA
            - MX
            - TXT
            - CNAME
            - NS
            - SRV
            - CAA
          type: string
      required:
        - name
        - type
        - ttl
        - rdata
      type: object
    CreateUserInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/CreateUserInputBody.json
          format: uri
          readOnly: true
          type: string
        display_name:
          maxLength: 120
          type: string
        email:
          format: email
          type: string
        password:
          minLength: 10
          type: string
        role:
          default: member
          enum:
            - owner
            - member
          type: string
      required:
        - email
        - password
        - display_name
        - role
      type: object
    DeviceOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/DeviceOutputBody.json
          format: uri
          readOnly: true
          type: string
        id:
          type: string
        platform:
          type: string
      required:
        - id
        - platform
      type: object
    DirectoryOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/DirectoryOutputBody.json
          format: uri
          readOnly: true
          type: string
        users:
          items:
            $ref: "#/components/schemas/DirectoryUser"
          type:
            - array
            - "null"
      required:
        - users
      type: object
    DirectoryUser:
      additionalProperties: false
      properties:
        display_name:
          type: string
        email:
          type: string
        id:
          type: string
      required:
        - id
        - display_name
        - email
      type: object
    Domain:
      additionalProperties: false
      properties:
        autorenew:
          type: boolean
        created_at:
          format: date-time
          type: string
        expires_at:
          format: date-time
          type: string
        fqdn:
          type: string
        id:
          type: string
        mode:
          type: string
        status:
          type: string
      required:
        - id
        - fqdn
        - status
        - mode
        - autorenew
        - created_at
      type: object
    Domain-connectRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Domain-connectRequest.json
          format: uri
          readOnly: true
          type: string
        fqdn:
          type: string
        mode:
          description: delegated = point your nameservers at us; external = keep your DNS and add records
          enum:
            - delegated
            - external
          type: string
      required:
        - fqdn
        - mode
      type: object
    DomainListOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/DomainListOutputBody.json
          format: uri
          readOnly: true
          type: string
        domains:
          items:
            $ref: "#/components/schemas/Domain"
          type:
            - array
            - "null"
      required:
        - domains
      type: object
    DomainOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/DomainOutputBody.json
          format: uri
          readOnly: true
          type: string
        domain:
          $ref: "#/components/schemas/Domain"
      required:
        - domain
      type: object
    DomainSetup:
      additionalProperties: false
      properties:
        domain_id:
          type: string
        fqdn:
          type: string
        mode:
          type: string
        nameservers:
          items:
            type: string
          type:
            - array
            - "null"
        records:
          items:
            $ref: "#/components/schemas/SetupRecord"
          type:
            - array
            - "null"
        status:
          type: string
        verification_token:
          type: string
      required:
        - domain_id
        - fqdn
        - mode
        - status
        - nameservers
        - records
        - verification_token
      type: object
    DomainSetupOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/DomainSetupOutputBody.json
          format: uri
          readOnly: true
          type: string
        setup:
          $ref: "#/components/schemas/DomainSetup"
      required:
        - setup
      type: object
    EntitlementOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/EntitlementOutputBody.json
          format: uri
          readOnly: true
          type: string
        active:
          type: boolean
        plan:
          type: string
      required:
        - active
        - plan
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    ErrorModel:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ErrorModel.json
          format: uri
          readOnly: true
          type: string
        detail:
          description: A human-readable explanation specific to this occurrence of the problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: "#/components/schemas/ErrorDetail"
          type:
            - array
            - "null"
        instance:
          description: A URI reference that identifies the specific occurrence of the problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
      type: object
    Folder:
      additionalProperties: false
      properties:
        id:
          type: string
        kind:
          type: string
        name:
          type: string
        unread:
          format: int64
          type: integer
      required:
        - id
        - kind
        - name
        - unread
      type: object
    FoldersOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/FoldersOutputBody.json
          format: uri
          readOnly: true
          type: string
        folders:
          items:
            $ref: "#/components/schemas/Folder"
          type:
            - array
            - "null"
      required:
        - folders
      type: object
    HealthOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/HealthOutputBody.json
          format: uri
          readOnly: true
          type: string
        commit:
          type: string
        status:
          examples:
            - ok
          type: string
        version:
          type: string
      required:
        - status
        - version
        - commit
      type: object
    LoginInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/LoginInputBody.json
          format: uri
          readOnly: true
          type: string
        client:
          default: web
          enum:
            - web
            - mobile
          type: string
        email:
          format: email
          type: string
        password:
          type: string
        totp_code:
          type: string
      required:
        - client
        - email
        - password
      type: object
    Mailbox:
      additionalProperties: false
      properties:
        address:
          type: string
        catch_all:
          type: boolean
        created_at:
          format: date-time
          type: string
        display_name:
          type: string
        id:
          type: string
        local_part:
          type: string
        type:
          type: string
      required:
        - id
        - address
        - local_part
        - display_name
        - type
        - catch_all
        - created_at
      type: object
    MailboxListOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MailboxListOutputBody.json
          format: uri
          readOnly: true
          type: string
        mailboxes:
          items:
            $ref: "#/components/schemas/Mailbox"
          type:
            - array
            - "null"
      required:
        - mailboxes
      type: object
    MailboxMember:
      additionalProperties: false
      properties:
        display_name:
          type: string
        email:
          type: string
        role:
          type: string
        user_id:
          type: string
      required:
        - user_id
        - display_name
        - email
        - role
      type: object
    MailboxOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MailboxOutputBody.json
          format: uri
          readOnly: true
          type: string
        mailbox:
          $ref: "#/components/schemas/Mailbox"
      required:
        - mailbox
      type: object
    MeOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MeOutputBody.json
          format: uri
          readOnly: true
          type: string
        csrf_token:
          type: string
        mailboxes:
          items:
            $ref: "#/components/schemas/Mailbox"
          type:
            - array
            - "null"
        user:
          $ref: "#/components/schemas/User"
      required:
        - user
        - mailboxes
      type: object
    MembersOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MembersOutputBody.json
          format: uri
          readOnly: true
          type: string
        members:
          items:
            $ref: "#/components/schemas/MailboxMember"
          type:
            - array
            - "null"
      required:
        - members
      type: object
    Mention:
      additionalProperties: false
      properties:
        actor_name:
          type: string
        actor_user_id:
          type: string
        created_at:
          format: date-time
          type: string
        id:
          type: string
        mailbox_id:
          type: string
        note_id:
          type: string
        read_at:
          format: date-time
          type: string
        snippet:
          type: string
        subject:
          type: string
        thread_id:
          type: string
      required:
        - id
        - thread_id
        - mailbox_id
        - actor_user_id
        - actor_name
        - subject
        - snippet
        - created_at
      type: object
    MentionsOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MentionsOutputBody.json
          format: uri
          readOnly: true
          type: string
        mentions:
          items:
            $ref: "#/components/schemas/Mention"
          type:
            - array
            - "null"
        unread:
          format: int64
          type: integer
      required:
        - mentions
        - unread
      type: object
    Message:
      additionalProperties: false
      properties:
        cc:
          items:
            type: string
          type:
            - array
            - "null"
        direction:
          type: string
        flagged:
          type: boolean
        from:
          type: string
        from_addr:
          type: string
        has_attachments:
          type: boolean
        id:
          type: string
        received_at:
          format: date-time
          type: string
        seen:
          type: boolean
        sent_at:
          format: date-time
          type: string
        snippet:
          type: string
        subject:
          type: string
        thread_id:
          type: string
        to:
          items:
            type: string
          type:
            - array
            - "null"
      required:
        - id
        - thread_id
        - from
        - from_addr
        - to
        - cc
        - subject
        - snippet
        - received_at
        - seen
        - flagged
        - direction
        - has_attachments
      type: object
    MessagesOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/MessagesOutputBody.json
          format: uri
          readOnly: true
          type: string
        messages:
          items:
            $ref: "#/components/schemas/Message"
          type:
            - array
            - "null"
      required:
        - messages
      type: object
    Note:
      additionalProperties: false
      properties:
        author_user_id:
          type: string
        body:
          type: string
        created_at:
          format: date-time
          type: string
        id:
          type: string
      required:
        - id
        - author_user_id
        - body
        - created_at
      type: object
    NoteOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/NoteOutputBody.json
          format: uri
          readOnly: true
          type: string
        note:
          $ref: "#/components/schemas/Note"
      required:
        - note
      type: object
    NotesOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/NotesOutputBody.json
          format: uri
          readOnly: true
          type: string
        notes:
          items:
            $ref: "#/components/schemas/Note"
          type:
            - array
            - "null"
      required:
        - notes
      type: object
    OkOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/OkOutputBody.json
          format: uri
          readOnly: true
          type: string
        ok:
          type: boolean
      required:
        - ok
      type: object
    OrderDomainInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/OrderDomainInputBody.json
          format: uri
          readOnly: true
          type: string
        eligibility_type:
          type: string
        fqdn:
          type: string
        id_type:
          enum:
            - ABN
            - ACN
          type: string
        registrant_id:
          type: string
        registrant_name:
          type: string
      required:
        - fqdn
      type: object
    Record:
      additionalProperties: false
      properties:
        id:
          type: string
        managed:
          type: boolean
        name:
          type: string
        rdata: {}
        ttl:
          format: int64
          type: integer
        type:
          type: string
      required:
        - id
        - name
        - type
        - ttl
        - rdata
        - managed
      type: object
    RecordCreatedOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/RecordCreatedOutputBody.json
          format: uri
          readOnly: true
          type: string
        id:
          type: string
      required:
        - id
      type: object
    RecordListOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/RecordListOutputBody.json
          format: uri
          readOnly: true
          type: string
        records:
          items:
            $ref: "#/components/schemas/Record"
          type:
            - array
            - "null"
      required:
        - records
      type: object
    RefreshInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/RefreshInputBody.json
          format: uri
          readOnly: true
          type: string
        refresh_token:
          type: string
      required:
        - refresh_token
      type: object
    Register-deviceRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Register-deviceRequest.json
          format: uri
          readOnly: true
          type: string
        platform:
          enum:
            - ios
            - android
          type: string
        push_token:
          minLength: 1
          type: string
      required:
        - platform
        - push_token
      type: object
    SearchOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/SearchOutputBody.json
          format: uri
          readOnly: true
          type: string
        results:
          items:
            $ref: "#/components/schemas/SearchResult"
          type:
            - array
            - "null"
      required:
        - results
      type: object
    SearchResult:
      additionalProperties: false
      properties:
        from:
          type: string
        message_id:
          type: string
        score:
          format: double
          type: number
        snippet:
          type: string
        subject:
          type: string
        thread_id:
          type: string
      required:
        - message_id
        - thread_id
        - subject
        - snippet
        - from
        - score
      type: object
    Set-mailbox-catch-allRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Set-mailbox-catch-allRequest.json
          format: uri
          readOnly: true
          type: string
        catch_all:
          type: boolean
      required:
        - catch_all
      type: object
    SetupRecord:
      additionalProperties: false
      properties:
        host:
          type: string
        name:
          type: string
        purpose:
          type: string
        ttl:
          format: int64
          type: integer
        type:
          type: string
        value:
          type: string
      required:
        - purpose
        - host
        - name
        - type
        - value
        - ttl
      type: object
    SignupInputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/SignupInputBody.json
          format: uri
          readOnly: true
          type: string
        account_name:
          maxLength: 120
          minLength: 1
          type: string
        client:
          default: web
          enum:
            - web
            - mobile
          type: string
        display_name:
          maxLength: 120
          type: string
        email:
          format: email
          type: string
        password:
          maxLength: 200
          minLength: 10
          type: string
      required:
        - client
        - account_name
        - email
        - password
        - display_name
      type: object
    Tag:
      additionalProperties: false
      properties:
        color:
          type: string
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
        - color
      type: object
    TagOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/TagOutputBody.json
          format: uri
          readOnly: true
          type: string
        tag:
          $ref: "#/components/schemas/Tag"
      required:
        - tag
      type: object
    TagsOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/TagsOutputBody.json
          format: uri
          readOnly: true
          type: string
        tags:
          items:
            $ref: "#/components/schemas/Tag"
          type:
            - array
            - "null"
      required:
        - tags
      type: object
    ThreadCounts:
      additionalProperties: false
      properties:
        assigned:
          format: int64
          type: integer
        closed:
          format: int64
          type: integer
        open:
          format: int64
          type: integer
        snoozed:
          format: int64
          type: integer
        total:
          format: int64
          type: integer
        unread:
          format: int64
          type: integer
      required:
        - open
        - snoozed
        - closed
        - assigned
        - unread
        - total
      type: object
    ThreadOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ThreadOutputBody.json
          format: uri
          readOnly: true
          type: string
        thread:
          $ref: "#/components/schemas/ThreadSummary"
      required:
        - thread
      type: object
    ThreadShare:
      additionalProperties: false
      properties:
        display_name:
          type: string
        email:
          type: string
        user_id:
          type: string
      required:
        - user_id
        - display_name
        - email
      type: object
    ThreadSharesOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ThreadSharesOutputBody.json
          format: uri
          readOnly: true
          type: string
        shares:
          items:
            $ref: "#/components/schemas/ThreadShare"
          type:
            - array
            - "null"
      required:
        - shares
      type: object
    ThreadSummary:
      additionalProperties: false
      properties:
        assignee_user_id:
          type: string
        id:
          type: string
        last_from:
          type: string
        last_message_at:
          format: date-time
          type: string
        mailbox_id:
          type: string
        message_count:
          format: int64
          type: integer
        snippet:
          type: string
        snoozed_until:
          format: date-time
          type: string
        status:
          type: string
        subject:
          type: string
        tags:
          items:
            $ref: "#/components/schemas/Tag"
          type:
            - array
            - "null"
        unread:
          format: int64
          type: integer
      required:
        - id
        - mailbox_id
        - subject
        - last_message_at
        - message_count
        - status
        - unread
        - snippet
        - last_from
        - tags
      type: object
    ThreadsOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/ThreadsOutputBody.json
          format: uri
          readOnly: true
          type: string
        threads:
          items:
            $ref: "#/components/schemas/ThreadSummary"
          type:
            - array
            - "null"
      required:
        - threads
      type: object
    Update-deviceRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Update-deviceRequest.json
          format: uri
          readOnly: true
          type: string
        muted:
          type: boolean
        quiet_from:
          format: int64
          maximum: 23
          minimum: 0
          type: integer
        quiet_to:
          format: int64
          maximum: 23
          minimum: 0
          type: integer
      required:
        - muted
      type: object
    Update-messageRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Update-messageRequest.json
          format: uri
          readOnly: true
          type: string
        flagged:
          type: boolean
        move_folder:
          enum:
            - inbox
            - archive
            - trash
            - spam
          type: string
        seen:
          type: boolean
      type: object
    Update-threadRequest:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/Update-threadRequest.json
          format: uri
          readOnly: true
          type: string
        snoozed_until:
          format: date-time
          type: string
        status:
          enum:
            - open
            - snoozed
            - closed
          type: string
      required:
        - status
      type: object
    User:
      additionalProperties: false
      properties:
        created_at:
          format: date-time
          type: string
        display_name:
          type: string
        email:
          type: string
        id:
          type: string
        role:
          type: string
        status:
          type: string
      required:
        - id
        - email
        - display_name
        - role
        - status
        - created_at
      type: object
    UserListOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/UserListOutputBody.json
          format: uri
          readOnly: true
          type: string
        users:
          items:
            $ref: "#/components/schemas/User"
          type:
            - array
            - "null"
      required:
        - users
      type: object
    UserOutputBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - //schemas/UserOutputBody.json
          format: uri
          readOnly: true
          type: string
        user:
          $ref: "#/components/schemas/User"
      required:
        - user
      type: object
  securitySchemes:
    bearer:
      scheme: bearer
      type: http
    cookie:
      in: cookie
      name: anfon_session
      type: apiKey
info:
  description: Email you actually own. OpenAPI 3.1 contract — source of truth for the generated TS client.
  title: Anfon API
  version: dev
openapi: 3.1.0
paths:
  /v1/account:
    get:
      operationId: get-account
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AccountOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Account details
      tags:
        - account
  /v1/auth/login:
    post:
      operationId: auth-login
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LoginInputBody"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthBody"
          description: OK
          headers:
            Domain:
              schema:
                type: string
            Expires:
              schema:
                type: string
            HttpOnly:
              schema:
                type: boolean
            MaxAge:
              schema:
                format: int64
                type: integer
            Name:
              schema:
                type: string
            Partitioned:
              schema:
                type: boolean
            Path:
              schema:
                type: string
            Quoted:
              schema:
                type: boolean
            Raw:
              schema:
                type: string
            RawExpires:
              schema:
                type: string
            SameSite:
              schema:
                format: int64
                type: integer
            Secure:
              schema:
                type: boolean
            Set-Cookie:
              schema:
                type: string
            Unparsed:
              schema:
                type: string
            Value:
              schema:
                type: string
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      summary: Authenticate and start a session
      tags:
        - auth
  /v1/auth/logout:
    post:
      operationId: auth-logout
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Auth-logoutResponse"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Revoke the current session
      tags:
        - auth
  /v1/auth/refresh:
    post:
      operationId: auth-refresh
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RefreshInputBody"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthBody"
          description: OK
          headers:
            Domain:
              schema:
                type: string
            Expires:
              schema:
                type: string
            HttpOnly:
              schema:
                type: boolean
            MaxAge:
              schema:
                format: int64
                type: integer
            Name:
              schema:
                type: string
            Partitioned:
              schema:
                type: boolean
            Path:
              schema:
                type: string
            Quoted:
              schema:
                type: boolean
            Raw:
              schema:
                type: string
            RawExpires:
              schema:
                type: string
            SameSite:
              schema:
                format: int64
                type: integer
            Secure:
              schema:
                type: boolean
            Set-Cookie:
              schema:
                type: string
            Unparsed:
              schema:
                type: string
            Value:
              schema:
                type: string
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      summary: Rotate a refresh token (mobile/api)
      tags:
        - auth
  /v1/auth/signup:
    post:
      operationId: auth-signup
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignupInputBody"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthBody"
          description: Created
          headers:
            Domain:
              schema:
                type: string
            Expires:
              schema:
                type: string
            HttpOnly:
              schema:
                type: boolean
            MaxAge:
              schema:
                format: int64
                type: integer
            Name:
              schema:
                type: string
            Partitioned:
              schema:
                type: boolean
            Path:
              schema:
                type: string
            Quoted:
              schema:
                type: boolean
            Raw:
              schema:
                type: string
            RawExpires:
              schema:
                type: string
            SameSite:
              schema:
                format: int64
                type: integer
            Secure:
              schema:
                type: boolean
            Set-Cookie:
              schema:
                type: string
            Unparsed:
              schema:
                type: string
            Value:
              schema:
                type: string
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      summary: Create an account + owner and start a session
      tags:
        - auth
  /v1/billing/checkout:
    post:
      operationId: billing-checkout
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Billing-checkoutRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Start a subscription checkout (owner)
      tags:
        - billing
  /v1/billing/entitlement:
    get:
      operationId: billing-entitlement
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EntitlementOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Current subscription entitlement
      tags:
        - billing
  /v1/devices:
    post:
      operationId: register-device
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Register-deviceRequest"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeviceOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Register an Expo push token
      tags:
        - devices
  /v1/devices/{device_id}:
    delete:
      operationId: delete-device
      parameters:
        - in: path
          name: device_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Unregister a device
      tags:
        - devices
    patch:
      operationId: update-device
      parameters:
        - in: path
          name: device_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Update-deviceRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Update device mute / quiet-hours
      tags:
        - devices
  /v1/directory:
    get:
      operationId: list-directory
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DirectoryOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List account people for @mention pickers
      tags:
        - users
  /v1/domains:
    get:
      operationId: list-domains
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DomainListOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List domains
      tags:
        - domains
    post:
      operationId: domain-order
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrderDomainInputBody"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DomainOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Order a domain + auto-provision DNS/DKIM (owner)
      tags:
        - domains
  /v1/domains/availability:
    get:
      operationId: domain-availability
      parameters:
        - explode: false
          in: query
          name: fqdn
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AvailabilityOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Check domain availability + price
      tags:
        - domains
  /v1/domains/connect:
    post:
      operationId: domain-connect
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Domain-connectRequest"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DomainOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Connect a domain you already own (delegate NS or add records; owner)
      tags:
        - domains
  /v1/domains/{domain_id}:
    delete:
      operationId: delete-domain
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Remove a domain + its DNS/DKIM (owner)
      tags:
        - domains
  /v1/domains/{domain_id}/records:
    get:
      operationId: list-dns-records
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecordListOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List DNS records for a domain
      tags:
        - dns
    post:
      operationId: create-dns-record
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateRecordInputBody"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecordCreatedOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Create a custom DNS record (owner)
      tags:
        - dns
  /v1/domains/{domain_id}/records/{record_id}:
    delete:
      operationId: delete-dns-record
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
        - in: path
          name: record_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Delete a custom DNS record (owner)
      tags:
        - dns
  /v1/domains/{domain_id}/setup:
    get:
      operationId: domain-setup
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DomainSetupOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: "Onboarding instructions: nameservers (delegated) or records to add (external)"
      tags:
        - domains
  /v1/domains/{domain_id}/verify:
    post:
      operationId: domain-verify
      parameters:
        - in: path
          name: domain_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DomainOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Check DNS and activate a connected domain (owner)
      tags:
        - domains
  /v1/health:
    get:
      operationId: health
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      summary: Liveness/health probe
      tags:
        - system
  /v1/mailboxes:
    get:
      operationId: list-mailboxes
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MailboxListOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List accessible mailboxes
      tags:
        - mailboxes
    post:
      operationId: create-mailbox
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateMailboxInputBody"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MailboxOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Create a mailbox (owner)
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}:
    patch:
      operationId: set-mailbox-catch-all
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Set-mailbox-catch-allRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Set whether a mailbox is the domain catch-all (owner)
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}/aliases:
    get:
      operationId: list-aliases
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AliasListOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List a mailbox's alias addresses
      tags:
        - mailboxes
    post:
      operationId: create-alias
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Create-aliasRequest"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AliasOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Add an alias address that delivers into a mailbox
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}/aliases/{alias_id}:
    delete:
      operationId: delete-alias
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
        - in: path
          name: alias_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Remove an alias
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}/folders:
    get:
      operationId: list-folders
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FoldersOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List a mailbox's folders + unread counts
      tags:
        - folders
  /v1/mailboxes/{mailbox_id}/members:
    get:
      operationId: list-mailbox-members
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MembersOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List co-collaborators on a mailbox
      tags:
        - mailboxes
    post:
      operationId: assign-mailbox
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AssignInputBody"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Assign a user to a mailbox (owner)
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}/members/{user_id}:
    delete:
      operationId: remove-mailbox-member
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
        - in: path
          name: user_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Remove a user from a mailbox (owner)
      tags:
        - mailboxes
  /v1/mailboxes/{mailbox_id}/tags:
    get:
      operationId: list-tags
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List a mailbox's tags
      tags:
        - tags
    post:
      operationId: create-tag
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Create-tagRequest"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Create a tag on a mailbox
      tags:
        - tags
  /v1/mailboxes/{mailbox_id}/tags/{tag_id}:
    delete:
      operationId: delete-tag
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
        - in: path
          name: tag_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Delete a tag from a mailbox
      tags:
        - tags
  /v1/mailboxes/{mailbox_id}/thread-counts:
    get:
      operationId: thread-counts
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CountsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Triage counts for a mailbox (open/snoozed/closed/assigned/unread)
      tags:
        - threads
  /v1/mailboxes/{mailbox_id}/threads:
    get:
      operationId: list-threads
      parameters:
        - in: path
          name: mailbox_id
          required: true
          schema:
            type: string
        - description: optional folder filter
          explode: false
          in: query
          name: folder
          schema:
            description: optional folder filter
            enum:
              - inbox
              - sent
              - drafts
              - spam
              - trash
              - archive
            type: string
        - description: optional tag filter
          explode: false
          in: query
          name: tag
          schema:
            description: optional tag filter
            type: string
        - description: optional status filter (Open/Later/Done)
          explode: false
          in: query
          name: status
          schema:
            description: optional status filter (Open/Later/Done)
            enum:
              - open
              - snoozed
              - closed
            type: string
        - description: optional assignee filter (user id)
          explode: false
          in: query
          name: assignee
          schema:
            description: optional assignee filter (user id)
            type: string
        - explode: false
          in: query
          name: limit
          schema:
            default: 50
            format: int64
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ThreadsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List threads in a mailbox
      tags:
        - threads
  /v1/me:
    get:
      operationId: get-me
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MeOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Current user + accessible mailboxes
      tags:
        - account
  /v1/mentions:
    get:
      operationId: list-mentions
      parameters:
        - explode: false
          in: query
          name: limit
          schema:
            default: 50
            format: int64
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MentionsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List the caller's @mentions (+ unread count)
      tags:
        - mentions
  /v1/mentions/read-all:
    post:
      operationId: read-all-mentions
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Mark all the caller's mentions read
      tags:
        - mentions
  /v1/mentions/{mention_id}/read:
    post:
      operationId: read-mention
      parameters:
        - in: path
          name: mention_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Mark a mention read
      tags:
        - mentions
  /v1/messages:
    post:
      operationId: send-message
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ComposeInputBody"
        required: true
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ComposeOutputBody"
          description: Accepted
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Compose + send a message (authenticated; no open relay)
      tags:
        - messages
  /v1/messages/{message_id}:
    patch:
      operationId: update-message
      parameters:
        - in: path
          name: message_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Update-messageRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Update message (seen/flagged/move)
      tags:
        - messages
  /v1/messages/{message_id}/attachments:
    get:
      operationId: list-attachments
      parameters:
        - in: path
          name: message_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttachmentsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List a message's attachments (metadata + ids)
      tags:
        - messages
  /v1/messages/{message_id}/body:
    get:
      operationId: message-body
      parameters:
        - in: path
          name: message_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BodyOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Decrypted message body + headers
      tags:
        - messages
  /v1/search:
    get:
      operationId: search
      parameters:
        - explode: false
          in: query
          name: mailbox_id
          schema:
            type: string
        - explode: false
          in: query
          name: q
          schema:
            type: string
        - explode: false
          in: query
          name: limit
          schema:
            default: 25
            format: int64
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SearchOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Hybrid FTS + semantic search
      tags:
        - search
  /v1/threads:
    get:
      operationId: list-all-threads
      parameters:
        - description: optional status filter
          explode: false
          in: query
          name: status
          schema:
            description: optional status filter
            enum:
              - open
              - snoozed
              - closed
            type: string
        - description: optional assignee filter (user id)
          explode: false
          in: query
          name: assignee
          schema:
            description: optional assignee filter (user id)
            type: string
        - explode: false
          in: query
          name: limit
          schema:
            default: 100
            format: int64
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ThreadsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Cross-inbox threads (All Open / Assigned to me)
      tags:
        - threads
  /v1/threads/counts:
    get:
      operationId: all-thread-counts
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CountsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Cross-inbox counts (open + assigned to me)
      tags:
        - threads
  /v1/threads/{thread_id}:
    get:
      operationId: get-thread
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ThreadOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Get a single thread (status/assignee/counts)
      tags:
        - threads
    patch:
      operationId: update-thread
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Update-threadRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Set thread status (open/snoozed/closed)
      tags:
        - threads
  /v1/threads/{thread_id}/assign:
    post:
      operationId: assign-thread
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Assign-threadRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Assign a thread to a mailbox member
      tags:
        - threads
  /v1/threads/{thread_id}/messages:
    get:
      operationId: thread-messages
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MessagesOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Messages in a thread
      tags:
        - threads
  /v1/threads/{thread_id}/notes:
    get:
      operationId: list-notes
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotesOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List a thread's internal notes
      tags:
        - notes
    post:
      operationId: add-note
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Add-noteRequest"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NoteOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Add an internal note (not emailed)
      tags:
        - notes
  /v1/threads/{thread_id}/shares:
    get:
      operationId: list-thread-shares
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ThreadSharesOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List the users a thread is shared with
      tags:
        - threads
  /v1/threads/{thread_id}/tags:
    get:
      operationId: list-thread-tags
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagsOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Tags applied to a thread
      tags:
        - tags
    post:
      operationId: add-thread-tag
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Add-thread-tagRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Apply a tag to a thread
      tags:
        - tags
  /v1/threads/{thread_id}/tags/{tag_id}:
    delete:
      operationId: remove-thread-tag
      parameters:
        - in: path
          name: thread_id
          required: true
          schema:
            type: string
        - in: path
          name: tag_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OkOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Remove a tag from a thread
      tags:
        - tags
  /v1/users:
    get:
      operationId: list-users
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserListOutputBody"
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: List account users (owner)
      tags:
        - users
    post:
      operationId: create-user
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateUserInputBody"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserOutputBody"
          description: Created
        default:
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ErrorModel"
          description: Error
      security:
        - bearer: []
        - cookie: []
      summary: Create a user (owner)
      tags:
        - users
servers:
  - url: /
