Trimline is in private beta. Public launch: June 2027.Join the waitlist →
Docs / Webhooks

Event types

Every event Trimline can send, and when each one fires.

Beta. The Trimline API is available to private beta customers. Endpoints may change before general availability in June 2027, and every breaking change is announced in the changelog. Request access.

Each event describes one thing that happened in your account. Its data.object is a snapshot of the affected object at the time of the event. Fetch the object again if you need its latest state.

The event object

{
  "id": "evt_4Ks9Lw2",
  "object": "event",
  "type": "offer.received",
  "created_at": "2026-12-03T16:42:10Z",
  "livemode": true,
  "data": {
    "object": { "id": "neg_8Hk2Pq", "object": "negotiation", "...": "..." },
    "previous_attributes": { "stage": "waiting_on_vendor" }
  }
}

previous_attributes appears on *.updated events and lists the fields that changed, with their old values. Events are also available from GET /v1/events for 30 days, which is useful for catching up after downtime.

Renewals

TypeSent when
renewal.createdA contract enters the 120-day renewal window.
renewal.deadline_approachingThe notice deadline is 30, 14, 7 or 2 days away and no decision has been made.
renewal.updatedThe status or values change.
renewal.closedThe renewal reaches renewed, cancelled or skipped.

Negotiations and offers

TypeSent when
negotiation.startedA negotiation is opened.
negotiation.reply_receivedThe vendor replied to the thread.
negotiation.call_requestedThe vendor asked for a call. A brief is attached in data.object.call_brief.
offer.receivedWe detected a concrete offer in a vendor reply.
offer.acceptedYou accepted an offer.
negotiation.closedThe negotiation ended.

Drafts

TypeSent when
draft.createdA draft is waiting for approval. This is the most useful event for approval bots.
draft.approvedSomeone approved a draft, in any surface.
draft.sentThe email left the mailbox. sent_at and the message ID are set.
draft.expiringA pending draft expires within 12 hours.
draft.send_failedThe mailbox rejected the send, usually because the connection needs reauthorizing.

Contracts, vendors and savings

TypeSent when
vendor.createdWe found a new recurring vendor.
contract.created / contract.updatedContract terms were extracted or corrected.
contract.needs_reviewA key field was extracted with low confidence.
savings.estimatedNew terms were agreed.
savings.confirmedThe vendor’s first invoice at the new price arrived.

Connections

TypeSent when
connection.activeAuthorization finished and the first sync started.
connection.needs_reauthThe provider revoked or expired our token. Negotiations that send from this mailbox pause.

We add new event types over time. Ignore types you don’t recognize rather than failing on them.

Something unclear or missing? Email developers@trimline.tech.