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

# Create manual Customer Offer

> Create a Customer Offer from the ground up by providing product/service lines



## OpenAPI

````yaml /openapi.yaml post /customer-offers/manual
openapi: 3.1.1
info:
  title: MijnKlantportaal API
  version: v1
servers:
  - url: https://api.mijnklantportaal.nl/v1
security:
  - APIKey: []
tags:
  - name: Agreements API
  - name: Appointments API
  - name: Customers API
  - name: Customer Groups API
  - name: Customer Invoices API
  - name: Customer Offers API
  - name: Customer Subscriptions API
  - name: Customer Subscription Packages API
  - name: Files API
  - name: File Request API
  - name: File Share API
  - name: Invoices API
  - name: Payment Links API
  - name: Punch Cards API
  - name: Tickets API
  - name: Webhooks API
paths:
  /customer-offers/manual:
    post:
      tags:
        - Customer Offers API
      summary: Create manual Customer Offer
      description: >-
        Create a Customer Offer from the ground up by providing product/service
        lines
      operationId: create-customer-offer-manual
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - customerId
                - offerNumber
                - issuedAt
                - expiresAt
                - lines
              properties:
                customerId:
                  type: string
                  example: cst_abc12345def678
                  description: ID of the customer this offer is meant for
                offerNumber:
                  type: string
                  example: 2014-001
                  description: Number of the offer, as `string`
                issuedAt:
                  type: string
                  example: '2025-04-14'
                  description: Date when the offer is issued, in `YYYY-mm-dd` format
                expiresAt:
                  type: string
                  example: '2025-04-31'
                  description: Date when the offer expires, in `YYYY-mm-dd` format
                sendNotification:
                  type: boolean
                  example: true
                  description: >-
                    Indicates if MijnKlantportaal should send out the
                    notification to inform the customer about the new offer
                lines:
                  type: array
                  description: Line in this offer
                  items:
                    type: object
                    required:
                      - description
                      - amountExclVat
                      - vatRate
                    properties:
                      description:
                        type: string
                        example: Website template
                        description: Description of the offer line
                      amountExclVat:
                        type: string
                        example: '12.95'
                        description: >-
                          Amount of the line without VAT, as `string`. Only Euro
                          (EUR) is supported at the moment.
                      vatRate:
                        type: integer
                        example: 21
                        description: >-
                          Percentage of the VAT that should be applied. Can be
                          `0`, `9` or `21`.
      responses:
        '201':
          description: Getting the created Customer Offer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerOffer'
        '422':
          description: Something is wrong with the posted data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_ApiError'
        '426':
          description: The amount of offers this month reached the license's limit
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_ApiError'
components:
  schemas:
    CustomerOffer:
      type: object
      description: Customer Offer
      properties:
        id:
          type: string
          example: off_abc12345def678
          description: ID of the offer, always starting with `off_`.
        customerId:
          type: string
          example: cst_abc12345def678
          description: ID of the customer which the offer belongs to.
        offerNumber:
          type: string
          example: 2024-001
          description: Number of the offer as `string`.
        issuedAt:
          type: string
          example: '2024-04-29'
          description: Issue date of the offer. Formatted as `YYYY-mm-dd`.
        expiresAt:
          type: string
          example: '2024-05-29'
          description: Date on which the the offer expires. Formatted as `YYYY-mm-dd`.
        currency:
          type: string
          example: EUR
          description: Currency of the offer amount.
        amount:
          type: string
          example: '12.95'
          description: Invoice offer as `string`.
        acceptedAt:
          type: string
          nullable: true
          example: '2024-05-14T21:00:00+02:00'
          description: >-
            Date and time the offer is marked as accepted. Written in ATOM
            format.
        acceptedViaIp:
          type: string
          nullable: true
          example: 123.456.7.8.9
          description: IP address from which the offer was accepted.
        acceptedViaUserAgent:
          type: string
          nullable: true
          example: >-
            Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
            Gecko) Chrome/51.0.2704.103 Safari/537.36
          description: User-Agent which is used to accept the offer.
        acceptanceSignature:
          type: string
          nullable: true
          example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAA...
          description: '`base64` data string of the signature as `PNG`.'
        rejectedAt:
          type: string
          nullable: true
          example: '2024-05-14T21:00:00+02:00'
          description: >-
            Date and time the offer is marked as rejected. Written in ATOM
            format.
        createdAt:
          type: string
          example: '2024-04-29T21:00:00+02:00'
          description: >-
            Date and time when the offer was added to MijnKlantportaal. Written
            in ATOM format.
        links:
          type: object
          properties:
            customer:
              type: object
              properties:
                href:
                  type: string
                  description: Endpoint to the Get Customer API
                  example: >-
                    https://api.mijnklantportaal.nl/v1/customers/cst_abc12345def678
                type:
                  type: string
                  description: Type of the content the endpoint will return
    Error_ApiError:
      type: object
      properties:
        message:
          type: string
          description: Explanation what went wrong
  securitySchemes:
    APIKey:
      type: http
      scheme: bearer

````