Create a Recurring Invoices

Copperx allows you to create recurring invoices for subscriptions, memberships, and services that require periodic payments.

🔧 How It Works

  1. Create a Recurring Invoice: Provide the relevant customer, amount, and recurrence details.

  2. Invoice Generation & Automation: Copperx’s system automatically generates new invoices at the defined interval.

  3. Notifications & Webhooks: Stay updated with webhooks for successful payments, failures, or other events.

✅ Step 1: Create a Customer

Before creating an invoice, you’ll need to create a customer:

curl --request POST \
  --url https://api.copperx.dev/api/v1/customers \
  --header 'Authorization: Bearer {API_KEY}' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "email": "[email protected]",
    "name": "John Doe",
    "metadata": {
      "customerType": "SaaS"
    }
  }'

Save the customerId from the response.


✅ Step 2: Create a Product

Next, create the product to be billed:

curl --request POST \
  --url https://api.copperx.dev/api/v1/products \
  --header 'Authorization: Bearer {API_KEY}' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "name": "Pro Plan",
    "description": "Monthly subscription plan",
    "isActive": true,
    "unitLabel": "month",
    "metadata": {
      "category": "SaaS"
    },
    "defaultPriceData": {
      "currency": "usdc",
      "unitAmount": 50000000,
      "interval": "month",
      "type": "recurring"
    }
  }'

Save the productId from the response.

Save the defaultPrice.id as a priceId from the response.


✅ Step 3: Create a Recurring Invoice

Use the customerId and productId and priceId in the invoice creation request:

curl --request POST \
  --url https://api.copperx.dev/api/v1/invoices \
  --header 'Authorization: Bearer {API_KEY}' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "customerId": "{CUSTOMER_ID}",
    "description": "Monthly recurring invoice for Pro Plan",
    "dueDate": "2025-06-15T00:00:00Z",
    "invoiceType": "recurring",
    "collectionMethod": "charge_automatically",
    "lineItems": {
      "data": [
        {
          "quantity": 1,
          "priceId": "{PRICE_ID}"
          "price": {
            "productId": "{PRODUCT_ID}",
            "unitAmount": "50000000",
            "currency": "usdc",
            "type": "recurring",
            "interval": "month"
          }
        }
      ]
    }
  }'

Save the invoiceId from the response.


✅ Step 4: Finalize the Invoice

Finalize the invoice to make it active and ready for payment collection:

curl --request POST \
  --url https://api.copperx.dev/api/v1/invoices/{INVOICE_ID}/finalize \
  --header 'Authorization: Bearer {API_KEY}' \
  --header 'Content-Type: application/json'

🛠️ Best Practices

Validate Customer Details: Make sure the customer information is accurate before generating invoices. ✅ Use Webhooks: Listen for events like invoice.paid, customer.subscription.started, and invoice.marked_as_paid to keep your system up to date. ✅ Secure API Calls: Always use HTTPS and a valid API key. ✅ Clear Terms: Clearly communicate the subscription and billing terms to customers.

Last updated