# Update a program

> `PATCH` `/v1/programs`

URL: https://www.agencytitan.com/docs/tag/programs/PATCH/v1/programs

Operation ID: `programs_update`

Tag: [programs](https://www.agencytitan.com/docs/tag/programs.md)

## Description

Update or change an existing program definition and optionally manage its process links and schedules.

Use this when the user wants to:
- rename the program or adjust pricing, branding, or lifecycle status
- attach or link additional processes
- remove or unlink process links
- add, update, or remove schedules on existing program-process links

Client enrollments are intentionally deferred from this first AI-builder pass.

## Parameters

_None_

## Request body

- Required: yes
- Content-Type: `application/json`
  - Type: `object`
  - Properties:
    - `billing_enabled` (`boolean`) — Whether client subscription billing is enabled. When false, clients are not charged.
    - `color` (`string`)
    - `description` (`string`)
    - `enabled_billing_frequencies` (`array<string>`)
    - `icon` (`string`)
    - `name` (`string`)
    - `processes_to_add` (`array<object>`) — Optional new process links to add, each with optional schedules.
    - `program_id` (`string`) — Existing program ID.
    - `program_name` (`string`) — Alternative to program_id. Must match one program name exactly.
    - `program_process_ids_to_remove` (`array<string>`) — Optional existing program_process IDs to remove.
    - `recurring_billing` (`object`) — Recurring billing amount per supported frequency.
    - `schedule_ids_to_remove` (`array<string>`) — Optional existing schedule IDs to remove.
    - `schedules_to_add` (`array<object>`) — Optional schedules to add to existing program_process links.
    - `schedules_to_update` (`array<object>`) — Optional existing schedules to update.
    - `startup_fee` (`number`)
    - `status` (`string`)

## Responses

- `200` (`application/json`): Successful response.
  - Type: `object`
  - Properties:
    - `data` (`object`, required)
- `400` (`application/json`): Request validation failed (unknown or out-of-range parameters/properties are rejected).
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `401` (`application/json`): Missing, invalid, expired, or revoked bearer token.
  - Type: `object`
  - Properties:
    - `error` (`string`, required)
    - `error_description` (`string`, required)
- `403` (`application/json`): The authenticated user does not have permission for this operation.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `404` (`application/json`): The requested resource was not found.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `409` (`application/json`): The request conflicts with an existing record or partially applied.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `429` (`application/json`): Per-tenant rate limit exceeded (600 requests/minute across all /v1 REST endpoints). The Retry-After header indicates how many seconds to wait.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `500` (`application/json`): An unexpected internal error occurred.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)

## Authentication

- `bearerAuth` — http (bearer) — All /v1 endpoints (except `/v1/openapi.json` and `/v1/llms.txt`) require a bearer token. Two equal first-class paths: (1) an OAuth 2.0 access token from the au…

## Useful links

- Interactive page: https://www.agencytitan.com/docs/tag/programs/PATCH/v1/programs
- API reference home: https://www.agencytitan.com/docs/
- Tag page: https://www.agencytitan.com/docs/tag/programs.md
- This operation as Markdown: https://www.agencytitan.com/docs/tag/programs/PATCH/v1/programs.md
- OpenAPI JSON: https://www.agencytitan.com/docs/openapi.json
- Full API Markdown: https://api.agencytitan.com/v1/llms.txt
- API keys: https://app.agencytitan.com/settings/api-mcp
