Payment terms

Learn how to set the amount of time to pay an invoice and to include discounts for early payments.

Overview

Payment terms define the amount of time one has to pay an invoice (for example, 30 days from the invoice issue date). The terms can optionally include discounts for early payments to motivate the customers to pay sooner than the due date.

Payment terms structure

The payment terms are represented as follows:

{
  // User-defined display name
  "name": "2/10, 1/20, net 30",
  
  // Optional description
  "description": "To be paid within 30 days. 2% discount if paid within 10 days, 1% discount if paid within 20 days.",

  // Payment target dates and discounts.
  // term_1 and term_2 are optional early discount terms. The final term does not have a discount.
  // Condition: term_1 days < term_2 days < term_final days
  "term_1": {
    "number_of_days": 10,  // Days after the invoice issue date
    "discount": 200        // Discount percentage in minor units. Here, 200 means 2%. 1050 means 10.5%.
  },
  "term_2": {
    "number_of_days": 20,
    "discount": 100,
  },
  "term_final": {
    "number_of_days": 30,
  }
}

Examples

Net X

A common payment term is "Net X" (such as Net 7 or Net 30) which means the invoice must be fully paid within X days. To create such a payment term, use the following payload:

{
  "name": "Net 30",
  "description": "Payment is due within 30 days after the invoice issue date",
  "term_final": {
    "number_of_days": 30
  }
}

Early payment discounts

To incentivize quick payments, payment terms can include early payment discounts. You can define up to two discount tiers before the due date.

For example, payment terms can offer 1 percent off the invoice amount if the customer pays within 15 days as opposed to 30. This scenario, commonly abbreviated as "1/15, Net 30", can be expressed as follows:

{
  "name": "1/15, Net 30",
  "description": "The invoice must be paid within 30 days. 1% discount if paid within the first 15 days.",
  "term_1": {
    "number_of_days": 15,
    "discount": 100
  },
  "term_final": {
    "number_of_days": 30
  }
}

The following example includes two discount tiers:

{
  "name": "2/10, 1/20, Net 30",
  "description": "The invoice must be paid within 30 days. 2% discount if paid within the first 10 days, 1% discount if paid within 20 days.",
  "term_1": {
    "number_of_days": 10,
    "discount": 200
  },
  "term_2": {
    "number_of_days": 20,
    "discount": 100
  },
  "term_final": {
    "number_of_days": 30
  }
}

Payment terms for receivables

You must have configured at least one payment term before you can create outgoing invoices. To create a new payment term, call POST /payment_terms and provide the terms data in the request body (see the examples):

curl -X POST 'https://api.sandbox.monite.com/v1/payment_terms' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -d '{
       "name": "Net 30",
       "term_final": {
         "number_of_days": 30
       }
     }'

The successful 201 response contains the id assigned to the created payment term. You will need this id later when creating the outgoing invoices.

{
  "id": "411d9079-02af-476d-8723-4789882e01c3"
  ...
}

Specify payment terms when creating an invoice

When creating an outgoing invoice, you must provide the ID of the payment term to use for this invoice:

curl -X POST 'https://api.sandbox.monite.com/v1/receivables' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "type": "invoice",
       "line_items": [ ... ],
       "payment_terms_id": "411d9079-02af-476d-8723-4789882e01c3",
       ...
     }'

The invoice due date is calculated based on the invoice creation date and the term_final period of the payment terms. The due date is returned in the payment_terms.term_final.end_date property in the response. The payment_terms object returned in the response also includes the calculated end_date for each term period.

{
  "type": "invoice",
  "created_at": "2022-05-19T09:12:53.875094+00:00",
  ...
  "payment_terms": {
    "id": "411d9079-02af-476d-8723-4789882e01c3",
    "name": "1/15, Net 30",
    "description": "The invoice must be paid within 30 days. 1% discount if paid within the first 15 days.",
    "term_1": {
      "number_of_days": 15,
      "discount": 100,
      "end_date": "2022-06-03"   // Last date to qualify for an early payment discount
    },
    "term_final": {
      "number_of_days": 30,
      "end_date": "2022-06-18"   // Invoice due date
    }
  }
}

You can change the terms for an existing draft outgoing invoice by calling PATCH /receivables/{invoice_id}:

curl -X PATCH 'https://api.sandbox.monite.com/v1/receivables/{invoice_id}' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "invoice": {
         "payment_terms_id": "<new ID>"
       }
     }'

List all payment terms for receivables

To get all configured payment terms for receivables, call GET /payment_terms:

curl -X GET 'https://api.sandbox.monite.com/v1/payment_terms' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' 

Payment terms for payables

In payables, the payment terms are determined by the entity's counterparts (that is, vendors or suppliers).

When creating a payable from data, you can specify the payment_terms data in the request body as shown below:

curl -X PATCH 'https://api.sandbox.monite.com/v1/payables/upload_with_data' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "currency": "EUR",
       "amount": 11900,
       "due_date": "2022-06-30",
       "counterpart_name": "SupplierName",
       "payment_terms": {
         "name": "2/10, 1/20, net 30",
         "term_1": {
           "number_of_days": 10,
           "discount": 200
         },
         "term_2": {
           "number_of_days": 20,
           "discount": 100
         },
         "term_final": {
           "number_of_days": 30
         }
       },
       ...
     }'

Did this page help you?