> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Stripe product

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

Updates the product identified by `product_id`. Changes only the fields you send. Anything you leave out keeps its current value. Sending `null` has the same effect.

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. Check `livemode` on each returned product or price to see which catalog the call used.

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



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json put /api/apps/{app_id}/payments/stripe/products/{product_id}
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/payments/stripe/products/{product_id}:
    put:
      summary: Update Stripe product
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Updates the product identified by `product_id`. Changes only the fields
        you send. Anything you leave out keeps its current value. Sending `null`
        has the same effect.


        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. Check
        `livemode` on each returned product or price to see which catalog the
        call used.


        Requires write access to the app. Workspace viewers cannot call this
        operation.
      operationId: >-
        update_product_api_apps__app_id__payments_stripe_products__product_id__put
      parameters:
        - name: product_id
          in: path
          required: true
          schema:
            type: string
            description: Stripe product ID in the configured account.
            title: Product Id
          description: Stripe product ID in the configured account.
          example: prod_T7mK2p9Q4r6S8v
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the Base44 app.
            title: App Id
          description: ID of the Base44 app.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductRequest'
      responses:
        '200':
          description: The operation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripeCatalogProduct'
        '400':
          description: Stripe keys are missing, or the app's test sandbox has expired.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            The credential is not permitted or you don't have the required app
            access. A missing app also fails the app access check. Setup and
            catalog operations also return `app_payment_management_not_allowed`
            when the app's workspace restricts payment management.
        '404':
          description: The app is outside the credential's granted workspace.
        '409':
          description: The workspace requires an unlocked SSO session.
        '422':
          description: A value doesn't match its field's type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - PersonalAccessTokenAuth:
            - full_access
components:
  schemas:
    UpdateProductRequest:
      properties:
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: >-
            New product name. Leave it out to keep the current value. Sending
            `null` has the same effect. Defaults to `null`.
          example: Studio membership
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: >-
            New product description. Leave it out to keep the current value.
            Sending `null` has the same effect. Defaults to `null`.
          example: Access to weekly classes.
        metadata:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Metadata
          description: >-
            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`. Leave it out to keep the current value. Sending `null` has
            the same effect.
          example:
            tier: standard
        active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Active
          description: >-
            Whether the product is active. Leave it out to keep the current
            value. Sending `null` has the same effect. Defaults to `null`.
          example: false
      type: object
      title: UpdateProductRequest
      description: Request to update a Stripe product.
    StripeCatalogProduct:
      properties:
        id:
          type: string
          title: Id
          description: Stripe product ID.
          example: prod_T7mK2p9Q4r6S8v
        name:
          type: string
          title: Name
          description: Product name.
          example: Studio membership
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Product description, or `null` when none is set.
          example: Access to weekly classes.
        active:
          type: boolean
          title: Active
          description: Whether the product is active.
          example: true
        images:
          items:
            type: string
          type: array
          title: Images
          description: >-
            Product image URLs. Neither Create nor Update Stripe product takes
            an `images` field, so this stays empty unless you add images
            directly in the Stripe dashboard for the account these credentials
            point to.
          example:
            - https://example.com/membership.jpg
        metadata:
          additionalProperties: true
          type: object
          title: Metadata
          description: Metadata stored on the product.
          example:
            category: membership
        livemode:
          type: boolean
          title: Livemode
          description: >-
            `true` when the product is in the live catalog, `false` when it's in
            the test catalog.
          example: false
      type: object
      required:
        - id
        - name
        - description
        - active
        - images
        - metadata
        - livemode
      title: StripeCatalogProduct
      description: A product in the Stripe account configured for the app.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: >-
        Personal access token, sent as `Authorization: Bearer <token>`. Each
        operation lists the permission it needs: `read_only` or `full_access`. A
        full-access token can call every operation. A read-only token can call
        only the operations that list `read_only`; anything else returns 403
        `read_only_credential_route_not_allowed`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.