Adding a non-recurring payment using the ChartMogul API

This tutorial describes how you can register a one-time or non-recurring payment using the ChartMogul API.

📘

One-time payments and ChartMogul metrics

In ChartMogul, one-time payments contribute towards Gross Cash Flow, Net Cash flow and Non-Recurring Cash Flow charts. They do not contribute to MRR, Churn or LTV metrics.

Example use case

Let's imagine that:

  • You charged your customer Adam Smith a one-time consultation fee of $25 on November 1st, 2015.
  • Adam successfully paid for it on November 5th, 2015.

To add this, you must send us an invoice with a line_item of type one_time, an amount_in_cents of 2500, and a transaction with successful payment on November 5th, 2015.

Note - For the purposes of this example, we are using the following UUIDs,

  • ChartMogul UUID of Adam Smith - cus_f466e33d-ff2b-4a11-8f85-417eb02157a7
# Example for registering a one-time payment

curl -X POST "https://api.chartmogul.com/v1/import/customers/cus_f466e33d-ff2b-4a11-8f85-417eb02157a7/invoices" \
     -u YOUR_API_KEY: \
     -H "Content-Type: application/json" \
     -d '{
            "invoices":[
              {
                "external_id": "INV0001",
                "date": "2015-11-01 00:00:00",
                "currency": "USD",
                "customer_external_id": "cus_0001",
                "data_source_uuid": "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
                "line_items": [
                  {
                    "type": "one_time",
                    "description": "Consultation Fees",
                    "amount_in_cents": 2500,
                    "quantity": 1
                  }
                ],
                "transactions": [
                  {
                    "date": "2015-11-05 00:14:23",
                    "type": "payment",
                    "result": "successful"
                  }
                ]   
              }
            ]
        }'
# Example for registering a one-time payment

line_item = ChartMogul::LineItems::OneTime.new(
  description: "Consultation Fees",
  amount_in_cents: 2500,
  quantity: 1,
)

transaction = ChartMogul::Transactions::Payment.new(
  date: Time.utc(2015, 11, 5, 0, 14, 23),
  result: "successful",
)

invoice = ChartMogul::Invoice.new(
  external_id: "INV0001",
  date: Time.utc(2015, 11, 1),
  currency: "USD",
  customer_external_id: "cus_0001",
  data_source_uuid: "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
  line_items: [line_item],
  transactions: [transaction],
)

ChartMogul::CustomerInvoices.create!(
  customer_uuid: "cus_f466e33d-ff2b-4a11-8f85-417eb02157a7",
  invoices: [invoice],
)
// Example for registering a one-time payment

ChartMogul.Invoice.create(config, "cus_f466e33d-ff2b-4a11-8f85-417eb02157a7", {
  invoices: [
    {
      external_id: "INV0001",
      date: "2015-11-01 00:00:00",
      currency: "USD",
      customer_external_id: "cus_0001",
      data_source_uuid: "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
      line_items: [
        {
          type: "one_time",
          description: "Consultation Fees",
          amount_in_cents: 2500,
          quantity: 1,
        },
      ],
      transactions: [
        {
          date: "2015-11-05 00:14:23",
          type: "payment",
          result: "successful",
        },
      ],
    },
  ],
});
// Example for registering a one-time payment

$line_item = new ChartMogul\LineItems\OneTime([
  "description" => "Consultation Fees",
  "amount_in_cents" => 2500,
  "quantity" => 1
]);

$transaction = new ChartMogul\Transactions\Payment([
  "date" => "2015-11-05T00:14:23.000Z",
  "result" => "successful"
]);

$invoice = new ChartMogul\Invoice([
  "external_id" => "INV0001",
  "date" => "2015-11-01T00:00:00.000Z",
  "currency" => "USD",
  "customer_external_id" => "cus_0001",
  "data_source_uuid" => "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
  "line_items" => [$line_item],
  "transactions" => [$transaction]
]);

ChartMogul\CustomerInvoices::create([
  "customer_uuid" => "cus_f466e33d-ff2b-4a11-8f85-417eb02157a7",
  "invoices" => [$invoice]
]);
// Example for registering a one time payment

api.CreateInvoices([]*cm.Invoice{{
  ExternalID:         "INV0001",
  Date:               "2015-11-01 00:00:00",
  Currency:           "USD",
  CustomerExternalID: "cus_0001",
  DataSourceUUID:     "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
  LineItems: []*cm.LineItem{{
    Type:          "one_time",
    Description:   "Consultation Fees",
    AmountInCents: 2500,
    Quantity:      1,
  }},
  Transactions: []*cm.Transaction{{
    Date:   "2015-11-05 00:14:23",
    Type:   "payment",
    Result: "successful",
  }},
}}, "cus_f466e33d-ff2b-4a11-8f85-417eb02157a7")
# Example for registering a one time payment

chartmogul.Invoice.create(
  config,
  uuid="cus_f466e33d-ff2b-4a11-8f85-417eb02157a7",
  data={
    "invoices": [
      {
        "external_id": "INV0001",
        "date": "2015-11-01 00:00:00",
        "currency": "USD",
        "customer_external_id": "cus_0001",
        "data_source_uuid": "ds_fef05d54-47b4-431b-aed2-eb6b9e545430",
        "line_items": [
          {
            "type": "one_time",
            "description": "Consultation Fees",
            "amount_in_cents": 2500,
            "quantity": 1,
          }
        ],
        "transactions": [
          {
            "date": "2015-11-05 00:14:23",
            "type": "payment",
            "result": "successful",
          }
        ],
      }
    ]
  },
)

In some cases, you could have one-time payments for specific subscription plans. You can include the plan_uuid for the one_time line item in such cases, and ChartMogul will attribute non-recurring revenue towards the specified plan. This will allow for filtering non-recurring revenue by plan.

👍

Non-recurring payment specified correctly

If specified correctly as demonstrated, this example non-recurring payment will result in the Gross Cash Flow, Net Cash flow and Non-Recurring Cash Flow for Adam Smith increasing by $25 on November 5th.