---
title: "Create Stripe price"
method: POST
path: "/api/apps/{app_id}/payments/stripe/prices"
---

# Create Stripe price

`POST /api/apps/{app_id}/payments/stripe/prices`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Creates a one-time or recurring price for the product identified by `product_id`.

Uses the Stripe account selected by the app's stored credentials. Live keys select the live catalog and test keys select the test catalog. Products and prices belong to that Stripe account, so multiple apps configured with the same account share the same catalog.

Requires write access to the app. Workspace viewers cannot call this operation.

## Path parameters

- `app_id` string, required — ID of the Base44 app.

## Request body

- CreatePriceRequest — Request to create a Stripe price.
  - `product_id` string, required — Stripe product ID to price.
  - `unit_amount` integer, required — Amount in the currency's smallest unit. For USD, `2500` represents $25.00.
  - `currency` string — Three-letter ISO 4217 currency code. Converted to lowercase before sending to Stripe. Defaults to `usd`.
  - `recurring_interval` string, nullable — Billing interval. Use `day`, `week`, `month`, or `year`. Omit it or send `null` for a one-time price. Defaults to `null`.
  - `recurring_interval_count` integer — Number of billing intervals between charges. Used only when a recurring interval is supplied. Defaults to 1.
  - `metadata` object, nullable — Metadata to store, as string key-value pairs. [Stripe's metadata rules](https://docs.stripe.com/api/metadata) limit it to 50 keys, 40 characters per key, and 500 characters per value. Defaults to `null`.

## Response `200`

The operation result.

- StripeCatalogPrice — A price in the Stripe account configured for the app.
  - `id` string, required — Stripe price ID.
  - `product` string, required — Stripe product ID this price belongs to.
  - `unit_amount` integer, nullable, required — Amount in the currency's smallest unit, or `null` for pricing without a fixed integer unit amount.
  - `currency` string, required — Currency as a lowercase three-letter ISO 4217 code.
  - `active` boolean, required — Whether the price is active.
  - `metadata` object, required — Metadata stored on the price.
  - `recurring` StripeCatalogRecurring, required — The recurring billing schedule of a Stripe price.
    - `interval` string, required — Billing interval. Either `day`, `week`, `month`, or `year`.
    - `interval_count` integer, required — Number of intervals between bills.
    - `usage_type` string, required — Usage model. Either `licensed` or `metered`.

## Other responses

- `400` — Stripe keys are missing, or the app's test sandbox has expired.
- `401` — Missing or invalid credentials.
- `403` — The credential is not permitted or you don't have the required app access. A missing app also fails the app access check.
- `404` — The app is outside the credential's granted workspace.
- `409` — The workspace requires an unlocked SSO session.
- `422` — The body is missing, `product_id` or `unit_amount` is missing, or a value doesn't match its field's type.

## Changes

- **2026-09-15** `ca10c5ce328c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/base44/apis/base44-app-management-api/changes/api/apps/:app_id/payments/stripe/prices/post.md)

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/base44/apis/base44-app-management-api/revisions/cf164639a9bf?raw)
