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

# Update settings

> Patch settings (legal in every status; omitted fields unchanged)



## OpenAPI

````yaml /openapi-v3.yaml patch /send/campaigns/{campaign_id}/settings
openapi: 3.1.0
info:
  title: Origami API v3
  version: '3.0'
  description: >
    The Origami **v3 API** is the current public surface: named, typed

    operations in three sections (**Account**, **Leads**, **Send**) plus

    one shared **Job** resource for all async work. The same catalog

    drives HTTP (`https://origami.chat/api/v3`), the hosted MCP server

    (`https://origami.chat/mcp`), and the `origami` CLI.


    **Wire conventions.** Fields are `snake_case`. Every object carries

    an `object` type field. Every list is

    `{ "object": "list", "items": [...], "next_cursor": string|null, "url":
    string }`

    and pages with `cursor` + `limit` (max 100). Unknown request fields

    are rejected with `400 VALIDATION_ERROR` — a camelCase body fails

    loudly instead of being silently stripped.


    **Async work.** Async operations return `202` with a Job. Poll

    `GET /jobs/{job_id}` honoring `next_poll_at` / `Retry-After`, or

    subscribe to `job.*` webhooks. `succeeded` means the work

    *including enrichment* is done, so result counts are final.


    **Auth.** `Authorization: Bearer og_live_...`. Keys carry a role

    (`member` default, or `admin`). Scope a request to a child project

    with `x-origami-project: <project_id>`. The header applies to

    Leads, Send, Jobs, and — within Account — chats and exclusion

    lists. It is ignored by project management, org reads, senders,

    domains, mailboxes, webhooks, and API-key routes.


    **Idempotency.** Any POST may send `Idempotency-Key: <uuid>`. Reuse

    with a different body → `409 IDEMPOTENCY_MISMATCH`. A racing retry

    → `409 IDEMPOTENCY_PENDING` (honor `Retry-After`).


    v1 and v2 remain available but are deprecated for new integrations.

    See the v2 → v3 migration guide for the 1:1 flow map.
servers:
  - url: https://origami.chat/api/v3
security:
  - bearerAuth: []
tags:
  - name: jobs
    description: Shared async Job resource
  - name: account
    description: Org, projects, chats, senders, domains, exclusions, webhooks, keys
  - name: leads
    description: Lists, columns, rows, searches, enrichment
  - name: send
    description: 'Campaigns: the linear send recipe'
paths:
  /send/campaigns/{campaign_id}/settings:
    patch:
      tags:
        - send
      summary: Patch settings (legal in every status; omitted fields unchanged)
      operationId: send.campaigns.settings.patch
      parameters:
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 200
                channels:
                  type: array
                  items:
                    type: string
                    enum:
                      - email
                      - linkedin
                  minItems: 1
                  maxItems: 2
                send_window:
                  type: object
                  properties:
                    start_hour:
                      type: integer
                      minimum: 0
                      maximum: 23
                    end_hour:
                      type: integer
                      minimum: 0
                      maximum: 23
                    days:
                      type: array
                      items:
                        type: integer
                        minimum: 0
                        maximum: 6
                      minItems: 1
                      maxItems: 7
                  required:
                    - start_hour
                    - end_hour
                    - days
                  additionalProperties: false
                  description: >-
                    start_hour is inclusive, end_hour exclusive (0 = end of
                    day); cross-midnight windows (start_hour > end_hour) are
                    legal
                  nullable: true
                block_active_duplicates:
                  type: boolean
                block_prior_contacts:
                  type: boolean
                auto_lead_refill_enabled:
                  type: boolean
                auto_lead_refill_budget_credits:
                  type: integer
                  minimum: 0
                  nullable: true
                require_message_approval:
                  type: boolean
                allow_excluded_recipients:
                  type: boolean
                block_already_connected:
                  type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Validation error (unknown fields are rejected)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict (see error codes)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      description: Closed error envelope — no additional top-level keys.
      additionalProperties: false
      properties:
        error:
          type: string
        code:
          type: string
          description: UPPER_SNAKE_CASE machine code
        details:
          type: object
        handoff:
          type: object
          description: >-
            In-app recovery link when the user can fix the situation in the
            dashboard
          properties:
            kind:
              type: string
              enum:
                - connect-accounts
                - reconnect-account
                - billing
                - upgrade-plan
                - sca-confirm
            url:
              type: string
            label:
              type: string
      required:
        - error
        - code
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key: Authorization: Bearer og_live_...'

````