---
title: "Update a source"
method: PATCH
path: "/v1/sources/{source_id}"
tags: ["Sources"]
---

# Update a source

`PATCH /v1/sources/{source_id}`

## Request

- Base URL: `https://sourcefinch.com`
- URL: `https://sourcefinch.com/v1/sources/{source_id}`
- Auth: HTTP bearer

Changing url or recipe creates a new version (unchanged values create none). name, schedule and key_field change without a new version.

## Path parameters

- `source_id` string, uuid, required

## Headers

- `X-Request-Id` string
- `SourceFinch-Project` string, uuid

## Request body

- SourceUpdate: Changing url or recipe creates a new source version; name, schedule and key_field do not.
  - `name` string
  - `url` string, uri
  - `recipe` Recipe
    - `schema` 'sourcefinch/recipe@1'
    - `mode` 'http' | 'browser'
    - `format` 'html' | 'json' | 'xml' | 'csv'
    - `items` string, required
    - `fields` object, required
    - `connector` object
      - `id` string, required
      - `version` integer, required
    - `flow` object
      - `baseUrl` string, uri, required
      - `steps` object[], required
        - `id` string, required
        - `method` 'GET' | 'POST'
        - `url` string, required
        - `headers` object
        - `body` Url (unresolved $ref)
        - `capture` object
        - `expect` object
          - `status` integer
          - `contains` string
          - `notContains` string
        - `extract` true
        - `paginate` object
          - `start` integer
          - `step` integer
          - `maxPages` integer, required
    - `inputs` object
      - `datasetId` string, uuid, required
      - `version` integer, required
      - `key` Id, required (unresolved $ref)
      - `max` integer, required
    - `pagination` union
      - object
        - `kind` 'param', required
        - `param` string, required
        - `start` integer
        - `step` integer
        - `maxPages` integer, required
      - object
        - `kind` 'next', required
        - `selector` Items, required (unresolved $ref)
        - `maxPages` integer, required
    - `waitFor` Items (unresolved $ref)
    - `actions` union[]
      - union
        - object
          - `kind` 'click', required
          - `selector` Items, required (unresolved $ref)
          - `times` integer
        - object
          - `kind` 'scroll', required
          - `times` Times (unresolved $ref)
        - object
          - `kind` 'waitFor', required
          - `selector` Items, required (unresolved $ref)
        - object
          - `kind` 'dismiss', required
          - `selector` Items, required (unresolved $ref)
        - object
          - `kind` 'select', required
          - `selector` Items, required (unresolved $ref)
          - `value` string, required
        - object
          - `kind` 'fill', required
          - `selector` Items, required (unresolved $ref)
          - `value` string, required
          - `submit` boolean
    - `required` string[]
    - `csv` object
      - `delimiter` ',' | '	' | ';' | '|'
      - `header` boolean
      - `encoding` 'utf-8' | 'latin1' | 'windows-1252'
    - `types` object
  - `schedule` 'manual' | 'hourly' | 'daily' | 'weekly'
  - `key_field` string, nullable

## Response `200`

The updated source

- Source: A monitored source: a URL, a recipe and a schedule.
  - `id` string, uuid, required
  - `project_id` string, uuid, required
  - `name` string, required
  - `url` string, required
  - `recipe` object, required: A recipe@1 document (see the Recipe schema)
  - `version` integer, required
  - `recipe_version_id` string, uuid, nullable: The immutable reviewed recipe version, or null for a custom source
  - `schedule` 'manual' | 'hourly' | 'daily' | 'weekly', required
  - `key_field` string, nullable, required
  - `next_run_at` string, nullable, required: ISO-8601 timestamp (UTC)
  - `created_at` string, required: ISO-8601 timestamp (UTC)
  - `updated_at` string, required: ISO-8601 timestamp (UTC)

## Other responses

- `400`: Problem details; `code` is `validation`
- `401`: Problem details; `code` is `unauthenticated`
- `402`: Problem details; `code` is `plan_limit`
- `403`: Problem details; `code` is `forbidden`
- `404`: Problem details; `code` is `not_found`
- `409`: Problem details; `code` is `policy`
- `429`: Problem details; `code` is `rate_limited`
- `500`: Problem details; `code` is `internal`

## Changes

- **2026-10-20** `190cbe57a5e8`: 2 info
  - added the new optional request property `recipe/flow/steps/items/extract`
  - added the new optional request property `recipe/flow/steps/items/paginate`

[Operation history](https://skmtc.dev/sourcefinch/apis/sourcefinch-api/changes/v1/sources/:source_id/patch.md)

---

[API](https://skmtc.dev/sourcefinch/apis/sourcefinch-api.md) · [All operations](https://skmtc.dev/sourcefinch/apis/sourcefinch-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sourcefinch/apis/sourcefinch-api/revisions/190cbe57a5e8?raw)
