---
title: "Record many factual target-level events in one call. Partial success is reported per event; nothing is inferred."
method: POST
path: "/outreach/{id}/events"
---

# Record many factual target-level events in one call. Partial success is reported per event; nothing is inferred.

`POST /outreach/{id}/events`

## Request

- Base URL: `https://forbiz.io/api/public/agent`
- URL: `https://forbiz.io/api/public/agent/outreach/{id}/events`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `events` TargetEvent[]
    - `campaignTargetId` string: Required in batch calls; taken from the path in single calls.
    - `eventType` 'sent' | 'hard_bounce' | 'soft_bounce' | 'automated_acknowledgment' | 'human_reply' | 'referral' | 'product_information_request' | 'vault_specs_request' | 'battery_charging_confirmed' | 'meeting_interest' | 'pilot_interest' | 'quote_request' | 'not_responsible' | 'not_relevant' | 'unsubscribe' | 'out_of_office' | 'other', required
    - `occurredAt` string, date-time
    - `eventDetail` string
    - `executionId` string: Must belong to the same outreach.
    - `externalSource` string
    - `externalMessageId` string: Used for natural idempotency per target + type.
    - `externalThreadId` string
    - `confidence` number
    - `verificationStatus` string
    - `supersedesEventId` string: Corrections append a new event that supersedes a prior one. History is never deleted.
    - `evidenceId` string
    - `evidence` object
      - `claimType` string
      - `claimValue` string
      - `sourceUrl` string: For email use a stable reference such as gmail:thread/<id>.
      - `sourceTitle` string
      - `snippet` string
      - `confidence` number
      - `verificationStatus` 'found' | 'verified' | 'rejected'

## Response `200`

Nothing new recorded

- TargetEventResult: Per-event outcome. Batch calls report partial success rather than failing wholesale.
  - `ok` boolean
  - `inserted` object[]
  - `skipped` object[]
  - `conflicts` object[]
  - `failed` object[]
  - `compatibility_signals` object: Derived campaign_targets.actual_signal per touched target.

## Other responses

- `201`: Events recorded
- `208`: Idempotent replay of a previous request with the same Idempotency-Key. Nothing was applied again.
- `400`: Validation error
- `404`: Not found

---

[API](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api.md) · [All operations](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api/revisions/e5b10d59dc5f?raw)
