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

# Create a house account transaction

> Records a charge or payment against a house account and moves its balance by the amount. Supply an idempotency key so a retry returns the transaction already recorded rather than moving the balance twice.



## OpenAPI

````yaml /api/openapi.json post /v1/house-accounts/{id}/transactions
openapi: 3.0.0
info:
  title: Vori API
  description: ''
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.vori.com
    description: production
security: []
tags: []
paths:
  /v1/house-accounts/{id}/transactions:
    post:
      tags:
        - House Accounts
      summary: Create a house account transaction
      description: >-
        Records a charge or payment against a house account and moves its
        balance by the amount. Supply an idempotency key so a retry returns the
        transaction already recorded rather than moving the balance twice.
      operationId: createHouseAccountTransaction
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateHouseAccountTransactionRequest'
      responses:
        '201':
          description: House account transaction created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HouseAccountTransaction'
        '400':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/DuplicateIdempotencyKeyError'
                  - $ref: '#/components/schemas/HouseAccountDeactivatedError'
                  - $ref: '#/components/schemas/InvalidEmployeeError'
                  - $ref: '#/components/schemas/InvalidStoreError'
                  - $ref: '#/components/schemas/InvalidUserError'
                  - $ref: '#/components/schemas/MissingEmployeeError'
                  - $ref: '#/components/schemas/MissingOrderError'
                  - $ref: '#/components/schemas/MissingStoreError'
                  - $ref: '#/components/schemas/UnexpectedEmployeeError'
                  - $ref: '#/components/schemas/UnexpectedOrderError'
                  - $ref: '#/components/schemas/UnexpectedTransactionTypeError'
        '403':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/InsufficientPermissionsError'
                  - $ref: '#/components/schemas/NoBannerAssociationError'
        '404':
          description: House account not found.
      security:
        - bearer: []
components:
  schemas:
    CreateHouseAccountTransactionRequest:
      type: object
      properties:
        amount:
          type: string
          description: >-
            Money the transaction moved. A negative amount is a charge, which
            grows what the customer owes; a positive amount is a payment or
            refund, which reduces it.
          format: monetary
          example: '199.99'
          pattern: ^-?[0-9]+(\.[0-9]+)?$
        description:
          type: string
          description: >-
            Note to write alongside the transaction, such as why the adjustment
            was made.
        employee_id:
          type: string
          description: >-
            ID of the employee who took the transaction. Only a register sends
            one, and it is required there; a back-office session records the
            signed-in user and an API key records itself.
          pattern: ^[0-9]+$
        idempotency_key:
          type: string
          description: >-
            Key supplied when the transaction was created, unique within the
            banner. Sending the same key again returns the transaction already
            recorded rather than charging the account twice.
        metadata:
          type: object
          maxProperties: 50
          additionalProperties:
            type: string
            maxLength: 500
          example:
            order_source: shopify
            fulfillment_id: '88213'
          nullable: true
          description: >-
            Your own key/value pairs, stored with the transaction and returned
            unchanged. Vori never interprets them. Up to 50 keys; key names up
            to 40 characters of letters, numbers, underscores, and hyphens;
            values up to 500 characters. Keys beginning with "vori" are
            reserved. Do not put personal or sensitive information here — these
            values flow into reporting and data exports.
        order_id:
          type: string
          description: >-
            ID of the checkout this settles, from the transactions resource.
            Required on an `order_payment` and rejected on a
            `manual_adjustment`.
          format: uuid
        store_id:
          type: string
          description: >-
            ID of the store the transaction belongs to. Required, except from a
            register, which posts against the store it is installed in.
          pattern: ^[0-9]+$
        type:
          description: >-
            What produced the transaction: a sale or refund rung up at a
            register, or an adjustment made in the back office.
          allOf:
            - $ref: '#/components/schemas/HouseAccountTransactionType'
      description: >-
        Records a charge or payment against a house account, either a sale
        tendered to the account or an adjustment such as a customer settling
        what they owe.
      required:
        - amount
        - idempotency_key
        - type
    HouseAccountTransaction:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the record.
        amount:
          type: string
          description: >-
            Money the transaction moved. A negative amount is a charge, which
            grows what the customer owes; a positive amount is a payment or
            refund, which reduces it.
          format: monetary
          example: '199.99'
          pattern: ^-?[0-9]+(\.[0-9]+)?$
        api_client_id:
          type: string
          nullable: true
          description: >-
            ID of the API credential that recorded the transaction. Null when a
            person did.
        created_at:
          type: string
          description: When the record was created.
          format: date-time
        description:
          type: string
          nullable: true
          description: >-
            Note written alongside the transaction, such as why an adjustment
            was made.
        effective_at:
          type: string
          description: >-
            When the transaction took effect. A sale carries the time it was
            completed at the register, which can be earlier than when it reached
            the ledger.
          format: date-time
        employee_id:
          type: string
          nullable: true
          description: >-
            ID of the employee who took the transaction at a register, or null
            when it was made in the back office.
          pattern: ^[0-9]+$
        ending_balance:
          type: string
          description: >-
            The account balance after this transaction. A negative balance is
            what the customer owes the store. A positive balance is credit the
            customer can spend.
          format: monetary
          example: '199.99'
          pattern: ^-?[0-9]+(\.[0-9]+)?$
        idempotency_key:
          type: string
          description: >-
            Key supplied when the transaction was created, unique within the
            banner. Sending the same key again returns the transaction already
            recorded rather than charging the account twice.
        metadata:
          type: object
          maxProperties: 50
          additionalProperties:
            type: string
            maxLength: 500
          example:
            order_source: shopify
            fulfillment_id: '88213'
          nullable: true
          description: >-
            Your own key/value pairs, exactly as supplied when the transaction
            was recorded.
        order_id:
          type: string
          nullable: true
          description: >-
            ID of the checkout this settled, from the transactions resource.
            Null when the ledger entry is not tied to a checkout.
          format: uuid
        store_id:
          type: string
          description: ID of the store where the transaction took place.
          pattern: ^[0-9]+$
        type:
          description: >-
            What produced the transaction: a sale or refund rung up at a
            register, or an adjustment made in the back office.
          allOf:
            - $ref: '#/components/schemas/HouseAccountTransactionType'
        updated_at:
          type: string
          description: When the record was last changed.
          format: date-time
        user_id:
          type: string
          nullable: true
          description: >-
            ID of the back-office user who made the adjustment. Null for a
            transaction taken at a register.
          pattern: ^[0-9]+$
      description: >-
        One charge or payment on a house account. The ledger is append-only, so
        a transaction is never edited or removed once recorded; a correction is
        another transaction.
      required:
        - id
        - amount
        - api_client_id
        - created_at
        - description
        - effective_at
        - employee_id
        - ending_balance
        - idempotency_key
        - metadata
        - order_id
        - store_id
        - type
        - updated_at
        - user_id
    DuplicateIdempotencyKeyError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - duplicate_idempotency_key
      required:
        - error_code
    HouseAccountDeactivatedError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - house_account_deactivated
      required:
        - error_code
    InvalidEmployeeError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_employee
      required:
        - error_code
    InvalidStoreError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_store
      required:
        - error_code
    InvalidUserError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_user
      required:
        - error_code
    MissingEmployeeError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - missing_employee
      required:
        - error_code
    MissingOrderError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - missing_order
      required:
        - error_code
    MissingStoreError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - missing_store
      required:
        - error_code
    UnexpectedEmployeeError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - unexpected_employee
      required:
        - error_code
    UnexpectedOrderError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - unexpected_order
      required:
        - error_code
    UnexpectedTransactionTypeError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - unexpected_transaction_type
      required:
        - error_code
    InsufficientPermissionsError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - insufficient_permissions
        error_details:
          $ref: '#/components/schemas/InsufficientPermissionsErrorDetails'
      required:
        - error_code
        - error_details
    NoBannerAssociationError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - no_banner_association
      required:
        - error_code
    HouseAccountTransactionType:
      type: string
      enum:
        - manual_adjustment
        - order_payment
    InsufficientPermissionsErrorDetails:
      type: object
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/Action'
        resource:
          allOf:
            - $ref: '#/components/schemas/Resource'
      required:
        - action
        - resource
    Action:
      type: string
      enum:
        - '*'
        - cancel
        - check_in
        - create
        - delete
        - read
        - read_credentials
        - record_events
        - refund
        - restart
        - update
        - void
    Resource:
      type: string
      enum:
        - '*'
        - accounting_integration
        - agent_chats
        - api_clients
        - asynchronous_tasks
        - banners
        - blackhawk_transactions
        - capabilities
        - coupons
        - custom_quick_actions
        - datacap_transactions
        - departments
        - discounts
        - ditto_auth_tokens
        - edge_agents
        - electronic_shelf_labels
        - employees
        - feature_orientations
        - files
        - food_modifiers
        - gift_cards
        - gl_code_mappings
        - house_accounts
        - inventory
        - inventory_sessions
        - inventory_settings
        - invoices
        - item_modifiers
        - label_dimension_sets
        - label_sheet_profiles
        - label_stock_products
        - lanes
        - loyalty_bonuses
        - loyalty_campaigns
        - loyalty_rewards
        - notification_templates
        - offers
        - order_guides
        - pos_banner_configurations
        - pos_orders
        - pos_tills
        - price_tags
        - product_ranges
        - products
        - promotions
        - purchase_orders
        - receiving
        - reporting
        - revision_sessions
        - revisions
        - roles
        - shopper_tags
        - shoppers
        - store_product_inventory_counts
        - store_product_lots
        - store_product_rules
        - store_product_tag_templates
        - store_snap_incentive_program_coupons
        - store_vendor_merge_requests
        - store_vendor_product_merge_requests
        - store_vendor_products
        - store_vendors
        - stores
        - tag_printings
        - tag_template_presets
        - tag_templates
        - tax_rates
        - users
        - variable_weights
        - vendor_merge_requests
        - vendor_product_merge_requests
        - vendors
        - wallet_payments
        - wic_products
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````

## Related topics

- [Create and Manage House Accounts](/point-of-sale-pos/house-accounts-charge-accounts/create-and-manage-house-accounts.md)
- [Create a house account](/api-reference/house-accounts/create-a-house-account.md)
- [List house account transactions](/api-reference/house-accounts/list-house-account-transactions.md)
