> ## 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.

# Angebote auflisten

> Gibt die Angebote der Organisation als Liste mit Paginierung zurück.



## OpenAPI

````yaml assets/openapi-v2-offers.json get /offers
openapi: 3.1.0
info:
  title: Fynn V2 Angebote API
  version: 2026-06
  description: >-
    REST API für Fynn Angebote. Damit legst du Angebote an, veröffentlichst sie
    für deine Empfänger, forderst elektronische Unterschriften an und liest die
    öffentliche Empfängeransicht. Angebote werden in der Regel im Wallet
    erstellt und vom Empfänger in der Offer-View angenommen. Diese API ist für
    Integrationen gedacht, die denselben Ablauf programmatisch abbilden.
    Authentifiziere die Verwaltungs-Endpunkte mit einem API-Token deiner
    Organisation. Die öffentlichen Endpunkte erreichst du über den persönlichen
    Einladungslink ohne Anmeldung.
servers:
  - url: https://coreapi.io
    description: Production
  - url: https://preview.coreapi.io
    description: Sandbox
security:
  - ApiToken: []
tags:
  - name: Offers
    description: Angebote anlegen, veröffentlichen und verwalten.
  - name: Offer templates
    description: Wiederverwendbare Angebotsvorlagen.
  - name: Public offer
    description: Öffentliche Empfängeransicht über den Einladungslink.
paths:
  /offers:
    get:
      tags:
        - Offers
      summary: Angebote auflisten
      description: Gibt die Angebote der Organisation als Liste mit Paginierung zurück.
      operationId: listOffers
      parameters:
        - name: page
          in: query
          description: The collection page number
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: integer
            default: 1
          style: form
          explode: false
          allowReserved: false
        - name: limit
          in: query
          description: The number of items per page
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: integer
            default: 30
            minimum: 0
            maximum: 100
          style: form
          explode: false
          allowReserved: false
        - name: status
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
          style: form
          explode: false
          allowReserved: false
        - name: status[]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          allowReserved: false
        - name: contactPerson
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
          style: form
          explode: false
          allowReserved: false
        - name: contactPerson[]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          allowReserved: false
        - name: dealType
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
          style: form
          explode: false
          allowReserved: false
        - name: dealType[]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          allowReserved: false
        - name: acceptanceMode
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
          style: form
          explode: false
          allowReserved: false
        - name: acceptanceMode[]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          allowReserved: false
        - name: exists[subscription]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: boolean
          style: form
          explode: false
          allowReserved: false
        - name: order[number]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[name]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[status]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[dealType]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[acceptanceMode]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[signedAt]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[validUntil]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[cachedContractValueCents]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[createdAt]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: order[updatedAt]
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
            enum:
              - asc
              - desc
          style: form
          explode: false
          allowReserved: false
        - name: signed
          in: query
          description: ''
          required: false
          deprecated: false
          allowEmptyValue: true
          schema:
            type: string
          style: form
          explode: false
          allowReserved: false
          example: true
      responses:
        '200':
          description: Offer collection
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Offer-OfferRead'
                  meta:
                    type: object
                    properties:
                      pagination:
                        type: object
                        properties:
                          totalItems:
                            type: integer
                          itemsPerPage:
                            type: integer
                          currentPage:
                            type: integer
                          lastPage:
                            type: integer
                          pageTotalItems:
                            type: integer
      deprecated: false
      security:
        - ApiToken: []
components:
  schemas:
    Offer-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          readOnly: true
          type: string
        subscription:
          anyOf:
            - $ref: '#/components/schemas/Subscription-OfferRead'
            - type: 'null'
        customer:
          anyOf:
            - $ref: '#/components/schemas/Customer-OfferRead'
            - type: 'null'
        number:
          type: string
        name:
          type:
            - string
            - 'null'
        status:
          readOnly: true
          type: string
          enum:
            - open
            - signing
            - awaiting_invoice_details
            - signed
            - archived
        sections:
          type: array
          items:
            type: string
        customVariables:
          description: >-
            Vom Nutzer im Editor angelegte eigene Variablen (Feedback-Runde 1,

            Punkt 11): flaches name => Wert-Mapping, das der
            OfferVariableResolver

            zusätzlich zu den Systemvariablen auflöst. Bei Namenskollision haben

            Systemvariablen Vorrang ({@see
            \Fynn\Core\Domain\Offer\Service\OfferVariableResolver}).
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
        locale:
          readOnly: true
          type: string
        recipients:
          readOnly: true
          type: array
          items:
            $ref: '#/components/schemas/OfferRecipient-OfferRead'
        purchaseOrderDocument:
          readOnly: true
          description: >-
            Vom Käufer (oder der delegierten Person) hochgeladenes
            Purchase-Order-

            Dokument (D17). Verknüpft beim captureInvoiceData über

            `purchaseOrder.ref` aus dem Invoice-Details-Submit; beim Finalize
            wird

            die Relation zusätzlich auf die Subscription kopiert. Die
            KI-Extraktion

            der PO-Daten kommt bewusst NICHT in dieser Welle.
          type:
            - string
            - 'null'
          format: uuid
          example: ad8c7c0e-3b1a-4f5c-8b7a-5d5b6a4b2f1e
        auditLogDocument:
          readOnly: true
          type:
            - string
            - 'null'
          format: uuid
          example: ad8c7c0e-3b1a-4f5c-8b7a-5d5b6a4b2f1e
        signedDocument:
          readOnly: true
          type:
            - string
            - 'null'
          format: uuid
          example: ad8c7c0e-3b1a-4f5c-8b7a-5d5b6a4b2f1e
        signedAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          type:
            - string
            - 'null'
        autoActivateSubscription:
          default: true
          example: true
          type: boolean
        crmDealId:
          readOnly: true
          type:
            - string
            - 'null'
        acceptanceMode:
          description: >-
            Offer-level acceptance mode (per D9 in
            docs/build-offer-view-wave-decisions.md).
          default: click
          example: click
          type: string
        dealType:
          description: Deal-type denormalised at publish-time (per D2).
          default: new_business
          example: new_business
          type: string
        validUntil:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          description: >-
            Offer expiry (per D7). Buyers acting on a stale link are rejected
            via

            `OfferExpiredException` (HTTP 410). Frozen at publish time; nullable
            for

            historical offers.
          type:
            - string
            - 'null'
        cachedContractValueCents:
          readOnly: true
          description: >-
            Cached recurring contract value (per D6). Written at publish-time by

            `OfferContractValueCalculator` for list-view filtering/sorting only;

            the read path always recomputes. Cents; flat_fee=qty-agnostic
            invariant

            honored by the calculator.
          type:
            - string
            - 'null'
        cachedContractValueCurrency:
          readOnly: true
          type:
            - string
            - 'null'
        createdAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date and time when the resource was created.
          type: string
        updatedAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date and time when the resource was last updated.
          type: string
        capturedInvoiceDetails:
          readOnly: true
          description: >-
            Roh-Shape der erfassten Rechnungsdaten für den wallet-Detail-Output

            (D21 Manual-Completion-Prefill liest `offer.capturedInvoiceDetails`

            tolerant — Legacy-Zeilen tragen 13 Schlüssel, neue zusätzlich

            costCenter/leitwegId). Bewusst der persistierte Array-Shape statt
            des

            VOs, dessen Properties keine Serialisierungs-Gruppen tragen.
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
        contactPerson:
          readOnly: true
          description: The contact person of the offer
          anyOf:
            - $ref: '#/components/schemas/ContactPerson-OfferRead'
            - type: 'null'
        signed:
          readOnly: true
          type: boolean
        issuedAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: >-
            Ausstellungsdatum (issueDate) als roher UTC-Instant: der Zeitpunkt,
            zu dem

            die publizierte Version beim Käufer live ging (autoritativ,
            FYNN-3273).
          type: string
        publishedVersionHash:
          readOnly: true
          type:
            - string
            - 'null'
        currentVersionHash:
          readOnly: true
          type:
            - string
            - 'null'
    Subscription-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          readOnly: true
          example: ad8f1c2c-3b1c-4b0a-8b0a-0b0b0b0b0b0b
          type: string
        externalId:
          type:
            - string
            - 'null'
        number:
          description: The number of the subscription.
          example: S-00000001
          type: string
        name:
          description: >-
            The name of the subscription. Defaults to the name of the plan. This
            will be used in the invoice for the grouping headers.
          example: Fitness M
          type:
            - string
            - 'null'
        billingGroup:
          description: The billing group defines the billing cycle of the subscription.
          anyOf:
            - $ref: '#/components/schemas/BillingGroup-OfferRead'
            - type: 'null'
        periods:
          type: array
          items:
            $ref: '#/components/schemas/TermPeriod-OfferRead'
        status:
          readOnly: true
          description: |-
            The status of the subscription.

            Possible values:
             * `draft`: The subscription is in draft mode and not active yet.
             * `active`: The subscription is active and will be billed.
             * `paused`: The subscription is paused and will not be billed.
             * `cancelled`: The subscription is cancelled and will not be billed anymore.
             * `terminated`: The subscription is terminated and will not be billed anymore.
             * `voided`: The subscription is voided and will not be billed anymore. Subscription will be removed from all statistics.
             * `offer`: The subscription is an offer and waiting for acceptance.
          example: active
        activatedAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date the subscription was activated.
          type:
            - string
            - 'null'
        poNumber:
          description: The po number of the subscription.
          example: PO-00000001
          type:
            - string
            - 'null'
        contractDetails:
          $ref: '#/components/schemas/ContractDetails-OfferRead'
          description: The contract details of the subscription.
        trialEndsOn:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date the trial period ends.
          type:
            - string
            - 'null'
        customFields:
          additionalProperties:
            type: string
          type:
            - object
            - 'null'
          description: >-
            Custom fields for the entity. The keys are the field names and the
            values are the field values. They need to be configured under
            \"/custom-fields\" in the API documentation. The input is validated
            against the configuration. For more details see [Custom Fields
            Guide](/guide/tenant/custom-fields)
          example:
            field1: value1
            field2: value2
        statistics:
          readOnly: true
          anyOf:
            - $ref: '#/components/schemas/SubscriptionStatistics-OfferRead'
            - type: 'null'
        createdAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date and time when the resource was created.
          type: string
        updatedAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The date and time when the resource was last updated.
          type: string
        nextBillingDate:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The next billing date of the subscription.
          type:
            - string
            - 'null'
        lastBillingAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          description: The last billing date of the subscription.
          type:
            - string
            - 'null'
        partner:
          readOnly: true
          description: The partner of the customer.
          anyOf:
            - $ref: '#/components/schemas/PartnerResource-OfferRead'
            - type: 'null'
    Customer-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          readOnly: true
          example: 00000000-0000-0000-0000-000000000000
          type: string
        customerNumber:
          minLength: 2
          maxLength: 255
          example: CUSTOMER-000
          nullable: false
        timeZone:
          type: string
          example: Europe/Berlin
          description: IANA time zone
          readOnly: true
          default: Europe/Berlin
        firstName:
          minLength: 2
          maxLength: 255
          description: Can be empty if the customer is a company.
          example: John
          nullable: true
        lastName:
          minLength: 2
          maxLength: 255
          description: Can be empty if the customer is a company.
          example: Doe
          nullable: true
        currencyCode:
          description: >-
            Can be empty. In this case the default currency of the tenant is
            used.
          externalDocs:
            url: https://schema.org/priceCurrency
          example: EUR
          type: string
        companyName:
          minLength: 2
          maxLength: 255
          example: Acme Inc.
          type:
            - string
            - 'null'
        datevId:
          minLength: 2
          maxLength: 255
          description: The ID of the customer in DATEV
          example: '123456789'
          type:
            - string
            - 'null'
        status:
          default: STATUS_ACTIVE
          example: STATUS_ACTIVE
          enum:
            - STATUS_ACTIVE
            - STATUS_ARCHIVED
            - STATUS_SUSPENDED
    OfferRecipient-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          readOnly: true
          type: string
        email:
          type: string
        firstName:
          type:
            - string
            - 'null'
        lastName:
          type:
            - string
            - 'null'
        role:
          type: string
          enum:
            - read
            - sign
            - countersigner
        createdAt:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          readOnly: true
          type: string
        signingStatus:
          readOnly: true
          default: not_started
          example: not_started
          type: string
          enum:
            - pending
            - started
            - signed
            - not_started
            - archived
        signingLog:
          readOnly: true
          type: array
          items:
            type: string
        signedDocument:
          readOnly: true
          type:
            - string
            - 'null'
          format: uuid
          example: ad8c7c0e-3b1a-4f5c-8b7a-5d5b6a4b2f1e
        link:
          readOnly: true
          description: Link to the offer for the recipient
          example: https://example.com/o/1/recipient-1
          type: string
    ContactPerson-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        avatar:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        linkedin:
          type:
            - string
            - 'null'
        position:
          type:
            - string
            - 'null'
        website:
          type:
            - string
            - 'null'
    BillingGroup-OfferRead:
      type: object
      description: ''
      deprecated: false
    TermPeriod-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          readOnly: true
          type: string
        contractPeriodCount:
          readOnly: true
          type: integer
        contractPeriod:
          $ref: '#/components/schemas/Interval-OfferRead'
          example: 1M
          description: |

            The billing interval describes when the item is billed.
            If the value is null, the item is billed only once (one-time).
            If the value is not null, the item is billed periodically.
            The value is a string in the following format: [number][unit]
            The unit can be one of the following: H, D, W, M, Y
          nullable: false
          readOnly: true
        cancellationPeriod:
          $ref: '#/components/schemas/Interval-OfferRead'
          example: 1M
          description: |

            The billing interval describes when the item is billed.
            If the value is null, the item is billed only once (one-time).
            If the value is not null, the item is billed periodically.
            The value is a string in the following format: [number][unit]
            The unit can be one of the following: H, D, W, M, Y
          nullable: false
          readOnly: true
    ContractDetails-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        contractStart:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          description: The start of the contract.
          type: string
        contractEnd:
          format: date-time
          example: '2021-01-01T00:00:00+00:00'
          description: The end of the contract.
          type:
            - string
            - 'null'
    SubscriptionStatistics-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        unpaidGrossAmount:
          type: object
          required:
            - inputValue
            - currency
          nullable: false
          properties:
            amount:
              type: number
              example: 1000
              description: >-
                The amount as big integer, e.g. 1000 = 10.00 (precision = 2),
                10000 = 10.000 (precision = 3)
              readOnly: true
            precision:
              type: integer
              example: 2
              description: >-
                The precision of the amount, which is the number of digits after
                the decimal separator, e.g. 2 = 10.00, 3 = 10.000
              readOnly: true
            currency:
              type: string
              example: EUR
              description: The currency code, e.g. EUR, USD, CHF
            i18n:
              type: string
              example: 10,00 €
              description: The formatted amount, e.g. 10.00 €, 10.00 $, 10.00 CHF
              readOnly: true
            inputValue:
              type: string
              example: '10.00'
              description: Amount which can be used as input value, e.g. 10.00, 10.000.
          readOnly: true
          example:
            amount: 1000
            precision: 2
            currency: EUR
            i18n: 10,00 €
            inputValue: '10.00'
        totalContractValue:
          type: object
          required:
            - inputValue
            - currency
          nullable: false
          properties:
            amount:
              type: number
              example: 1000
              description: >-
                The amount as big integer, e.g. 1000 = 10.00 (precision = 2),
                10000 = 10.000 (precision = 3)
              readOnly: true
            precision:
              type: integer
              example: 2
              description: >-
                The precision of the amount, which is the number of digits after
                the decimal separator, e.g. 2 = 10.00, 3 = 10.000
              readOnly: true
            currency:
              type: string
              example: EUR
              description: The currency code, e.g. EUR, USD, CHF
            i18n:
              type: string
              example: 10,00 €
              description: The formatted amount, e.g. 10.00 €, 10.00 $, 10.00 CHF
              readOnly: true
            inputValue:
              type: string
              example: '10.00'
              description: Amount which can be used as input value, e.g. 10.00, 10.000.
          readOnly: true
          example:
            amount: 1000
            precision: 2
            currency: EUR
            i18n: 10,00 €
            inputValue: '10.00'
    PartnerResource-OfferRead:
      type: object
      description: ''
      deprecated: false
      properties:
        id:
          description: The ID of the partner
          example: ad8f7e7d-3b3b-4b3b-8b3b-3b3b3b3b3b3b
          type: string
        name:
          description: The name of the partner
          example: John Doe
          type: string
        number:
          description: The customer number of the partner
          example: '123456'
          type: string
        email:
          description: The email address of the partner
          example: partner@example.com
          type:
            - string
            - 'null'
    Interval-OfferRead:
      type: object
      description: ''
      deprecated: false
  securitySchemes:
    ApiToken:
      type: http
      scheme: bearer
      description: >-
        API-Token der Organisation. Sende es als Authorization: Bearer api_...
        Das Token ist fest an genau eine Organisation gebunden.

````