---
title: "Create accounting rule"
method: POST
path: "/v1/accounting/rules"
tags: ["Accounting"]
---

# Create accounting rule

`POST /v1/accounting/rules`

Create a new accounting rule for account code routing or journal posting.

## Request body

- CreateAccountingRuleCommand
  - `ledger_id` string — Identifier of the ledger this rule belongs to.
  - `name` string, nullable — Optional user-defined name for the rule.
  - `category` 'invoice_posted' | 'invoice_settled' | 'revenue_recognition' | 'credit_note_created' | 'accounting_software', nullable, required — Rule category (e.g. accounting_software, invoice_posted).
  - `priority` number, required — Override order. Higher priority wins when multiple rules match.
  - `product_ids` string[] — Product IDs to match. Empty means match all.
  - `product_types` string[] — Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.
  - `customer_ids` string[] — Customer IDs for customer-specific overrides.
  - `currencies` string[] — Currency codes to match (e.g. EUR, USD).
  - `countries` string[] — Country codes for jurisdiction-based overrides.
  - `coupon_ids` string[] — Coupon IDs to match. Empty means match all.
  - `client_provider_ids` string[] — Client provider IDs to match. Empty means match all.
  - `payment_method_types` string[] — Payment method types to match. Empty means match all.
  - `interval_period` string, nullable — Billing interval period filter (month, year, etc.).
  - `interval_count` number, nullable — Billing interval count filter.
  - `revenue_ledger_account_id` string, nullable — Revenue ledger account ID used for invoice line revenue routing.
  - `deferred_revenue_ledger_account_id` string, nullable — Deferred revenue ledger account ID used before revenue is recognized.
  - `deferred_discount_ledger_account_id` string, nullable — Deferred discount ledger account ID used before discounts are recognized.
  - `contra_revenue_ledger_account_id` string, nullable — Contra revenue ledger account ID used for amounts that reduce revenue.
  - `discount_ledger_account_id` string, nullable — Discount ledger account ID used for recognized discounts.
  - `ar_ledger_account_id` string, nullable — Accounts receivable ledger account ID used for invoice posting.
  - `cash_ledger_account_id` string, nullable — Cash ledger account ID used for payment settlement.
  - `payments_clearing_ledger_account_id` string, nullable — Payments clearing ledger account ID used while payments settle.
  - `output_tax_ledger_account_id` string, nullable — Output tax ledger account ID used for tax liability.
  - `bad_debt_expense_ledger_account_id` string, nullable — Bad debt expense ledger account ID used for provider-side write-off routing.
  - `customer_credits_ledger_account_id` string, nullable — Customer credits ledger account ID used for credit balances.
  - `journal_id` string, nullable — Journal ID used to route entries in the accounting provider.
  - `entity_type` 'invoice' | 'payment', nullable — Entity type the rule applies to.

## Response `201`

- AccountingRule
  - `id` string, required — Unique identifier of the accounting rule.
  - `code` string, required — Auto-generated rule code (e.g. R-001).
  - `name` string, nullable, required — Optional user-defined name for the rule.
  - `ledger_id` string, required — Identifier of the ledger this rule belongs to.
  - `category` string, nullable, required — Rule category (e.g. accounting_software, invoice_posted).
  - `priority` number, required — Override order. Higher priority wins when multiple rules match.
  - `product_ids` string[], required — Product IDs to match. Empty means match all.
  - `product_types` string[], required — Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.
  - `customer_ids` string[], required — Customer IDs for customer-specific overrides.
  - `currencies` string[], required — Currency codes to match (e.g. EUR, USD).
  - `countries` string[], required — Country codes for jurisdiction-based overrides.
  - `coupon_ids` string[], required — Coupon IDs to match. Empty means match all.
  - `client_provider_ids` string[], required — Client provider IDs to match. Empty means match all.
  - `payment_method_types` string[], required — Payment method types to match. Empty means match all.
  - `interval_period` string, nullable, required — Billing interval period filter (month, year, etc.).
  - `interval_count` number, nullable, required — Billing interval count filter.
  - `revenue_ledger_account_id` string, nullable, required — Revenue ledger account ID used for invoice line revenue routing.
  - `revenue_ledger_account` object, nullable — Expanded revenue ledger account reference when available.
    - `id` string, required — Unique identifier of the ledger account.
    - `code` string, required — Accounting code of the ledger account.
    - `name` string, required — Display name of the ledger account.
    - `integration` object, nullable, required — External provider reference associated with the ledger account.
      - `entity_id` string, required — ID of the entity in the provider.
      - `provider_name` 'adyen' | 'stripe' | 'mollie' | 'gocardless' | 'airwallex' | 'salesforce' | 'hubspot' | 'attio' | 'xero' | 'pennylane' | 'zoho-books' | 'exact-online' | 'quickbooks' | 'netsuite' | 'anrok' | 'chargebee' | 'slack' | 'plain' | 'zendesk' | 'pylon' | 'intercom' | 'front' | 'claap' | 'grain', required — Provider name.
      - `provider_account_id` string, required — ID of the connected provider account.
  - `deferred_revenue_ledger_account_id` string, nullable, required — Deferred revenue ledger account ID used before revenue is recognized.
  - `deferred_discount_ledger_account_id` string, nullable, required — Deferred discount ledger account ID used before discounts are recognized.
  - `contra_revenue_ledger_account_id` string, nullable, required — Contra revenue ledger account ID used for amounts that reduce revenue.
  - `discount_ledger_account_id` string, nullable, required — Discount ledger account ID used for recognized discounts.
  - `ar_ledger_account_id` string, nullable, required — Accounts receivable ledger account ID used for invoice posting.
  - `cash_ledger_account_id` string, nullable, required — Cash ledger account ID used for payment settlement.
  - `payments_clearing_ledger_account_id` string, nullable, required — Payments clearing ledger account ID used while payments settle.
  - `output_tax_ledger_account_id` string, nullable, required — Output tax ledger account ID used for tax liability.
  - `bad_debt_expense_ledger_account_id` string, nullable, required — Bad debt expense ledger account ID used for provider-side write-off routing.
  - `customer_credits_ledger_account_id` string, nullable, required — Customer credits ledger account ID used for credit balances.
  - `journal_id` string, nullable, required — Journal ID used to route entries in the accounting provider.
  - `entity_type` string, nullable, required — Entity type the rule applies to.
  - `created_at` string, date, required — Timestamp when the rule was created.
  - `updated_at` string, date, required — Timestamp when the rule was last updated.

---

[API](https://skmtc.dev/hyperline/apis/hyperline-api.md) · [All operations](https://skmtc.dev/hyperline/apis/hyperline-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hyperline/hyperline-api/revisions/19fa5f22e39b/schema)
