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

# Update an offer

> **Beta. This endpoint is unstable and may still change without notice.** Pin against the dated version and watch the changelog.

Updates the editable fields of a draft offer (title, document blocks, custom variables, acceptance mode, validity, auto-activation). Most fields freeze once the offer is accepted.



## OpenAPI

````yaml assets/openapi-v2-offers.json put /offers/{id}
openapi: 3.1.0
info:
  title: Fynn Angebote API (Beta)
  version: 2026-06
  description: >-
    **Beta / Unstable.** The Fynn Angebote (offers) API lets you read, update,
    publish, approve and accept offers programmatically. It is the actively
    maintained surface that replaces the older offer endpoints (still available
    but deprecated, removed on 2026-08-01).


    These endpoints are new and may still change without notice while the
    surface settles. Pin against the dated version and watch the changelog
    before relying on them in production.


    Authenticate every request with an API token of your organisation
    (`Authorization: Bearer api_...`). Documents are returned as media
    references; see the note on each media `id` for how to download the file.
servers:
  - url: https://coreapi.io
    description: Production
  - url: https://preview.coreapi.io
    description: Sandbox
security:
  - ApiToken: []
tags:
  - name: Offers
    description: Read, update, publish and accept offers. Beta.
  - name: Offer approval
    description: Internal approval flow for offers. Beta.
paths:
  /offers/{id}:
    put:
      tags:
        - Offers
      summary: Update an offer
      description: >-
        **Beta. This endpoint is unstable and may still change without notice.**
        Pin against the dated version and watch the changelog.


        Updates the editable fields of a draft offer (title, document blocks,
        custom variables, acceptance mode, validity, auto-activation). Most
        fields freeze once the offer is accepted.
      operationId: updateOffer
      parameters:
        - name: id
          in: path
          required: true
          description: Offer ID (ULID).
          schema:
            type: string
            format: ulid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOfferInput'
      responses:
        '200':
          description: The updated offer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdatedOfferOutput'
        '403':
          description: Access denied.
        '404':
          description: Offer not found or in another organisation.
        '409':
          description: The offer is locked because it was already accepted.
      security:
        - ApiToken: []
components:
  schemas:
    UpdateOfferInput:
      type: object
      description: >-
        Partial update of a draft offer. Most fields freeze once the offer is
        accepted.
      properties:
        name:
          type:
            - string
            - 'null'
        sections:
          type: array
          items:
            type: object
            additionalProperties: true
          description: Document blocks that make up the offer body.
        customVariables:
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
        acceptanceMode:
          type: string
          enum:
            - click
            - esignature
            - print
        validUntil:
          type:
            - string
            - 'null'
          format: date-time
        autoActivateSubscription:
          type: boolean
    UpdatedOfferOutput:
      type: object
      properties:
        id:
          type: string
        name:
          type:
            - string
            - 'null'
        status:
          type: string
          enum:
            - open
            - signing
            - awaiting_invoice_details
            - signed
            - archived
        acceptanceMode:
          type: string
          enum:
            - click
            - esignature
            - print
        dealType:
          type: string
          enum:
            - new_business
            - expansion
            - renewal
            - one_off
        validUntil:
          type:
            - string
            - 'null'
          format: date-time
        autoActivateSubscription:
          type: boolean
        customVariables:
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
      required:
        - id
        - status
        - acceptanceMode
        - dealType
        - autoActivateSubscription
  securitySchemes:
    ApiToken:
      type: http
      scheme: bearer
      description: >-
        API token of the organisation. Send it as Authorization: Bearer api_...
        The token is bound to exactly one organisation.

````