---
title: "Update pipeline"
method: PATCH
path: "/pipelines/{id}"
tags: ["Pipelines"]
---

# Update pipeline

`PATCH /pipelines/{id}`

## Path parameters

- `id` string, required

## Request body

- object
  - `source` SourceConfig
    - `type` 'stripe', required
    - `stripe` SourceStripeConfig, required
      - `api_key` string, required — Stripe API key (sk_test_... or sk_live_...)
      - `account_id` string — Stripe account ID (resolved from API if omitted)
      - `livemode` boolean — Whether this is a live mode sync
      - `api_version` string — Stripe API version (e.g. 2025-04-30.basil)
      - `base_url` string, uri — Override the Stripe API base URL (e.g. http://localhost:12111 for stripe-mock)
      - `webhook_url` string, uri — URL for managed webhook endpoint registration
      - `webhook_secret` string — Webhook signing secret (whsec_...) for signature verification
      - `websocket` boolean — Enable WebSocket streaming for live events
      - `poll_events` boolean — Enable events API polling for incremental sync after backfill
      - `webhook_port` integer — Port for built-in webhook HTTP listener (e.g. 4242)
      - `revalidate_objects` string[] — Object types to re-fetch from Stripe API on webhook (e.g. ["subscription"])
      - `backfill_limit` integer — Max objects to backfill per stream (useful for testing)
      - `rate_limit` integer — Max Stripe API requests per second (default: 25)
      - `backfill_concurrency` integer — Number of time-range segments for parallel backfill (default: 200)
  - `destination` union
    - object
      - `type` 'postgres', required
      - `postgres` DestinationPostgresConfig, required
        - `url` string — Postgres connection string (alias for connection_string)
        - `connection_string` string — Postgres connection string
        - `host` string — Postgres host (required for AWS IAM)
        - `port` number — Postgres port
        - `database` string — Database name (required for AWS IAM)
        - `user` string — Database user (required for AWS IAM)
        - `schema` string, required — Target schema name (e.g. "stripe_sync")
        - `batch_size` number — Records to buffer before flushing
        - `aws` object — AWS RDS IAM authentication config
          - `region` string, required — AWS region for RDS instance
          - `role_arn` string — IAM role ARN to assume (cross-account)
          - `external_id` string — External ID for STS AssumeRole
        - `ssl_ca_pem` string — PEM-encoded CA certificate for SSL verification (required for verify-ca / verify-full with a private CA)
    - object
      - `type` 'google-sheets', required
      - `google-sheets` DestinationGoogleSheetsConfig, required
        - `client_id` string — Google OAuth2 client ID (env: GOOGLE_CLIENT_ID)
        - `client_secret` string — Google OAuth2 client secret (env: GOOGLE_CLIENT_SECRET)
        - `access_token` string, required — OAuth2 access token
        - `refresh_token` string, required — OAuth2 refresh token
        - `spreadsheet_id` string — Target spreadsheet ID (created if omitted)
        - `spreadsheet_title` string — Title when creating a new spreadsheet
        - `batch_size` number — Rows per Sheets API append call
  - `streams` object[] — Selected streams to sync. All streams synced if omitted.
    - `name` string, required — Stream (table) name to sync.
    - `sync_mode` 'incremental' | 'full_refresh' — How the source reads this stream. Defaults to full_refresh.
    - `backfill_limit` integer — Cap backfill to this many records, then mark the stream complete.

## Response `200`

Updated pipeline

- object
  - `id` string, required — Unique pipeline identifier (e.g. pipe_abc123).
  - `source` SourceConfig, required
    - `type` 'stripe', required
    - `stripe` SourceStripeConfig, required
      - `api_key` string, required — Stripe API key (sk_test_... or sk_live_...)
      - `account_id` string — Stripe account ID (resolved from API if omitted)
      - `livemode` boolean — Whether this is a live mode sync
      - `api_version` string — Stripe API version (e.g. 2025-04-30.basil)
      - `base_url` string, uri — Override the Stripe API base URL (e.g. http://localhost:12111 for stripe-mock)
      - `webhook_url` string, uri — URL for managed webhook endpoint registration
      - `webhook_secret` string — Webhook signing secret (whsec_...) for signature verification
      - `websocket` boolean — Enable WebSocket streaming for live events
      - `poll_events` boolean — Enable events API polling for incremental sync after backfill
      - `webhook_port` integer — Port for built-in webhook HTTP listener (e.g. 4242)
      - `revalidate_objects` string[] — Object types to re-fetch from Stripe API on webhook (e.g. ["subscription"])
      - `backfill_limit` integer — Max objects to backfill per stream (useful for testing)
      - `rate_limit` integer — Max Stripe API requests per second (default: 25)
      - `backfill_concurrency` integer — Number of time-range segments for parallel backfill (default: 200)
  - `destination` union, required
    - object
      - `type` 'postgres', required
      - `postgres` DestinationPostgresConfig, required
        - `url` string — Postgres connection string (alias for connection_string)
        - `connection_string` string — Postgres connection string
        - `host` string — Postgres host (required for AWS IAM)
        - `port` number — Postgres port
        - `database` string — Database name (required for AWS IAM)
        - `user` string — Database user (required for AWS IAM)
        - `schema` string, required — Target schema name (e.g. "stripe_sync")
        - `batch_size` number — Records to buffer before flushing
        - `aws` object — AWS RDS IAM authentication config
          - `region` string, required — AWS region for RDS instance
          - `role_arn` string — IAM role ARN to assume (cross-account)
          - `external_id` string — External ID for STS AssumeRole
        - `ssl_ca_pem` string — PEM-encoded CA certificate for SSL verification (required for verify-ca / verify-full with a private CA)
    - object
      - `type` 'google-sheets', required
      - `google-sheets` DestinationGoogleSheetsConfig, required
        - `client_id` string — Google OAuth2 client ID (env: GOOGLE_CLIENT_ID)
        - `client_secret` string — Google OAuth2 client secret (env: GOOGLE_CLIENT_SECRET)
        - `access_token` string, required — OAuth2 access token
        - `refresh_token` string, required — OAuth2 refresh token
        - `spreadsheet_id` string — Target spreadsheet ID (created if omitted)
        - `spreadsheet_title` string — Title when creating a new spreadsheet
        - `batch_size` number — Rows per Sheets API append call
  - `streams` object[] — Selected streams to sync. All streams synced if omitted.
    - `name` string, required — Stream (table) name to sync.
    - `sync_mode` 'incremental' | 'full_refresh' — How the source reads this stream. Defaults to full_refresh.
    - `backfill_limit` integer — Cap backfill to this many records, then mark the stream complete.
  - `status` object — Live workflow status. Absent if no workflow is running for this pipeline.
    - `phase` string, required — Current workflow phase (e.g. "backfill", "live", "idle").
    - `paused` boolean, required — Whether the pipeline is currently paused.
    - `iteration` number, required — Number of times this workflow has continued-as-new.

## Other responses

- `400` — Bad request
- `404` — Not found

## Changes

- **2026-04-05** `486336d9ecd2` — 4 breaking, 27 warning, 3 info
  - added the new required request property `source/oneOf[subschema #1]/stripe`
  - removed `subschema #1, subschema #2` from the `destination` request property `oneOf` list
  - added `subschema #1, subschema #2` to the `destination` response property `oneOf` list for the response status `200`
  - removed the required property `source/oneOf[subschema #1]/api_key` from the response with the `200` status
  - …30 more
- **2026-04-04** `19373c4cc065` — 1 info
  - added the non-success response with the status `400`
- **2026-04-02** `131345353e38` — 9 breaking, 3 warning, 19 info
  - removed `subschema #1, subschema #2, subschema #3` from the `source` request property `oneOf` list
  - removed `subschema #1, subschema #2, subschema #3, subschema #4` from the `destination` request property `oneOf` list
  - the response property `status` became optional for the status `200`
  - the `id` response property's maxLength was unset from `64` for the response status `200`
  - …27 more

[Change history](https://skmtc.dev/stripe/apis/stripe-sync-service/changes/pipelines/:id/patch.md)

---

[API](https://skmtc.dev/stripe/apis/stripe-sync-service.md) · [All operations](https://skmtc.dev/stripe/apis/stripe-sync-service/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stripe/stripe-sync-service/revisions/486336d9ecd2/schema)
