topi SaaS Events API (1.0.0)

Download OpenAPI specification:

Describes the webhook events exchanged between topi SaaS and external partners (e.g. PEAC).

Outgoing events are fired by topi SaaS and delivered to partner webhook endpoints.

Incoming events are fired by partners and delivered to topi SaaS webhook endpoints.

Every event shares a common envelope; the payload field varies by event type.

Outgoing Events

Offer Accepted by User Webhook

Fired when an end-user accepts an offer inside the topi SaaS journey. Partners should use this event to initiate their downstream contract creation process.

Request Body schema: application/json
required
type
required
string
Value: "topi_saas.offer.accepted_by_user"

Event type in the format <namespace>.<entity>.<action>.

version
required
integer

Schema version of this event type. Incremented only on breaking changes. Additive (non-breaking) changes do not increment the version.

event_id
required
string <uuid>

Unique ID of this event instance. Consumers should use this as an idempotency key — if the same event_id is received more than once (e.g. due to a delivery retry), the duplicate should be discarded.

created_at
required
string <date-time>

ISO 8601 timestamp of when the event was created.

object_id
required
string <uuid>

ID of the primary object this event relates to. For offer events this is the offer ID.

required
object (OfferAcceptedByUserPayload)

Responses

Request samples

Content type
application/json
{
  • "type": "topi_saas.offer.accepted_by_user",
  • "version": 1,
  • "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  • "created_at": "2026-05-19T10:30:00Z",
  • "object_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
  • "payload": {
    }
}

Incoming Events

Offer Accepted (Partner Confirmation) Webhook

Sent by the partner to confirm that they have accepted the offer on their side, enriching it with partner-assigned external IDs.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
type
required
string
Value: "topi_saas.offer.accepted"

Event type in the format <namespace>.<entity>.<action>.

version
required
integer

Schema version of this event type. Incremented only on breaking changes. Additive (non-breaking) changes do not increment the version.

event_id
required
string <uuid>

Unique ID of this event instance. Consumers should use this as an idempotency key — if the same event_id is received more than once (e.g. due to a delivery retry), the duplicate should be discarded.

created_at
required
string <date-time>

ISO 8601 timestamp of when the event was created.

object_id
required
string <uuid>

ID of the primary object this event relates to. For offer events this is the offer ID.

required
object (OfferAcceptedPayload)

Responses

Request samples

Content type
application/json
{
  • "type": "topi_saas.offer.accepted",
  • "version": 1,
  • "event_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  • "created_at": "2026-05-19T11:00:00Z",
  • "object_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
  • "payload": {
    }
}

Offer Declined Webhook

Sent by the partner to notify topi SaaS that an offer has been declined on their side.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
type
required
string
Value: "topi_saas.offer.declined"

Event type in the format <namespace>.<entity>.<action>.

version
required
integer

Schema version of this event type. Incremented only on breaking changes. Additive (non-breaking) changes do not increment the version.

event_id
required
string <uuid>

Unique ID of this event instance. Consumers should use this as an idempotency key — if the same event_id is received more than once (e.g. due to a delivery retry), the duplicate should be discarded.

created_at
required
string <date-time>

ISO 8601 timestamp of when the event was created.

object_id
required
string <uuid>

ID of the primary object this event relates to. For offer events this is the offer ID.

required
object (OfferDeclinedPayload)

Responses

Request samples

Content type
application/json
{
  • "type": "topi_saas.offer.declined",
  • "version": 1,
  • "event_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  • "created_at": "2026-05-19T11:30:00Z",
  • "object_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
  • "payload": {
    }
}

Order Fulfilment — Contract Started Webhook

Sent by the partner to notify topi SaaS that the contract has started and the physical assets are being shipped to the end customer.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
type
required
string
Value: "topi_saas.offer.contract_started"

Event type in the format <namespace>.<entity>.<action>.

version
required
integer

Schema version of this event type. Incremented only on breaking changes. Additive (non-breaking) changes do not increment the version.

event_id
required
string <uuid>

Unique ID of this event instance. Consumers should use this as an idempotency key — if the same event_id is received more than once (e.g. due to a delivery retry), the duplicate should be discarded.

created_at
required
string <date-time>

ISO 8601 timestamp of when the event was created.

object_id
required
string <uuid>

ID of the primary object this event relates to. For offer events this is the offer ID.

required
object (OfferContractStartedPayload)

Responses

Request samples

Content type
application/json
{
  • "type": "topi_saas.offer.contract_started",
  • "version": 1,
  • "event_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
  • "created_at": "2026-05-19T14:00:00Z",
  • "object_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
  • "payload": {
    }
}