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

# Cancel a pending request

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

Withdraws the pending approval request (requester or a holder of the offer-write permission). The version is superseded and the offer stays open for a re-publish.



## OpenAPI

````yaml assets/openapi-v2-offers.json post /api/offers/{id}/approval/cancel
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:
  /api/offers/{id}/approval/cancel:
    post:
      tags:
        - Offer approval
      summary: Cancel a pending request
      description: >-
        **Beta. This endpoint is unstable and may still change without notice.**
        Pin against the dated version and watch the changelog.


        Withdraws the pending approval request (requester or a holder of the
        offer-write permission). The version is superseded and the offer stays
        open for a re-publish.
      operationId: cancelOfferApproval
      parameters:
        - name: id
          in: path
          required: true
          description: Offer ID (ULID).
          schema:
            type: string
            format: ulid
      responses:
        '200':
          description: The updated approval sub-resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfferApprovalView'
        '403':
          description: >-
            Not the requester / no write permission, access denied or feature
            not available.
        '404':
          description: Offer not found, other organisation, or no pending request.
      security:
        - ApiToken: []
components:
  schemas:
    OfferApprovalView:
      type: object
      description: >-
        Internal approval state of an offer. Returned only to authenticated
        staff, never to the recipient.
      properties:
        versionApprovalStatus:
          type: string
          enum:
            - not_required
            - pending
            - approved
            - rejected
            - superseded
        requiresApproval:
          type: boolean
          description: Whether an approval workflow applies.
        request:
          allOf:
            - $ref: '#/components/schemas/ApprovalRequestView'
          description: The running approval request. Null when none is pending.
        canCurrentUserDecide:
          type: boolean
          description: Whether the caller is a named approver who may decide now.
      required:
        - versionApprovalStatus
        - requiresApproval
        - canCurrentUserDecide
    ApprovalRequestView:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum:
            - pending
            - approved
            - rejected
            - superseded
        requestedBy:
          $ref: '#/components/schemas/ApprovalRequesterView'
        requestedAt:
          type: string
          format: date-time
        step:
          $ref: '#/components/schemas/ApprovalStepView'
        decisions:
          type: array
          items:
            $ref: '#/components/schemas/ApprovalDecisionView'
      required:
        - id
        - status
        - step
        - decisions
    ApprovalRequesterView:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
    ApprovalStepView:
      type: object
      properties:
        order:
          type: integer
        name:
          type: string
        requirement:
          type: string
          enum:
            - any
            - all
          description: Whether any one or all named approvers must approve.
        approvers:
          type: array
          items:
            $ref: '#/components/schemas/ApprovalApproverView'
      required:
        - order
        - requirement
        - approvers
    ApprovalDecisionView:
      type: object
      properties:
        account:
          type: string
        decision:
          type: string
          enum:
            - approve
            - reject
        comment:
          type:
            - string
            - 'null'
        decidedAt:
          type: string
          format: date-time
      required:
        - account
        - decision
        - decidedAt
    ApprovalApproverView:
      type: object
      properties:
        type:
          type: string
          enum:
            - role
            - user
        id:
          type: string
        label:
          type: string
      required:
        - type
        - id
        - label
  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.

````