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

# Add Voucher History

> Admin: record a redemption by hand (amount > 0, order of this store).

VEN-19: a negative amount raised the balance and the order was not
checked. The voucher row is locked, like at checkout, so a manual entry
and a checkout cannot spend the same balance twice.

ORD-6: the ORDER is locked first (FOR UPDATE), then the voucher, as in the
lock sequence of every path (§10.6: order → coupon / voucher → variants):
an entry written while the order goes to the trash waits for the trash and
then finds it in the trash (404), or the trash waits for the entry and
gives the amount back. Read without the lock, the entry could land on an
order the trash had just hidden.



## OpenAPI

````yaml https://api.vellaro.io/openapi/admin.json post /api/v1/admin/vouchers/{id}/history
openapi: 3.1.0
info:
  title: Vellaro Admin API
  description: >-
    Store management under `/api/v1/admin`, for back ends and integrations.
    Every call takes `Authorization: Bearer <token>`: an admin API token or a
    staff user's token. The permissions of its role decide what it can do,
    always in its own store.
  version: 0.1.0
servers:
  - url: https://api.vellaro.io
    description: Produzione
security: []
tags:
  - name: Orders
    description: >-
      Orders and manual orders, payments, refunds, shipments, invoices, returns,
      customer subscriptions.
  - name: Products
    description: Products, variants, images, prices and discounts, product lookups.
  - name: Categories & catalog setup
    description: >-
      Categories, brands, attributes, options, filters, downloadable files,
      recurring profiles.
  - name: Inventory
    description: Stock of the variants and stock statuses.
  - name: Customers
    description: Customers, customer groups, custom fields.
  - name: Reviews & questions
    description: Moderation of product reviews and questions.
  - name: Promotions & coupons
    description: Coupons and gift vouchers.
  - name: Marketing
    description: Campaigns, newsletter subscribers, affiliates and their commissions.
  - name: Content
    description: >-
      CMS pages, menus, banners, information pages, flipbooks, media library,
      SEO URLs, email templates, translations.
  - name: Settings
    description: >-
      Store settings, email delivery, languages, currencies, physical stores,
      social login providers.
  - name: Shipping
    description: Couriers, shipping rates, weight and length classes.
  - name: Taxes & geo
    description: Tax classes, rates and rules; countries, zones and geo zones.
  - name: Integrations & modules
    description: >-
      Integrations, plugins and modules (Iute, extra warranty, Nextera, Financa
      5, WhatsApp, Firebase), outbound webhooks.
  - name: AI
    description: AI content generation and the settings of the AI shopping assistant.
  - name: Imports
    description: 'CSV imports and the universal import: runs, mappings, previews, undo.'
  - name: Reports & dashboard
    description: Dashboard figures and reports.
  - name: Users & API keys
    description: Staff users and roles, publishable keys, admin API tokens.
  - name: Audit
    description: The store's audit log.
paths:
  /api/v1/admin/vouchers/{id}/history:
    post:
      tags:
        - Promotions & coupons
      summary: Add Voucher History
      description: >-
        Admin: record a redemption by hand (amount > 0, order of this store).


        VEN-19: a negative amount raised the balance and the order was not

        checked. The voucher row is locked, like at checkout, so a manual entry

        and a checkout cannot spend the same balance twice.


        ORD-6: the ORDER is locked first (FOR UPDATE), then the voucher, as in
        the

        lock sequence of every path (§10.6: order → coupon / voucher →
        variants):

        an entry written while the order goes to the trash waits for the trash
        and

        then finds it in the trash (404), or the trash waits for the entry and

        gives the amount back. Read without the lock, the entry could land on an

        order the trash had just hidden.
      operationId: add_voucher_history_api_v1_admin_vouchers__id__history_post
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoucherHistoryCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse_VoucherHistoryOut_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    VoucherHistoryCreate:
      properties:
        order_id:
          type: string
          format: uuid
          title: Order Id
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: >-
                ^(?!^[-+.]*$)[+-]?0*(?:\d{0,8}|(?=[\d.]{1,11}0*$)\d{0,8}\.\d{0,2}0*$)
          title: Amount
      type: object
      required:
        - order_id
        - amount
      title: VoucherHistoryCreate
    ApiResponse_VoucherHistoryOut_:
      properties:
        data:
          anyOf:
            - $ref: '#/components/schemas/VoucherHistoryOut'
            - type: 'null'
        meta:
          anyOf:
            - $ref: '#/components/schemas/PaginationMeta'
            - type: 'null'
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        error_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Error Code
      type: object
      title: ApiResponse[VoucherHistoryOut]
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    VoucherHistoryOut:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        voucher_id:
          type: string
          format: uuid
          title: Voucher Id
        order_id:
          type: string
          format: uuid
          title: Order Id
        amount:
          type: number
          title: Amount
        created_at:
          type: string
          format: date-time
          title: Created At
        order_customer_email:
          anyOf:
            - type: string
            - type: 'null'
          title: Order Customer Email
        order_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Order Status
        order_payment_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Order Payment Status
      type: object
      required:
        - id
        - voucher_id
        - order_id
        - amount
        - created_at
      title: VoucherHistoryOut
    PaginationMeta:
      properties:
        page:
          type: integer
          title: Page
        page_size:
          type: integer
          title: Page Size
        total:
          type: integer
          title: Total
        total_pages:
          type: integer
          title: Total Pages
      type: object
      required:
        - page
        - page_size
        - total
        - total_pages
      title: PaginationMeta
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.