Skip to content

API Calls

Base: https://api.g3nretailstack.com/ipm

Source of truth: /internal-docs/ipm-openapi.yaml/ipm/openapi.yaml

Notes: samples are schema-derived placeholders. Replace placeholder values (ORGCODE, SESSION_GUID, etc.) with real values.

Inventory

MethodPathSummaryRequest schemaResponse schema
POST/bulk/export/continueContinue a bulk export job using the previous cursorBulkExportContinueRequestEnvelope
POST/bulk/export/createCreate a bulk export jobBulkExportCreateRequestEnvelope
POST/bulk/import/commitCommit a bulk import job after uploadBulkImportCommitRequestEnvelope
POST/bulk/import/continueContinue a bulk import job from the last processed lineBulkImportContinueRequestEnvelope
POST/bulk/import/createCreate a bulk import jobBulkImportCreateRequestEnvelope
POST/bulk/job/getGet bulk job statusBulkJobGetRequestEnvelope
POST/bulk/job/listList bulk jobsBulkJobListRequestEnvelope
POST/cdc/listList CDC eventsCdcListRequestEnvelope
POST/event/catalog/listList event catalog entriesEventCatalogListRequestEnvelope
POST/export/contract/listList export contracts aligned to event streamsExportContractListRequestEnvelope
POST/kpi/alertEmit KPI alert (optionally sends inbox notification)KpiAlertRequestEnvelope
POST/kpi/queryQuery KPI snapshotsKpiQueryRequestEnvelope
POST/kpi/recordRecord KPI snapshotKpiRecordRequestEnvelope
POST/lifecycle/listList lifecycle/state-machine entriesLifecycleListRequestEnvelope
POST/pagination/getFetch pagination conventionsPaginationGetRequestEnvelope
POST/specimen/getFetch specimen payloadsSpecimenGetRequestEnvelope
GET/statHealth checkNoneEnvelope
POST/webhook/createCreate a webhook subscriptionWebhookCreateRequestEnvelope
POST/webhook/getGet a webhookWebhookGetRequestEnvelope
POST/webhook/listList webhooksWebhookListRequestEnvelope
POST/webhook/replayReplay webhook deliveries from the event storeWebhookReplayRequestEnvelope
POST/webhook/status/setUpdate webhook statusWebhookStatusSetRequestEnvelope

Call details

POST /bulk/export/continue

Purpose: Continue a bulk export job using the previous cursor

Notes: Continue a bulk export job using the previous cursor. Tenant routes require x-orgcode; /stat health checks do not. Route class Tier D (p95 300ms, p99 600ms).

Request schema: BulkExportContinueRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "job_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/export/continue",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/export/create

Purpose: Create a bulk export job

Notes: Create a bulk export job. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 300ms, p99 600ms).

Request schema: BulkExportCreateRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/export/create",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/import/commit

Purpose: Commit a bulk import job after upload

Notes: Commit a bulk import job after upload. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 300ms, p99 600ms).

Request schema: BulkImportCommitRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "job_id": "string",
  "expected_revision": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/import/commit",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/import/continue

Purpose: Continue a bulk import job from the last processed line

Notes: Continue a bulk import job from the last processed line. Tenant routes require x-orgcode; /stat health checks do not. Route class Tier D (p95 300ms, p99 600ms).

Request schema: BulkImportContinueRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "job_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/import/continue",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/import/create

Purpose: Create a bulk import job

Notes: Create a bulk import job. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 300ms, p99 600ms).

Request schema: BulkImportCreateRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    },
    "upload_url": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/import/create",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/job/get

Purpose: Get bulk job status

Notes: Get bulk job status. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: BulkJobGetRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "job_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "job": {
      "job_id": "string",
      "job_type": "import",
      "target": "events",
      "format": "ndjson",
      "status": "awaiting_upload",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    },
    "download_url": "string",
    "report_url": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/job/get",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /bulk/job/list

Purpose: List bulk jobs

Notes: List bulk jobs. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: BulkJobListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "status": "active",
  "job_type": "string",
  "limit": 8
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "job_id": "string",
        "job_type": "import",
        "target": "events",
        "format": "ndjson",
        "status": "awaiting_upload",
        "created_at": "2026-01-01T00:00:00Z",
        "updated_at": "2026-01-01T00:00:00Z",
        "revision": "string"
      }
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /bulk/job/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /cdc/list

Purpose: List CDC events

Notes: List CDC events. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier C (p95 150ms, p99 400ms).

Request schema: CdcListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "service": "string",
  "logical_guid": "LOGICAL_GUID",
  "channel_code": "pos_generic"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {}
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cdc/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /event/catalog/list

Purpose: List event catalog entries

Notes: List event catalog entries. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: EventCatalogListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "service": "string",
  "action": "string",
  "action_prefix": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "service": "string",
        "action": "string",
        "schema_url": "string"
      }
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /event/catalog/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /export/contract/list

Purpose: List export contracts aligned to event streams

Notes: List export contracts aligned to event streams. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: ExportContractListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "service": "string",
  "limit": 8,
  "next_token": {}
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "contracts": [
      {
        "service": "string",
        "stream": "events",
        "format": "ndjson",
        "partitioning": [
          {}
        ],
        "actions": [
          {}
        ]
      }
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /export/contract/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /kpi/alert

Purpose: Emit KPI alert (optionally sends inbox notification)

Notes: Emit KPI alert (optionally sends inbox notification). Tenant routes require x-orgcode; /stat health checks do not. Route class Tier D (p95 1500ms, p99 3000ms).

Request schema: KpiAlertRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "alert": {
    "kpi_code": "CODE1",
    "value": 0,
    "threshold": {
      "comparator": "gt",
      "value": 0
    },
    "bucket": "hourly",
    "bucket_start": "2026-01-01T00:00:00Z",
    "bucket_end": "2026-01-01T00:00:00Z"
  }
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "alert": {
      "alert_id": "string",
      "kpi_code": "CODE1",
      "value": 0,
      "threshold": {
        "comparator": "gt",
        "value": 0
      },
      "scope": "org",
      "bucket": "hourly",
      "bucket_start": "2026-01-01T00:00:00Z",
      "bucket_end": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /kpi/alert",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /kpi/query

Purpose: Query KPI snapshots

Notes: Query KPI snapshots. Tenant routes require x-orgcode; /stat health checks do not. Route class Tier C (p95 1200ms, p99 2500ms).

Request schema: KpiQueryRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "kpi_code": "CODE1",
  "bucket": "hourly",
  "from_utc": "2026-01-01T00:00:00Z",
  "to_utc": "2026-01-01T00:00:00Z"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "series": [
      {
        "kpi_id": "string",
        "kpi_code": "CODE1",
        "scope": "org",
        "bucket": "hourly",
        "bucket_start": "2026-01-01T00:00:00Z",
        "bucket_end": "2026-01-01T00:00:00Z",
        "value": 0
      }
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /kpi/query",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /kpi/record

Purpose: Record KPI snapshot

Notes: Record KPI snapshot. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 1500ms, p99 3000ms).

Request schema: KpiRecordRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "kpi": {
    "kpi_code": "CODE1",
    "bucket": "hourly",
    "bucket_start": "2026-01-01T00:00:00Z",
    "bucket_end": "2026-01-01T00:00:00Z",
    "value": 0
  }
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "kpi": {
      "kpi_id": "string",
      "kpi_code": "CODE1",
      "scope": "org",
      "bucket": "hourly",
      "bucket_start": "2026-01-01T00:00:00Z",
      "bucket_end": "2026-01-01T00:00:00Z",
      "value": 0
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /kpi/record",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /lifecycle/list

Purpose: List lifecycle/state-machine entries

Notes: List lifecycle/state-machine entries. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: LifecycleListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "service": "string",
  "name": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "name": "string",
        "service": "string",
        "states": [
          {}
        ]
      }
    ],
    "version": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /lifecycle/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /pagination/get

Purpose: Fetch pagination conventions

Notes: Fetch pagination conventions. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PaginationGetRequest Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /pagination/get",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /specimen/get

Purpose: Fetch specimen payloads

Notes: Fetch specimen payloads. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: SpecimenGetRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "name": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "name": "string",
    "specimen": {},
    "specimens": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /specimen/get",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

GET /stat

Purpose: Health check

Notes: Health check. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "service": "string",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "GET /stat",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /webhook/create

Purpose: Create a webhook subscription

Notes: Create a webhook subscription. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 300ms, p99 600ms).

Request schema: WebhookCreateRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "endpoint_url": "string",
  "event_filters": [
    {
      "service": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "webhook_id": "string",
    "orgcode": "ORGCODE",
    "endpoint_url": "string",
    "status": "active",
    "event_filters": [
      {
        "service": null
      }
    ],
    "signing_algorithm": "hmac-sha256",
    "secret_last4": "string",
    "created_at": "2026-01-01T00:00:00Z",
    "updated_at": "2026-01-01T00:00:00Z",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /webhook/create",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /webhook/get

Purpose: Get a webhook

Notes: Get a webhook. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: WebhookGetRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "webhook_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "webhook": {
      "webhook_id": "string",
      "orgcode": "ORGCODE",
      "endpoint_url": "string",
      "status": "active",
      "event_filters": [
        {
          "service": null
        }
      ],
      "signing_algorithm": "hmac-sha256",
      "secret_last4": "string",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /webhook/get",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /webhook/list

Purpose: List webhooks

Notes: List webhooks. Tenant routes require x-orgcode; /stat health checks do not. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: WebhookListRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "limit": 8,
  "next_token": {}
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "webhook_id": "string",
        "orgcode": "ORGCODE",
        "endpoint_url": "string",
        "status": "active",
        "event_filters": [
          {}
        ],
        "signing_algorithm": "hmac-sha256",
        "secret_last4": "string",
        "created_at": "2026-01-01T00:00:00Z",
        "updated_at": "2026-01-01T00:00:00Z",
        "revision": "string"
      }
    ],
    "next_token": {}
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /webhook/list",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /webhook/replay

Purpose: Replay webhook deliveries from the event store

Notes: Replay webhook deliveries from the event store. Tenant routes require x-orgcode; /stat health checks do not. Route class Tier D (p95 500ms, p99 1000ms).

Request schema: WebhookReplayRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "webhook_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "webhook_id": "string",
    "delivered": 0,
    "failed": 0
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /webhook/replay",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /webhook/status/set

Purpose: Update webhook status

Notes: Update webhook status. Tenant routes require x-orgcode; /stat health checks do not. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier D (p95 300ms, p99 600ms).

Request schema: WebhookStatusSetRequest Response schema: Envelope

Sample request (schema-derived)

json
{
  "request_context": {
    "orgcode": "ORGCODE",
    "actor": "string",
    "context_source": "session"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ],
  "webhook_id": "string",
  "status": "active",
  "expected_revision": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "webhook": {
      "webhook_id": "string",
      "orgcode": "ORGCODE",
      "endpoint_url": "string",
      "status": "active",
      "event_filters": [
        {
          "service": null
        }
      ],
      "signing_algorithm": "hmac-sha256",
      "secret_last4": "string",
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z",
      "revision": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /webhook/status/set",
    "service": "ipm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}