---
title: "POST /v1/orgs/{orgId}/integrations/webhook"
method: POST
path: "/v1/orgs/{orgId}/integrations/webhook"
---

# POST /v1/orgs/{orgId}/integrations/webhook

`POST /v1/orgs/{orgId}/integrations/webhook`

Handle generic webhook trigger (secret identifies workflow)

## Path parameters

- `orgId` string, required

## Query parameters

- `secret` string, required

## Request body

- union
  - object
  - GithubComB3FunB3MonoServicesB3osWorkflowInternalAppApiServiceIntegrationGenericWebhookPayload
    - `data` object
    - `forEachContext` GithubComB3FunB3MonoServicesB3osWorkflowInternalPkgEntityForEachContext — For wait resume inside for-each
      - `index` integer
      - `parentNodeId` string — Legacy fields kept for backward-compatible JSON deserialization. New code should only use Stack.
      - `stack` GithubComB3FunB3MonoServicesB3osWorkflowInternalPkgEntityForEachLevel[] — Stack holds nesting levels from outermost to innermost. Single-level for-each uses a stack of length 1.
        - `index` integer — Current iteration index (0, 1, 2...)
        - `parentNodeId` string — For-each node ID (e.g., "for_each_send")
        - `total` integer — Total iterations (for progress tracking)
      - `total` integer
    - `nodeId` string — For wait resume
    - `runId` string — For wait resume
    - `workflowId` string

## Response `200`

OK

- GithubComB3FunB3MonoServicesB3osWorkflowInternalAppApiServiceIntegrationIntegrationResult
  - `action` string — "triggered", "resumed", "skipped"
  - `eventId` string — Webhook event ID for audit
  - `reason` string — If skipped, the reason
  - `runIds` string[] — Multiple if fan-out (platform) or single (generic)

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found

---

[API](https://skmtc.dev/b3-fun/apis/b3os-workflow-api.md) · [All operations](https://skmtc.dev/b3-fun/apis/b3os-workflow-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/b3-fun/b3os-workflow-api/revisions/5a750a5a9596/schema)
