---
title: "Create a payment intent"
method: POST
path: "/payment_intents"
tags: ["Payment intents"]
---

# Create a payment intent

`POST /payment_intents`

Creates a payment intent that charges a previously saved payment method, in the `live` or `test` mode of the API key used. Unlike `POST /v1/payment_intents`, which starts a customer-present flow completed through the Fintoc widget, this endpoint charges the `payment_method` directly, with no customer interaction and no widget token. This endpoint does not accept v1-only parameters such as `recipient_account`, `customer_email`, `payment_type`, or `expires_at`. The charge starts in the `created` status; Fintoc processes the charge asynchronously, so subscribe to webhooks to track the charge's progress. Available for organizations on API version `2026-02-01` or later.

## Request body

- object
  - `amount` integer, required — Amount to charge, in the smallest unit of the currency. CLP has no decimals, so `5000` is $5000 CLP; MXN amounts are expressed in centavos, so `5000` is $50.00 MXN. Must be greater than zero and at most 2147483647.
  - `currency` 'CLP' | 'MXN', required — Three-letter ISO 4217 currency code, in uppercase. One of `CLP` or `MXN`.
  - `payment_method` string, required — The `id` of the payment method to charge. The payment method must belong to your organization and match the mode of the API key used.
  - `metadata` object — Set of key-value pairs to attach to the payment intent. Up to 50 pairs, with keys of up to 40 characters and values of up to 500 characters. Nested objects and arrays are not allowed.

## Response `201`

Payment intent created. The charge starts in the `created` status; Fintoc processes the charge asynchronously.

- PaymentIntent
  - `id` string, required — Unique identifier of the payment intent.
  - `object` 'payment_intent', required — Type of the object. Always `payment_intent`.
  - `amount` integer, required — Amount of the payment intent, in the smallest unit of the currency (for example, `100000` for 100000 CLP, since CLP has no minor unit, or `7050` for 70.50 MXN).
  - `business_profile` object, nullable — Profile of the business that collects the payment, when provided. `null` otherwise.
    - `category` string — Category of the business.
    - `name` string — Name of the business.
    - `tax_id` string — Tax identifier of the business.
  - `created_at` string, date-time, required — ISO 8601 timestamp of when the payment intent was created.
  - `currency` 'CLP' | 'MXN', required — Three-letter ISO 4217 currency code of the payment intent. One of `CLP` or `MXN`.
  - `customer` object, nullable, required — Customer associated with the payment intent, when it was created from a checkout session with a customer. `null` otherwise.
    - `id` string — Unique identifier of the customer.
    - `object` 'customer' — Type of the object. Always `customer`.
    - `address` object, nullable — Address of the customer. `null` when not provided.
      - `city` string — City of the address.
      - `country` string — Country of the address.
      - `line1` string — First line of the address.
      - `line2` string — Second line of the address.
      - `postal_code` string — Postal code of the address.
      - `state` string — State of the address.
    - `created_at` string, date-time — ISO 8601 timestamp of when the customer was created.
    - `email` string, nullable — Email address of the customer.
    - `metadata` object — Set of key-value pairs attached to the customer.
    - `mode` string — Mode of the customer. One of `live` or `test`.
    - `name` string, nullable — Name of the customer.
    - `phone` string, nullable — Phone number of the customer.
    - `tax_id` object, nullable — Tax identifier of the customer. `null` when not provided.
      - `type` string — Type of the tax identifier, for example `cl_rut`.
      - `value` string — Value of the tax identifier.
  - `customer_email` string, nullable, required — Email address of the customer that receives payment notifications. `null` when not provided.
  - `error_reason` string, nullable, required — Reason why the payment failed, was rejected, or expired. `null` while the payment is in progress and when it succeeds.
  - `expires_at` string, date-time, nullable, required — ISO 8601 timestamp of when the payment expires and can no longer be paid. Only set for cash payments; `null` otherwise.
  - `metadata` object, required — Set of key-value pairs attached to the payment intent.
  - `mode` 'test' | 'live', required — Mode of the object. `live` objects use real institution data, `test` objects use fake data for integration testing.
  - `next_action` object, nullable, required — Action the customer must complete to continue the payment, as reported by the widget. `null` when no action is pending.
  - `payment_method` string, nullable, required — Identifier of the payment method used to pay, when the payment intent comes from a checkout session or a subscription. `null` otherwise.
  - `payment_type` string, required — Payment type used to pay, such as `bank_transfer` or `cash`.
  - `payment_type_options` object, required — Options specific to the payment type. For card payments, the object contains a `card` object. For cash payments, the object contains a `cash` object with the `reference_number`, `barcode_url`, and `voucher_url` of the payment. For bank transfers, the object is empty.
    - `card` object — Details of the card payment. Present only for card payments.
      - `authenticated_with_3ds` boolean — If `true`, the cardholder completed 3-D Secure authentication for this payment.
      - `bank` string, nullable — Name of the bank that issued the card. `null` when the issuing bank is unknown.
      - `brand` string — Brand of the card.
      - `country` string — Display name of the country where the card was issued, in English.
      - `kind` string — Kind of card. One of `credit`, `debit`, or `prepaid`.
      - `last_four_digits` string, nullable — Last four digits of the card number. `null` when the digits are not available.
      - `wallet` 'apple_pay' | 'google_pay' | 'null', nullable — Digital wallet used for the card payment. One of `apple_pay` or `google_pay`. `null` for cards entered manually.
  - `recipient_account` object, nullable, required — Bank account that receives the payment. `null` for cash payments.
    - `holder_id` string, nullable, required — Tax identifier of the account holder (RUT in Chile, RFC in Mexico).
    - `institution_id` string, nullable, required — Identifier of the institution of the account.
    - `number` string, nullable, required — Number of the account. In Mexico, the CLABE.
    - `type` string, nullable, required — Type of the account, such as `checking_account` or `sight_account`.
  - `reference_id` string, nullable, required — Identifier of the transfer assigned by the institution. `null` until the transfer is executed.
  - `sender_account` object, nullable, required — Bank account the customer pays from. `null` until Fintoc identifies the sender.
    - `holder_id` string, required — Tax identifier of the account holder (RUT in Chile, RFC in Mexico).
    - `institution_id` string, required — Identifier of the institution of the account.
    - `number` string, required — Number of the account.
    - `type` string, required — Type of the account, such as `checking_account` or `sight_account`.
  - `status` 'created' | 'failed' | 'succeeded' | 'rejected' | 'in_progress' | 'pending' | 'expired', required — Status of the payment intent. One of `created` (the customer has not started the payment), `in_progress` (the customer is paying), `succeeded` (the money reached the recipient account), `rejected` (the institution rejected the transfer), `failed` (the payment could not be completed), `expired` (the payment intent expired before being paid), or `pending` (the final status is not yet known; only used if your organization has the pending status enabled).
  - `subscription` string, nullable, required — Identifier of the subscription that originated the payment intent. `null` for one-off payments.
  - `transaction_date` string, date-time, nullable, required — ISO 8601 timestamp of when the institution executed the transfer. `null` until the transfer is executed.
  - `widget_token` string, nullable, required — Token used to initialize the Fintoc widget for this payment intent. Only returned when the payment intent is created; `null` in every other response.

## Other responses

- `400` — Invalid request: a required parameter is missing, the `amount` is not a positive integer or exceeds the maximum, the `currency` is not supported, or the `metadata` is invalid.
- `401` — Invalid or missing API key.
- `403` — Your organization does not have access to the Direct Debit product, or your organization collects direct debit (PAC) payments through the subscriptions API.
- `404` — The payment method does not exist, belongs to another organization, or does not match the mode of the API key used.
- `422` — The payment method cannot be charged because its underlying resource is in an invalid state, for example a subscription that is not active.

---

[API](https://skmtc.net/fintoc/apis/fintoc-api.md) · [All operations](https://skmtc.net/fintoc/apis/fintoc-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fintoc/fintoc-api/revisions/9dafa63688a3/schema)
