# Create a Recurring Invoices

### 🔧 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:

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

✅ **Save the `customerId`** from the response.

***

**✅ Step 2: Create a Product**

Next, create the product to be billed:

```bash
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:

```bash
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:

```bash
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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.copperx.io/integrate-payments/create-a-recurring-invoices.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
