---
title: "Create a payment intent for a lease"
method: POST
path: "/leases/{lease_id}/payment/create-intent"
tags: ["Leases", "Credits"]
---

# Create a payment intent for a lease

`POST /leases/{lease_id}/payment/create-intent`

## Request

- Base URL: `https://api.faireplace.com/api`
- URL: `https://api.faireplace.com/api/leases/{lease_id}/payment/create-intent`
- Auth: HTTP bearer

Creates a payment intent for a lease (signing fees, etc.).

**Supported methods:**
- **stripe**: creates a Stripe PaymentIntent; the response contains `client_secret` for Stripe Elements (web).
- **credit**: debits the user's credit balance; the response may contain `balance_after`.

**Prerequisites:**
- The lease must exist (otherwise 404).
- `leases:write` permission required.
- For credits: sufficient balance (otherwise 422 business error).

## Path parameters

- `lease_id` string, uuid, required

## Request body

- CreatePaymentIntentRequest: Request to create a payment intent for a lease. The `lease_id` is provided in the route path, not in the body.
  - `amount` integer, required: Amount in cents (e.g. 2990 = 29.90 EUR).
  - `currency` string, required: Currency code (e.g. "eur", "EUR").
  - `payment_method` 'stripe' | 'credit', required: Payment method for a lease. - `stripe`: card payment via Stripe (PaymentIntent) - `credit`: debit from the user's credit balance
  - `metadata` object, nullable: Optional metadata propagated to the payment port. The backend automatically adds `lease_id` and `reason` (e.g. "lease_payment").

## Response `201`

Payment intent created successfully

- CreatePaymentIntentResponse: Response after creating a payment intent. - For Stripe: contains `client_secret` for Stripe Elements. - For credits: may contain `balance_after` (balance after debit).
  - `payment_intent_id` string, required: Stripe PaymentIntent ID (e.g. "pi_xxx") or credit transaction ID.
  - `client_secret` string, nullable: Client secret for Stripe Elements (web). Absent for credit payments.
  - `status` 'pending' | 'succeeded' | 'failed' | 'canceled', required: Payment status.
  - `amount` integer, required: Amount in cents.
  - `currency` string, required
  - `payment_method` 'stripe' | 'credit', required: Payment method for a lease. - `stripe`: card payment via Stripe (PaymentIntent) - `credit`: debit from the user's credit balance
  - `balance_after` integer, nullable: Credit balance after consumption (only if `payment_method` = `credit`).

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Lease not found
- `422`: Business error (e.g., insufficient credit balance for `payment_method: credit`).
- `500`: Internal Server Error

---

[API](https://skmtc.dev/faireplace/apis/faireplace-property-management-api.md) · [All operations](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/revisions/69de39762919?raw)
