Ambra Health Accounts API

The top-level tenant. List and get accounts, update account settings and sharing configuration, and manage the users attached to an account - add, list, and remove account members.

OpenAPI Specification

ambra-health-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Ambra Health (InteleShare) v3 Services Public API
  description: >-
    OpenAPI description of the Ambra Health / InteleShare v3 Services Public API
    (historically the DICOM Grid API). Ambra Health is a cloud-based medical image
    management, exchange, and interoperability platform, now part of Intelerad
    Medical Systems. The API is JSON over HTTPS and is authenticated with a session
    id (sid) obtained from POST /session/login; the sid is then supplied on
    subsequent requests as a parameter or via the X-AmbraHealth-SID header.


    Endpoint paths, HTTP verbs, and the sid/bundle mechanics are grounded in the
    public v3 API reference at https://access.dicomgrid.com/api/v3/api.html and the
    open-source Python SDK (github.com/dicomgrid/sdk-python). Request and response
    bodies below are HONESTLY MODELED representative schemas: the public reference
    documents commands and parameters but does not publish per-field JSON Schemas,
    so the schemas here are illustrative of shape rather than an exhaustive contract.
    Operations grounded directly in the reference are marked
    x-endpoint-status = confirmed; illustrative body schemas are marked
    x-schema-status = modeled.
  version: v3
  contact:
    name: Ambra Health / Intelerad
    url: https://ambrahealth.com/platform/developer-tools/apis/
  license:
    name: Proprietary - Ambra Health / Intelerad
    url: https://ambrahealth.com
servers:
- url: https://access.dicomgrid.com/api/v3
  description: Ambra Health / DICOM Grid production API (access.ambrahealth.com is an alias)
tags:
- name: Session
  description: Authentication, session, OAuth, and permissions
- name: Studies
  description: DICOM study lifecycle, routing, download, and audit
- name: Patients
  description: Patient records and merges
- name: Users
  description: User administration and tokens
- name: Groups
  description: User groups
- name: Accounts
  description: Account (tenant) administration
- name: Namespaces
  description: Namespace permissions, settings, and audit
- name: Sharing
  description: Study and filter sharing / image exchange
- name: Storage & Images
  description: DICOM data, storage, and annotations
- name: Webhooks
  description: Event webhooks
paths:
  /session/login:
    post:
      operationId: sessionLogin
      tags: [Session]
      summary: Log in and obtain a session id (sid)
      description: Authenticate with credentials to obtain a session id (sid) used to authorize subsequent calls.
      x-endpoint-status: confirmed
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
      responses:
        '200':
          description: Session established
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
        '401':
          $ref: '#/components/responses/Error'
  /session/user:
    get:
      operationId: sessionUser
      tags: [Session]
      summary: Get the current session user
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      responses:
        '200':
          description: Current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Error'
  /session/permissions:
    get:
      operationId: sessionPermissions
      tags: [Session]
      summary: Get the user's permissions for an account
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - name: account_id
        in: query
        schema: { type: string }
      responses:
        '200':
          description: Permission map
          content:
            application/json:
              schema:
                type: object
                x-schema-status: modeled
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Error'
  /session/logout:
    post:
      operationId: sessionLogout
      tags: [Session]
      summary: End the current session
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /session/oauth/start:
    post:
      operationId: sessionOauthStart
      tags: [Session]
      summary: Begin the OAuth flow
      x-endpoint-status: confirmed
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /session/oauth:
    post:
      operationId: sessionOauth
      tags: [Session]
      summary: OAuth callback / token exchange
      x-endpoint-status: confirmed
      responses:
        '200':
          description: Session established via OAuth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
  /session/pin/generate:
    post:
      operationId: sessionPinGenerate
      tags: [Session]
      summary: Generate a PIN for PIN-based authentication
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /study/add:
    post:
      operationId: studyAdd
      tags: [Studies]
      summary: Add a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StudyWrite'
      responses:
        '200':
          $ref: '#/components/responses/StudyResponse'
  /study/list:
    get:
      operationId: studyList
      tags: [Studies]
      summary: List studies with filtering, sorting, and pagination
      description: >-
        Supports the filter.FIELD.CONDITION syntax (equals, like, gt, lt, in, ...),
        sort_by, and page.rows / page.number pagination documented in the reference.
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - name: namespace_id
        in: query
        schema: { type: string }
      - name: page.rows
        in: query
        schema: { type: integer, default: 25 }
      - name: page.number
        in: query
        schema: { type: integer, default: 1 }
      - name: sort_by
        in: query
        schema: { type: string }
      responses:
        '200':
          description: Page of studies
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StudyList'
  /study/get:
    get:
      operationId: studyGet
      tags: [Studies]
      summary: Get a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/StudyResponse'
  /study/set:
    post:
      operationId: studySet
      tags: [Studies]
      summary: Update study metadata
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StudyWrite'
      responses:
        '200':
          $ref: '#/components/responses/StudyResponse'
  /study/delete:
    post:
      operationId: studyDelete
      tags: [Studies]
      summary: Delete a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/share:
    post:
      operationId: studyShare
      tags: [Studies, Sharing]
      summary: Share a study with users, groups, or accounts
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShareRequest'
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/share/list:
    get:
      operationId: studyShareList
      tags: [Studies, Sharing]
      summary: List active shares on a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Shares
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Share' }
  /study/share/stop:
    post:
      operationId: studyShareStop
      tags: [Studies, Sharing]
      summary: Revoke a study share
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShareRequest'
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/approve:
    post:
      operationId: studyApprove
      tags: [Studies]
      summary: Approve a pending study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/reject:
    post:
      operationId: studyReject
      tags: [Studies]
      summary: Reject a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/push:
    post:
      operationId: studyPush
      tags: [Studies]
      summary: Push a study to an external destination
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string }
                destination_id: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /study/download:
    post:
      operationId: studyDownload
      tags: [Studies]
      summary: Download / export study files
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      - name: bundle
        in: query
        schema: { type: string, enum: [dicom, iso, zip] }
      responses:
        '200':
          description: Study export
          content:
            application/octet-stream:
              schema: { type: string, format: binary }
  /study/audit:
    get:
      operationId: studyAudit
      tags: [Studies]
      summary: Get a study's audit trail
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Audit entries
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/AuditEntry' }
  /study/comment/add:
    post:
      operationId: studyCommentAdd
      tags: [Studies]
      summary: Add a comment to a study
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string }
                comment: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /patient/add:
    post:
      operationId: patientAdd
      tags: [Patients]
      summary: Add a patient
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Patient' }
      responses:
        '200':
          $ref: '#/components/responses/PatientResponse'
  /patient/get:
    get:
      operationId: patientGet
      tags: [Patients]
      summary: Get a patient
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/PatientResponse'
  /patient/set:
    post:
      operationId: patientSet
      tags: [Patients]
      summary: Update a patient
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Patient' }
      responses:
        '200':
          $ref: '#/components/responses/PatientResponse'
  /patient/delete:
    post:
      operationId: patientDelete
      tags: [Patients]
      summary: Delete a patient
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /patient/list:
    get:
      operationId: patientList
      tags: [Patients]
      summary: List patients
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - name: namespace_id
        in: query
        schema: { type: string }
      responses:
        '200':
          description: Patients
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Patient' }
  /patient/study/list:
    get:
      operationId: patientStudyList
      tags: [Patients]
      summary: List a patient's studies
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Studies for the patient
          content:
            application/json:
              schema: { $ref: '#/components/schemas/StudyList' }
  /patient/merge:
    post:
      operationId: patientMerge
      tags: [Patients]
      summary: Merge duplicate patient records
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string, description: Surviving patient }
                merge_uuid: { type: string, description: Patient merged in }
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /user/add:
    post:
      operationId: userAdd
      tags: [Users]
      summary: Add a user
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/User' }
      responses:
        '200':
          $ref: '#/components/responses/UserResponse'
  /user/get:
    get:
      operationId: userGet
      tags: [Users]
      summary: Get a user
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/UserResponse'
  /user/set:
    post:
      operationId: userSet
      tags: [Users]
      summary: Update a user
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/User' }
      responses:
        '200':
          $ref: '#/components/responses/UserResponse'
  /user/delete:
    post:
      operationId: userDelete
      tags: [Users]
      summary: Delete a user
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /user/invite:
    post:
      operationId: userInvite
      tags: [Users]
      summary: Invite a user to an account
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                email: { type: string, format: email }
                account_id: { type: string }
                role: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /user/namespace/list:
    get:
      operationId: userNamespaceList
      tags: [Users]
      summary: List the namespaces a user can access
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, schema: { type: string } }
      responses:
        '200':
          description: Namespaces
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Namespace' }
  /user/token:
    post:
      operationId: userToken
      tags: [Users]
      summary: Manage a user's API tokens
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /group/list:
    get:
      operationId: groupList
      tags: [Groups]
      summary: List groups
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: account_id, in: query, schema: { type: string } }
      responses:
        '200':
          description: Groups
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Group' }
  /group/add:
    post:
      operationId: groupAdd
      tags: [Groups]
      summary: Create a group
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Group' }
      responses:
        '200':
          $ref: '#/components/responses/GroupResponse'
  /group/set:
    post:
      operationId: groupSet
      tags: [Groups]
      summary: Update a group
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Group' }
      responses:
        '200':
          $ref: '#/components/responses/GroupResponse'
  /group/delete:
    post:
      operationId: groupDelete
      tags: [Groups]
      summary: Delete a group
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /group/user/add:
    post:
      operationId: groupUserAdd
      tags: [Groups]
      summary: Add a user to a group
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string, description: Group uuid }
                user_id: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /account/list:
    get:
      operationId: accountList
      tags: [Accounts]
      summary: List accounts
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      responses:
        '200':
          description: Accounts
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Account' }
  /account/get:
    get:
      operationId: accountGet
      tags: [Accounts]
      summary: Get an account
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/AccountResponse'
  /account/set:
    post:
      operationId: accountSet
      tags: [Accounts]
      summary: Update account settings
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Account' }
      responses:
        '200':
          $ref: '#/components/responses/AccountResponse'
  /account/user/add:
    post:
      operationId: accountUserAdd
      tags: [Accounts]
      summary: Add a user to an account
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string, description: Account uuid }
                user_id: { type: string }
                role: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /account/user/list:
    get:
      operationId: accountUserList
      tags: [Accounts]
      summary: List users in an account
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Users
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/User' }
  /account/user/delete:
    post:
      operationId: accountUserDelete
      tags: [Accounts]
      summary: Remove a user from an account
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string }
                user_id: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /namespace/permissions:
    get:
      operationId: namespacePermissions
      tags: [Namespaces]
      summary: Get namespace permissions
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Permission map
          content:
            application/json:
              schema: { type: object, x-schema-status: modeled, additionalProperties: true }
  /namespace/settings:
    get:
      operationId: namespaceSettings
      tags: [Namespaces]
      summary: Get namespace settings
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Settings
          content:
            application/json:
              schema: { type: object, x-schema-status: modeled, additionalProperties: true }
  /namespace/info:
    get:
      operationId: namespaceInfo
      tags: [Namespaces]
      summary: Get namespace info
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Namespace
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Namespace' }
  /namespace/audit:
    get:
      operationId: namespaceAudit
      tags: [Namespaces]
      summary: Get the namespace audit log
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Audit entries
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/AuditEntry' }

  /filter/share:
    post:
      operationId: filterShare
      tags: [Sharing]
      summary: Share a saved filter
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                filter_id: { type: string }
                target_id: { type: string }
      responses:
        '200':
          $ref: '#/components/responses/Status'

  /study/dicomdata/load:
    post:
      operationId: studyDicomdataLoad
      tags: [Storage & Images]
      summary: Load DICOM metadata for a study
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-schema-status: modeled
              properties:
                uuid: { type: string }
      responses:
        '200':
          description: DICOM metadata
          content:
            application/json:
              schema: { type: object, x-schema-status: modeled, additionalProperties: true }
  /dicomdata/list:
    get:
      operationId: dicomdataList
      tags: [Storage & Images]
      summary: List DICOM data
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: study_id, in: query, schema: { type: string } }
      responses:
        '200':
          description: DICOM data entries
          content:
            application/json:
              schema: { type: array, items: { type: object, additionalProperties: true } }
  /dicomdata/get:
    get:
      operationId: dicomdataGet
      tags: [Storage & Images]
      summary: Get a DICOM data element
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: DICOM data
          content:
            application/json:
              schema: { type: object, x-schema-status: modeled, additionalProperties: true }
  /annotation/add:
    post:
      operationId: annotationAdd
      tags: [Storage & Images]
      summary: Add a frame-level image annotation
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Annotation' }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /annotation/list:
    get:
      operationId: annotationList
      tags: [Storage & Images]
      summary: List annotations
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: study_id, in: query, schema: { type: string } }
      responses:
        '200':
          description: Annotations
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Annotation' }

  /webhook/list:
    get:
      operationId: webhookList
      tags: [Webhooks]
      summary: List webhooks
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: namespace_id, in: query, schema: { type: string } }
      responses:
        '200':
          description: Webhooks
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Webhook' }
  /webhook/add:
    post:
      operationId: webhookAdd
      tags: [Webhooks]
      summary: Create a webhook
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Webhook' }
      responses:
        '200':
          $ref: '#/components/responses/WebhookResponse'
  /webhook/set:
    post:
      operationId: webhookSet
      tags: [Webhooks]
      summary: Update a webhook
      x-endpoint-status: confirmed
      parameters: [ { $ref: '#/components/parameters/Sid' } ]
      requestBody:
        content:
          application/json:
            schema: { $ref: '#/components/schemas/Webhook' }
      responses:
        '200':
          $ref: '#/components/responses/WebhookResponse'
  /webhook/delete:
    post:
      operationId: webhookDelete
      tags: [Webhooks]
      summary: Delete a webhook
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          $ref: '#/components/responses/Status'
  /webhook/event:
    get:
      operationId: webhookEvent
      tags: [Webhooks]
      summary: Inspect webhook events
      description: >-
        The reference confirms a webhook/event command but does not enumerate the
        available event types; the event catalog below is honestly modeled from
        common Ambra study lifecycle activity.
      x-endpoint-status: confirmed
      parameters:
      - $ref: '#/components/parameters/Sid'
      - { name: uuid, in: query, schema: { type: string } }
      responses:
        '200':
          description: Webhook event(s)
          content:
            application/json:
              schema: { $ref: '#/components/schemas/WebhookEvent' }

  /bundle:
    post:
      operationId: bundle
      tags: [Session]
      summary: Execute multiple API calls in a single request
      description: >-
        POST a JSON array of hashes, each with a URL key plus parameters. Calls are
        processed sequentially and results returned in matching order. The
        inherit_sid flag plus the X-AmbraHealth-SID header let bundled calls share
        one session.
      x-endpoint-status: confirmed
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  URL: { type: string }
                additionalProperties: true
      responses:
        '200':
          description: Ordered array of results
          content:
            application/json:
              schema: { type: array, items: { type: object, additionalProperties: true } }
components:
  parameters:
    Sid:
      name: sid
      in: query
      required: true
      description: Session id from POST /session/login. May also be sent via the X-AmbraHealth-SID header.
      schema: { type: string }
  responses:
    Error:
      description: Error - the API returns an HTTP error code plus a JSON error structure
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
    Status:
      descripti

# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ambra-health/refs/heads/main/openapi/ambra-health-openapi.yml