Invoicing use cases

Last updated: Apr 6th, 9:48pm

Explore key ways to apply the PayPal Invoicing API in your billing and payment collection flows. See how different configuration options map to common business scenarios so you can choose the pattern that best fits your integration.

Select a use case that fits your integration:

For more information, see the API reference.


Prerequisites


Use cases

See how to create invoices that address common scenarios and requirements.

Create a draft invoice with minimum required fields

This is a good starting point for merchants new to the API or developers testing an integration before adding complexity.

  1. Call POST /v2/invoicing/invoices with minimal required fields.
  2. Save the id from the 201 Created response.
  3. Call POST /v2/invoicing/invoices/{id}/send to deliver the invoice to the recipient.
Field Description
detail.invoice_number Your reference number for the invoice.
detail.currency_code Currency applied to all monetary values.
detail.payment_term.term_type When payment is due, such as DUE_ON_RECEIPT.
invoicer Sender name and email.
primary_recipients Customer name and email.
items At least one line item with name, quantity, and unit amount.

Request

    1{
    2 "detail": {
    3 "invoice_number": "INV-001",
    4 "invoice_date": "2026-03-15",
    5 "currency_code": "USD",
    6 "payment_term": {
    7 "term_type": "DUE_ON_RECEIPT"
    8 }
    9 },
    10 "invoicer": {
    11 "name": {
    12 "given_name": "Alex",
    13 "surname": "Rivera"
    14 },
    15 "email_address": "alex@example.com",
    16 "business_name": "Rivera Consulting"
    17 },
    18 "primary_recipients": [
    19 {
    20 "billing_info": {
    21 "name": {
    22 "given_name": "Jamie",
    23 "surname": "Lee"
    24 },
    25 "email_address": "jamie.lee@example.com"
    26 }
    27 }
    28 ],
    29 "items": [
    30 {
    31 "name": "Consulting Services",
    32 "quantity": "1",
    33 "unit_amount": {
    34 "currency_code": "USD",
    35 "value": "500.00"
    36 },
    37 "unit_of_measure": "QUANTITY"
    38 }
    39 ]
    40}
    A successful call returns HTTP 201 Created. Save the returned id. You need it to send, update, or query the invoice.

    Create a payment request linked to an external invoice

    This pattern is ideal for merchants using a enterprise resource planning (ERP) or accounting platforms like NetSuite, QuickBooks, or Xero who want to collect payment through PayPal without recreating the invoice. Pass the external reference via invoice_number or detail.reference, and optionally attach the original invoice PDF.

    1. Create the invoice in your external system and capture the external invoice ID.
    2. Call POST /v2/invoicing/invoices to create a PayPal payment request, passing the external invoice ID and optionally attaching the original invoice PDF.
    3. Call POST /v2/invoicing/invoices/{id}/send to deliver the payment request to the customer.
    4. The customer receives a PayPal-hosted payment link by email and pays using PayPal or a card.
    Field Description
    items[].unit_of_measure: "AMOUNT" Flat-rate billing with no quantity or hourly breakdown.
    attachments Attach the original invoice PDF for the customer's reference.

    Request — External ID as invoice_number

      1{
      2 "detail": {
      3 "invoice_number": "NETSUITE-INV-78432",
      4 "invoice_date": "2026-03-15",
      5 "currency_code": "USD",
      6 "note": "Please use the link below to pay your outstanding invoice. The original invoice is attached for your reference.",
      7 "payment_term": {
      8 "term_type": "DUE_ON_RECEIPT"
      9 }
      10 },
      11 "invoicer": {
      12 "name": {
      13 "given_name": "Morgan",
      14 "surname": "Shaw"
      15 },
      16 "email_address": "billing@apexsupply.com",
      17 "business_name": "Apex Supply Co."
      18 },
      19 "primary_recipients": [
      20 {
      21 "billing_info": {
      22 "name": {
      23 "given_name": "Dana",
      24 "surname": "Patel"
      25 },
      26 "email_address": "dana.patel@clientcorp.com"
      27 }
      28 }
      29 ],
      30 "items": [
      31 {
      32 "name": "Invoice NETSUITE-INV-78432",
      33 "description": "Payment for goods and services per attached invoice.",
      34 "quantity": "1",
      35 "unit_amount": {
      36 "currency_code": "USD",
      37 "value": "3450.00"
      38 },
      39 "unit_of_measure": "AMOUNT"
      40 }
      41 ],
      42 "attachments": [
      43 {
      44 "name": "Invoice-NETSUITE-INV-78432.pdf",
      45 "url": "https://your-storage.example.com/invoices/NETSUITE-INV-78432.pdf"
      46 }
      47 ]
      48}

      Request — External ID as detail.reference

        1{
        2 "detail": {
        3 "invoice_number": "PAY-2026-00142",
        4 "reference": "NETSUITE-INV-78432",
        5 "invoice_date": "2026-03-15",
        6 "currency_code": "USD",
        7 "note": "Please use the link below to pay invoice NETSUITE-INV-78432. The original invoice is attached for your reference.",
        8 "payment_term": {
        9 "term_type": "DUE_ON_RECEIPT"
        10 }
        11 },
        12 "invoicer": {
        13 "name": {
        14 "given_name": "Morgan",
        15 "surname": "Shaw"
        16 },
        17 "email_address": "billing@apexsupply.com",
        18 "business_name": "Apex Supply Co."
        19 },
        20 "primary_recipients": [
        21 {
        22 "billing_info": {
        23 "name": {
        24 "given_name": "Dana",
        25 "surname": "Patel"
        26 },
        27 "email_address": "dana.patel@clientcorp.com"
        28 }
        29 }
        30 ],
        31 "items": [
        32 {
        33 "name": "Invoice NETSUITE-INV-78432",
        34 "description": "Payment for goods and services per attached invoice.",
        35 "quantity": "1",
        36 "unit_amount": {
        37 "currency_code": "USD",
        38 "value": "3450.00"
        39 },
        40 "unit_of_measure": "AMOUNT"
        41 }
        42 ],
        43 "attachments": [
        44 {
        45 "name": "Invoice-NETSUITE-INV-78432.pdf",
        46 "url": "https://your-storage.example.com/invoices/NETSUITE-INV-78432.pdf"
        47 }
        48 ]
        49}

        Notes

        • Use unit_of_measure: "AMOUNT" when billing a flat total with no quantity or hourly breakdown.
        • The attachments array accepts publicly accessible URLs. The PDF must be reachable by PayPal's servers at the time you create the invoice.
        • detail.reference is visible to the customer on the PayPal invoice page. This is useful for cross-referencing the external invoice number.
        • detail.memo is a private field visible only to the invoicer. Use this for internal bookkeeping notes.

        Create an hourly services invoice

        Create an hourly services invoice with unit_of_measure: "HOURS", a client billing address, tip enabled, and partial payment configured for deposit workflows. This pattern works best for consultants, freelancers, photographers, and tradespeople billing for time and labor.

        1. Confirm the scope, hours, and rate for completed service work.
        2. Call POST /v2/invoicing/invoices with hourly or amount-based line items and the client's billing address. Don't include shipping_info.
        3. Call POST /v2/invoicing/invoices/{id}/send to deliver the invoice to the client.
        4. The client receives the invoice and pays with PayPal or card.
        Field Description
        items[].unit_of_measure: "HOURS" Renders quantity as hours worked and unit_amount as the hourly rate.
        primary_recipients[].billing_info.address Client billing address; no shipping_info included.
        detail.payment_term.term_type When payment is due, such as NET_14 or NET_30.
        detail.note Project summary or message visible to the client.
        detail.term Formal payment terms and conditions.
        configuration.allow_tip: true Enables an optional tip or gratuity field on the PayPal-hosted payment page.
        configuration.partial_payment Supports deposit or installment payment workflows.

        Request

          1{
          2 "detail": {
          3 "invoice_number": "INV-2026-0089",
          4 "invoice_date": "2026-03-15",
          5 "currency_code": "USD",
          6 "note": "Thank you for working with us. Please don't hesitate to reach out with any questions.",
          7 "term": "Payment due within 14 days of invoice date. Late payments subject to a 1.5% monthly fee.",
          8 "payment_term": {
          9 "term_type": "NET_14"
          10 }
          11 },
          12 "invoicer": {
          13 "name": {
          14 "given_name": "Taylor",
          15 "surname": "Brooks"
          16 },
          17 "email_address": "taylor@brooksdesign.com",
          18 "business_name": "Brooks Design Studio",
          19 "phones": [
          20 {
          21 "country_code": "1",
          22 "national_number": "4155550192",
          23 "phone_type": "MOBILE"
          24 }
          25 ],
          26 "website": "https://brooksdesign.com"
          27 },
          28 "primary_recipients": [
          29 {
          30 "billing_info": {
          31 "name": {
          32 "given_name": "Jordan",
          33 "surname": "Kim"
          34 },
          35 "business_name": "Kim & Associates LLC",
          36 "email_address": "jordan@kimassociates.com",
          37 "address": {
          38 "address_line_1": "450 Market Street",
          39 "address_line_2": "Suite 800",
          40 "admin_area_2": "San Francisco",
          41 "admin_area_1": "CA",
          42 "postal_code": "94105",
          43 "country_code": "US"
          44 }
          45 }
          46 }
          47 ],
          48 "items": [
          49 {
          50 "name": "UX Design — Discovery & Research",
          51 "description": "User interviews, competitive analysis, journey mapping",
          52 "quantity": "12",
          53 "unit_amount": {
          54 "currency_code": "USD",
          55 "value": "150.00"
          56 },
          57 "unit_of_measure": "HOURS",
          58 "tax": {
          59 "name": "Sales Tax",
          60 "percent": "8.5"
          61 }
          62 },
          63 {
          64 "name": "UX Design — Wireframing & Prototyping",
          65 "description": "Low and high-fidelity wireframes, interactive prototype",
          66 "quantity": "18",
          67 "unit_amount": {
          68 "currency_code": "USD",
          69 "value": "150.00"
          70 },
          71 "unit_of_measure": "HOURS",
          72 "tax": {
          73 "name": "Sales Tax",
          74 "percent": "8.5"
          75 }
          76 }
          77 ],
          78 "configuration": {
          79 "allow_tip": true,
          80 "partial_payment": {
          81 "allow_partial_payment": true,
          82 "minimum_amount_due": {
          83 "currency_code": "USD",
          84 "value": "500.00"
          85 }
          86 },
          87 "tax_calculated_after_discount": true,
          88 "tax_inclusive": false
          89 }
          90}

          Notes

          • unit_of_measure: "HOURS" renders quantity as hours and unit_amount as the hourly rate on both the invoice and the customer-facing payment page.
          • Omitting shipping_info from primary_recipients indicates a non-shippable, services-based invoice. Only billing_info is required.
          • allow_tip: true renders an optional tip or gratuity field on the PayPal-hosted payment page — no additional API calls required. Use this for service businesses where tipping is customary, such as trades, personal care, event services, or photography. Set allow_tip: false for B2B or formal invoicing contexts.
          • allow_partial_payment: true with a minimum_amount_due supports deposit-first or installment workflows common in service businesses.
          • Use unit_of_measure: "AMOUNT" instead of "HOURS" if you're billing a flat project fee rather than hourly.
          • To record a payment received outside of PayPal, such as by check or bank transfer, use POST /v2/invoicing/invoices/{id}/payments.

          Create an invoice for shippable goods

          Create a physical goods invoice with quantity-based line items, separate billing and shipping addresses, a shipping charge, and shipping-specific tax. This pattern works best for e-commerce sellers, wholesalers, and distributors shipping physical products.

          1. Confirm the products, quantities, and shipping details from the order in your system.
          2. Call POST /v2/invoicing/invoices with quantity-based line items, a shipping address, and a shipping charge.
          3. Call POST /v2/invoicing/invoices/{id}/send to deliver the invoice.
          4. The buyer pays via PayPal or card; fulfill and ship the order.
          Field Description
          primary_recipients[].shipping_info Buyer's shipping address. This can differ from billing address.
          primary_recipients[].billing_info Buyer's billing address.
          items[].unit_of_measure: "QUANTITY" Unit-based billing for physical goods.
          amount.breakdown.shipping.amount Flat shipping charge.
          amount.breakdown.shipping.tax Tax applied specifically to the shipping charge.
          items[].tax Per-line sales tax on individual goods.
          detail.reference Purchase order or order reference number. This value is customer-visible.

          Request

            1{
            2 "detail": {
            3 "invoice_number": "INV-2026-ORD-4421",
            4 "reference": "PO-CLIENT-4421",
            5 "invoice_date": "2026-03-15",
            6 "currency_code": "USD",
            7 "note": "Thank you for your order! Your items will ship within 2 business days.",
            8 "term": "All goods remain the property of Apex Supply Co. until payment is received in full.",
            9 "payment_term": {
            10 "term_type": "DUE_ON_RECEIPT"
            11 }
            12 },
            13 "invoicer": {
            14 "name": {
            15 "given_name": "Casey",
            16 "surname": "Nguyen"
            17 },
            18 "email_address": "orders@apexsupply.com",
            19 "business_name": "Apex Supply Co.",
            20 "address": {
            21 "address_line_1": "800 Industrial Blvd",
            22 "admin_area_2": "Austin",
            23 "admin_area_1": "TX",
            24 "postal_code": "78701",
            25 "country_code": "US"
            26 }
            27 },
            28 "primary_recipients": [
            29 {
            30 "billing_info": {
            31 "name": {
            32 "given_name": "Sam",
            33 "surname": "Torres"
            34 },
            35 "business_name": "Torres Hardware Inc.",
            36 "email_address": "sam@torreshardware.com",
            37 "address": {
            38 "address_line_1": "220 Commerce Drive",
            39 "admin_area_2": "Chicago",
            40 "admin_area_1": "IL",
            41 "postal_code": "60601",
            42 "country_code": "US"
            43 }
            44 },
            45 "shipping_info": {
            46 "name": {
            47 "given_name": "Sam",
            48 "surname": "Torres"
            49 },
            50 "address": {
            51 "address_line_1": "500 Warehouse Road",
            52 "admin_area_2": "Chicago",
            53 "admin_area_1": "IL",
            54 "postal_code": "60607",
            55 "country_code": "US"
            56 }
            57 }
            58 }
            59 ],
            60 "items": [
            61 {
            62 "name": "Heavy-Duty Work Gloves",
            63 "description": "Model HG-200, Size L, Black",
            64 "quantity": "24",
            65 "unit_amount": {
            66 "currency_code": "USD",
            67 "value": "12.99"
            68 },
            69 "unit_of_measure": "QUANTITY",
            70 "tax": {
            71 "name": "Sales Tax",
            72 "percent": "8.25"
            73 }
            74 },
            75 {
            76 "name": "Safety Goggles",
            77 "description": "Model SG-500, Anti-fog, Clear lens",
            78 "quantity": "12",
            79 "unit_amount": {
            80 "currency_code": "USD",
            81 "value": "18.50"
            82 },
            83 "unit_of_measure": "QUANTITY",
            84 "tax": {
            85 "name": "Sales Tax",
            86 "percent": "8.25"
            87 }
            88 }
            89 ],
            90 "configuration": {
            91 "allow_tip": false,
            92 "partial_payment": {
            93 "allow_partial_payment": false
            94 },
            95 "tax_calculated_after_discount": false,
            96 "tax_inclusive": false
            97 },
            98 "amount": {
            99 "breakdown": {
            100 "shipping": {
            101 "amount": {
            102 "currency_code": "USD",
            103 "value": "18.00"
            104 },
            105 "tax": {
            106 "name": "Shipping Tax",
            107 "percent": "8.25"
            108 }
            109 }
            110 }
            111 }
            112}

            Notes

            • shipping_info and billing_info can have different addresses — PayPal renders both on the invoice and buyer confirmation page.
            • unit_of_measure: "QUANTITY" renders items as discrete units — the standard for physical goods.
            • Shipping tax is defined separately in amount.breakdown.shipping.tax and is independent from line item taxes.
            • detail.reference is customer-visible and useful for linking back to a purchase order or external order management reference.
            • To record a payment received outside of PayPal, such as by check or bank transfer, use POST /v2/invoicing/invoices/{id}/payments.

            Create an invoice for digital goods

            Create a digital goods invoice with unit and flat-rate line items and a billing address only — no shipping address or charges. This pattern works best for merchants selling software licenses, downloads, online courses, or other digital products.

            1. Capture the order details for the digital product purchase in your system.
            2. Call POST /v2/invoicing/invoices with digital line items and a billing address only. Don't include shipping_info.
            3. Call POST /v2/invoicing/invoices/{id}/send to deliver the invoice.
            4. The customer pays via PayPal or card; handle digital delivery separately.
            Field Description
            items[].unit_of_measure: "QUANTITY" Unit-based billing for seat or license-based products.
            items[].unit_of_measure: "AMOUNT" Flat-rate billing for bundles or one-time packages.
            primary_recipients[].billing_info Billing address only; no shipping_info included.
            items[].tax Applicable sales tax. Digital goods tax rules vary by jurisdiction.
            detail.note Delivery instructions or next-step guidance visible to the customer after payment.

            Request

              1{
              2 "detail": {
              3 "invoice_number": "INV-2026-DIG-0028",
              4 "invoice_date": "2026-03-15",
              5 "currency_code": "USD",
              6 "note": "Your license keys and download links will be emailed within 24 hours of payment.",
              7 "payment_term": {
              8 "term_type": "DUE_ON_RECEIPT"
              9 }
              10 },
              11 "invoicer": {
              12 "name": {
              13 "given_name": "Riley",
              14 "surname": "Chen"
              15 },
              16 "email_address": "sales@stacktools.io",
              17 "business_name": "StackTools Inc.",
              18 "website": "https://stacktools.io"
              19 },
              20 "primary_recipients": [
              21 {
              22 "billing_info": {
              23 "name": {
              24 "given_name": "Avery",
              25 "surname": "Johnson"
              26 },
              27 "business_name": "Johnson Media Group",
              28 "email_address": "avery@johnsonmedia.com",
              29 "address": {
              30 "address_line_1": "1200 5th Avenue",
              31 "admin_area_2": "New York",
              32 "admin_area_1": "NY",
              33 "postal_code": "10001",
              34 "country_code": "US"
              35 }
              36 }
              37 }
              38 ],
              39 "items": [
              40 {
              41 "name": "StackTools Pro — Annual License",
              42 "description": "Single-seat annual license. Includes all features and priority support.",
              43 "quantity": "3",
              44 "unit_amount": {
              45 "currency_code": "USD",
              46 "value": "299.00"
              47 },
              48 "unit_of_measure": "QUANTITY",
              49 "tax": {
              50 "name": "Sales Tax",
              51 "percent": "8.875"
              52 }
              53 },
              54 {
              55 "name": "Onboarding & Setup Package",
              56 "description": "One-time onboarding session and configuration assistance.",
              57 "quantity": "1",
              58 "unit_amount": {
              59 "currency_code": "USD",
              60 "value": "149.00"
              61 },
              62 "unit_of_measure": "AMOUNT"
              63 }
              64 ],
              65 "configuration": {
              66 "allow_tip": false,
              67 "partial_payment": {
              68 "allow_partial_payment": false
              69 },
              70 "tax_calculated_after_discount": true,
              71 "tax_inclusive": false
              72 }
              73}

              Notes

              • Omitting shipping_info from primary_recipients signals that no physical delivery is required.
              • Use unit_of_measure: "QUANTITY" for seat or unit-based products. Use "AMOUNT" for flat-rate bundles or packages where itemized quantity doesn't apply.
              • Digital goods tax rules vary significantly by jurisdiction — consult your tax advisor for the correct rate based on customer location.
              • Use detail.note to communicate delivery instructions or access information. This field is customer-visible on the PayPal invoice and payment confirmation page.

              Create a mixed billing invoice

              Create an invoice that combines all three unit_of_measure types — HOURS, QUANTITY, and AMOUNT — in a single request, with an invoice-level discount and partial payment configuration. This pattern works best for agencies, consultancies, and IT services firms billing for a mix of time, deliverables, and flat fees within the same engagement.

              1. Confirm time logs, deliverable counts, and agreed flat fees for the completed project work.
              2. Call POST /v2/invoicing/invoices with mixed line items combining HOURS, QUANTITY, and AMOUNT types.
              3. Review the draft, then call POST /v2/invoicing/invoices/{id}/send.
              4. The client receives the invoice, reviews the itemized breakdown, and pays via PayPal or card.
              Field Description
              items[].unit_of_measure: "HOURS" Billable time; quantity = hours worked, unit_amount = hourly rate.
              items[].unit_of_measure: "QUANTITY" Discrete units; quantity = number of items, unit_amount = unit price.
              items[].unit_of_measure: "AMOUNT" Flat-rate charge; quantity = "1", unit_amount = total flat fee.
              items[].discount Line item-level discount, such as percent or fixed amount.
              amount.breakdown.discount Invoice-level discount applied across all line items.
              configuration.partial_payment Supports structured deposit and balance workflows.
              detail.memo Private internal note, not visible to the client.

              Request

                1{
                2 "detail": {
                3 "invoice_number": "INV-2026-AGY-0047",
                4 "reference": "SOW-2026-003",
                5 "invoice_date": "2026-03-15",
                6 "currency_code": "USD",
                7 "note": "Thank you for partnering with us on this project. Please review the itemized breakdown below and don't hesitate to reach out with any questions.",
                8 "term": "Payment due within 30 days of invoice date. A late payment fee of 1.5% per month applies to overdue balances.",
                9 "memo": "Internal ref: Q1 closeout — Acct Manager: TJ — Client tier: Enterprise",
                10 "payment_term": {
                11 "term_type": "NET_30"
                12 }
                13 },
                14 "invoicer": {
                15 "name": {
                16 "given_name": "Priya",
                17 "surname": "Nair"
                18 },
                19 "email_address": "billing@northstaragency.com",
                20 "business_name": "North Star Agency LLC",
                21 "phones": [
                22 {
                23 "country_code": "1",
                24 "national_number": "6175550183",
                25 "phone_type": "WORK"
                26 }
                27 ],
                28 "website": "https://northstaragency.com",
                29 "address": {
                30 "address_line_1": "200 State Street",
                31 "address_line_2": "Floor 4",
                32 "admin_area_2": "Boston",
                33 "admin_area_1": "MA",
                34 "postal_code": "02109",
                35 "country_code": "US"
                36 }
                37 },
                38 "primary_recipients": [
                39 {
                40 "billing_info": {
                41 "name": {
                42 "given_name": "Marcus",
                43 "surname": "Webb"
                44 },
                45 "business_name": "Webb Enterprises Inc.",
                46 "email_address": "marcus.webb@webbenterprises.com",
                47 "address": {
                48 "address_line_1": "1 Financial Center",
                49 "admin_area_2": "Boston",
                50 "admin_area_1": "MA",
                51 "postal_code": "02111",
                52 "country_code": "US"
                53 }
                54 }
                55 }
                56 ],
                57 "items": [
                58 {
                59 "name": "Strategy & Discovery",
                60 "description": "Stakeholder interviews, competitive landscape analysis, and project scoping",
                61 "quantity": "20",
                62 "unit_amount": {
                63 "currency_code": "USD",
                64 "value": "200.00"
                65 },
                66 "unit_of_measure": "HOURS",
                67 "tax": {
                68 "name": "Sales Tax",
                69 "percent": "6.25"
                70 }
                71 },
                72 {
                73 "name": "Creative Design",
                74 "description": "Brand identity refresh — logo, typography, color system, and style guide",
                75 "quantity": "35",
                76 "unit_amount": {
                77 "currency_code": "USD",
                78 "value": "175.00"
                79 },
                80 "unit_of_measure": "HOURS",
                81 "tax": {
                82 "name": "Sales Tax",
                83 "percent": "6.25"
                84 }
                85 },
                86 {
                87 "name": "Licensed Stock Photography",
                88 "description": "Commercial license, 1-year term per image",
                89 "quantity": "12",
                90 "unit_amount": {
                91 "currency_code": "USD",
                92 "value": "45.00"
                93 },
                94 "unit_of_measure": "QUANTITY",
                95 "tax": {
                96 "name": "Sales Tax",
                97 "percent": "6.25"
                98 }
                99 },
                100 {
                101 "name": "Software Tools & Subscriptions",
                102 "description": "Figma, Maze, and Loom — project duration licenses",
                103 "quantity": "3",
                104 "unit_amount": {
                105 "currency_code": "USD",
                106 "value": "120.00"
                107 },
                108 "unit_of_measure": "QUANTITY"
                109 },
                110 {
                111 "name": "Project Management & Coordination",
                112 "description": "Flat-rate fee covering sprint planning, client communications, and delivery coordination for full project duration",
                113 "quantity": "1",
                114 "unit_amount": {
                115 "currency_code": "USD",
                116 "value": "1500.00"
                117 },
                118 "unit_of_measure": "AMOUNT",
                119 "tax": {
                120 "name": "Sales Tax",
                121 "percent": "6.25"
                122 }
                123 }
                124 ],
                125 "configuration": {
                126 "allow_tip": false,
                127 "partial_payment": {
                128 "allow_partial_payment": true,
                129 "minimum_amount_due": {
                130 "currency_code": "USD",
                131 "value": "2500.00"
                132 }
                133 },
                134 "tax_calculated_after_discount": true,
                135 "tax_inclusive": false
                136 },
                137 "amount": {
                138 "breakdown": {
                139 "discount": {
                140 "invoice_discount": {
                141 "percent": "5"
                142 }
                143 }
                144 }
                145 }
                146}

                Notes

                • You can mix all three unit_of_measure types — HOURS, QUANTITY, and AMOUNT — freely within the same items array. Each line item renders according to its own type on the invoice.
                • Use quantity: "1" on AMOUNT lines for flat-rate fees. Don't use a quantity greater than "1" on an AMOUNT line — the API multiplies the values, which is likely unintended for flat fees.
                • The invoice-level amount.breakdown.discount applies across the entire invoice total after individual line item subtotals are summed. Line item-level discounts apply before the invoice-level discount.
                • Set configuration.tax_calculated_after_discount: true to calculate tax on the post-discount amount — the correct behavior for most jurisdictions.
                • detail.memo is private and never shown to the client — use it for internal bookkeeping, account references, or sales attribution.