Delegated billing: child invoice remains open after parent payment – supported reconciliation approach?

5 views
Skip to first unread message

Harish K

unread,
Dec 21, 2025, 7:28:07 PM (yesterday) Dec 21
to killbill...@googlegroups.com, karan bansal

Hi ,

We are running into a delegated billing issue and would appreciate guidance on the supported approach.

Setup

  • Parent–child account hierarchy

  • Child subscription renewal generates a child invoice (₹1,899)

  • Parent receives a summary invoice and pays successfully (externalPayment=true)

  • Payment shows SUCCESS for the parent invoice

Problem

After the parent payment succeeds:

  • The child invoice remains OPEN with a balance

  • The child account balance is non-zero

  • Kill Bill repeatedly attempts to pay the child invoice, resulting in ABORTED payments

  • Credits (CBA / CREDIT_ADJ) do not close the child invoice

From what we understand, this is expected because:

  • Parent payments do not automatically reconcile child invoices

  • Invoices are closed only by payments or ITEM_ADJ linked to invoice items

Constraints

  • Our current Java client version does not expose ITEM_ADJ APIs

  • CREDIT_ADJ / account credits do not settle invoices

  • We want to avoid directly charging the child (delegation rules)

Question

What is the recommended / supported way to close a child invoice in delegated billing when:

  • The parent has already paid successfully

  • No additional money should be charged

  • The child invoice must transition to PAID

Specifically:

  • Is issuing a $0 external payment on the child invoice the correct approach?

  • Or is there a preferred REST API for creating ITEM_ADJ that we should be using instead?

Any guidance on the correct pattern would be very helpful.

*********** 210. row ***************************
               record_id: 210
                      id: 195520e3-5cbd-4ee5-b1ea-76ca54f5a793
              account_id: 73470a6b-d170-42ab-b272-90a85153e258
       payment_method_id: NULL
    payment_external_key: 3ab8faed-94dc-4932-ba2c-8e50bb4821a8
          transaction_id: NULL
transaction_external_key: cbc61144-2db5-43c3-b947-937a3ae78296
        transaction_type: PURCHASE
              state_name: ABORTED
                  amount: NULL
                currency: INR
             plugin_name: __INVOICE_PAYMENT_CONTROL_PLUGIN__
       plugin_properties: ZV  <[{"IPCD_INVOICE_ID":"c27397c3-2dae-4f15-8bc6-64a199c58759"}]
              created_by: PaymentRequestProcessor
            created_date: 2025-12-20 21:53:31
              updated_by: PaymentRequestProcessor
            updated_date: 2025-12-20 21:53:31
       account_record_id: 112
        tenant_record_id: 1
*************************** 211. row ***************************
               record_id: 211
                      id: 202b9074-51d2-4e66-91b0-2c088fc139b4
              account_id: dcd871e9-be19-465c-bba0-492f3c90f4c5
       payment_method_id: 829f18bd-19cd-4802-8549-3402015dd6b1
    payment_external_key: 697af8b0-6341-43cd-a9b5-1698d52d6005
          transaction_id: 68889f5a-60e1-4bec-bbce-e7ab7b412da5
transaction_external_key: 68889f5a-60e1-4bec-bbce-e7ab7b412da5
        transaction_type: PURCHASE
              state_name: SUCCESS
                  amount: 3898.000000000
                currency: INR
             plugin_name: __INVOICE_PAYMENT_CONTROL_PLUGIN__
       plugin_properties: ZV  <[{"IPCD_INVOICE_ID":"51a4db5f-79c1-4dd0-8f5d-d99f41fb8488"}]
              created_by: PaymentRequestProcessor
            created_date: 2025-12-20 21:53:32
              updated_by: PaymentRequestProcessor
            updated_date: 2025-12-20 21:53:32
       account_record_id: 111
        tenant_record_id: 1
211 rows in set (0.884 sec)

Thanks in advance,
Harish

Reply all
Reply to author
Forward
0 new messages