---
title: "Payment Plan Event"
method: POST
path: "payment_plan_event"
---

# Payment Plan Event

`POST payment_plan_event` (webhook)

Whenever a resident's payment plan is created, updated, or cancelled in EliseAI,
we will post the event to your registered webhook. A payment plan is a set of
scheduled installments, each of which is a promise to pay; individual installment
transitions are delivered through the `promise_to_pay_event` webhook.

Webhooks can be registered at the organization level or the property level.
Please reach out to the EliseAI support team to register your webhooks.

Event Types:
* **payment_plan.created:** Posted whenever a new payment plan is created for a lease
* **payment_plan.updated:** Posted whenever an existing payment plan's installments or cadence change
* **payment_plan.cancelled:** Posted whenever a payment plan is cancelled

Each delivery includes an `X-Signature` header: an HMAC SHA-256 hex digest
of the JSON request body, signed with your registered webhook secret.

`elise_property_id` is the `property_id` used by the Leases API, and
`external_lease_id` identifies the lease the plan belongs to: for AIP properties
where EliseAI is the system of record it matches the lease `id` returned by
`GET /v2/leases/properties/{property_id}/leases`; for PMS-synced leases it is the
external/PMS lease id. `resident_uuid` matches the resident UUID returned by the
Residents API.

Payment plan events will include:
* **event_id:** Unique identifier for the event. Use this for idempotency/deduplication.
* **event_type:** The type of event that occurred. One of `payment_plan.created`, `payment_plan.updated`, or `payment_plan.cancelled`.
* **event_date:** Date and time of the event
* **elise_property_id:** Elise identifier for the property
* **external_lease_id:** Lease identifier the payment plan belongs to
* **resident_uuid:** Resident UUID from the residents API for the resident the plan belongs to
* **payment_plan_id:** Identifier of the payment plan, shared by every installment of the plan
* **cadence_type:** How the installments are spaced (for example `weekly` or `biweekly`). Null for a plan with no cadence.
* **total_amount:** Sum of the promised amounts across all installments
* **installments:** The installments of the plan, in chronological order. Each installment has the same shape as a `promise_to_pay_event` payload.

## Payload

- PaymentPlanWebhookEvent
  - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
  - `event_type` string, required — Webhook event type. One of payment_plan.created, payment_plan.updated, payment_plan.cancelled.
  - `event_date` string, date-time, required — When EliseAI generated the event.
  - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Leases API.
  - `external_lease_id` string, required — Lease identifier the payment plan belongs to. For AIP leases this is the Elise lease id returned as id by GET /v2/leases/properties/{property_id}/leases; for PMS-synced leases this is the external/PMS lease id.
  - `resident_uuid` string — Resident UUID of the resident the plan belongs to, as returned by the Residents API.
  - `payment_plan_id` integer — Identifier of the payment plan. Shared by every installment of the plan.
  - `cadence_type` string — How the installments are spaced (for example weekly or biweekly). Null for a plan with no cadence.
  - `total_amount` number, required — Sum of the promised amounts across all installments of the plan.
  - `installments` PromiseToPayWebhookEvent[] — Installments of the plan, each a promise to pay, in chronological order.
    - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
    - `event_type` string, required — Webhook event type. One of promise_to_pay.created, promise_to_pay.accepted, promise_to_pay.rejected, promise_to_pay.fulfilled, promise_to_pay.cancelled.
    - `event_date` string, date-time, required — When EliseAI generated the event.
    - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Leases API.
    - `external_lease_id` string, required — Lease identifier the promise belongs to. For AIP leases this is the Elise lease id returned as id by GET /v2/leases/properties/{property_id}/leases; for PMS-synced leases this is the external/PMS lease id.
    - `external_account_id` string — External account identifier associated with the lease, when one exists.
    - `resident_uuid` string — Resident UUID of the resident who made the promise, as returned by the Residents API.
    - `amount_promised` number, required — Amount the resident promised to pay, in the property's currency.
    - `to_pay_by_start` string, date-time, required — Start of the window the resident promised to pay within.
    - `to_pay_by_end` string, date-time, required — End of the window the resident promised to pay within.
    - `promise_accepted` boolean — Whether EliseAI accepted the promise. False while a promise is rejected or awaiting an operator decision.
    - `date_fulfilled` string, date — Date the promise was fulfilled by payment, when it has been fulfilled.
    - `cancellation_reason` string — Why the promise was closed without being fulfilled. Possible values: merged, edited, new_promise_made_while_active, canceled_through_crm, rejected, handoff, denied_by_operator, resident_payment, dismissed_by_operator, other.
    - `payment_plan_id` integer — Identifier of the payment plan this promise is an installment of. Null for a standalone promise to pay.

## Acknowledgement `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/eliseai/apis/elise-api.md) · [All operations](https://skmtc.dev/eliseai/apis/elise-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/eliseai/elise-api/revisions/5a4320cd9f91/schema)
