---
title: "Record one factual event for a target (bounce, human reply, referral, request, unsubscribe...). Facts only; interpretation stays a separate Action command."
method: POST
path: "/outreach/{id}/targets/{campaignTargetId}/events"
---

# Record one factual event for a target (bounce, human reply, referral, request, unsubscribe...). Facts only; interpretation stays a separate Action command.

`POST /outreach/{id}/targets/{campaignTargetId}/events`

## Request

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

## Path parameters

- `id` string, required
- `campaignTargetId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- TargetEvent: One factual, observed target-level event. Facts only: no interpretation, no aggregate signal, no Action lifecycle change. Absence of a bounce is never delivery proof.
  - `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 `201`

Event 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

- `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)
