> ## 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.

# Create embedded Google Ads payment setup

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

Starts the card-saving flow for rendering inside your own page, rather than sending a person to a Stripe-hosted page.

This is the embedded counterpart to [Create Google Ads payment setup](/api-reference/create-google-ads-payment-setup). It takes no body, because there is no return trip to configure: you mount Stripe's embedded checkout with the `client_secret` and poll [Get Google Ads billing status](/api-reference/get-google-ads-billing-status) to see when the card lands. Nothing is charged here.

Prefer the hosted flow unless you are actually building the form. It hands you one URL to give a person, where this hands you a token you still have to render Stripe's component around.

<Note>Base44 never accepts card details through this API, and neither should you. This endpoint only produces the page a person fills in.</Note>

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/google-ads/billing/payment-setup-embedded
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/google-ads/billing/payment-setup-embedded:
    post:
      summary: Create embedded Google Ads payment setup
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Starts the card-saving flow for rendering inside your own page, rather
        than sending a person to a Stripe-hosted page.


        This is the embedded counterpart to [Create Google Ads payment
        setup](/api-reference/create-google-ads-payment-setup). It takes no
        body, because there is no return trip to configure: you mount Stripe's
        embedded checkout with the `client_secret` and poll [Get Google Ads
        billing status](/api-reference/get-google-ads-billing-status) to see
        when the card lands. Nothing is charged here.


        Prefer the hosted flow unless you are actually building the form. It
        hands you one URL to give a person, where this hands you a token you
        still have to render Stripe's component around.


        <Note>Base44 never accepts card details through this API, and neither
        should you. This endpoint only produces the page a person fills
        in.</Note>


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>
      operationId: >-
        create_embedded_payment_setup_api_apps__app_id__google_ads_billing_payment_setup_embedded_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads campaigns to manage.
            title: App Id
          description: ID of the app whose Google Ads campaigns to manage.
          example: 6820f3a4e7b91d003c45a1f2
      responses:
        '200':
          description: The token for mounting Stripe's embedded checkout.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmbeddedPaymentSetupSession'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, the app does not exist, or you
            used a workspace API key. A missing app and an app you cannot reach
            are deliberately the same answer.
components:
  schemas:
    EmbeddedPaymentSetupSession:
      properties:
        client_secret:
          type: string
          title: Client Secret
          description: >-
            Token that mounts Stripe's embedded checkout in a browser. It is
            meant for client-side use and is scoped to this one session, so it
            is not a secret key, but it does let whoever holds it complete this
            card setup.
          example: cs_live_a1B2c3D4e5_secret_f6G7h8I9j0
        session_id:
          type: string
          title: Session Id
          description: Stripe's ID for the session.
          example: cs_live_a1B2c3D4e5
        publishable_key:
          type: string
          title: Publishable Key
          description: >-
            Base44's Stripe publishable key, which the embedded checkout needs.
            It is public by design.
          example: pk_live_51H8xY2eZvKYlo2C
      type: object
      required:
        - client_secret
        - session_id
        - publishable_key
      title: EmbeddedPaymentSetupSession
      description: A Stripe Checkout session for saving a card inside your own page.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````