Ambra Health Webhooks API

Register HTTP callbacks that Ambra invokes when platform events occur (such as study activity). List, add, update, and delete webhooks and inspect webhook events. Delivery is server-to-endpoint HTTP POST, not a WebSocket.

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