Create subscription
curl --request POST \
--url https://rcur.app/api/v2/subscriptions \
--header 'Content-Type: application/json' \
--data '
{
"name": "Monthly Premium",
"customer_id": "abc123def456",
"mollie_profile_id": "pfl_abc123",
"mollie_mandate_id": "mdt_abc123",
"start_date": "2025-02-01",
"rules": [
{
"amount": 29.99,
"interval": "month",
"interval_amount": 1,
"day": 1,
"times": 12,
"invoice_rules": [
{
"quantity": 1,
"description": "Monthly subscription fee",
"amount": 29.99,
"vat": "21",
"ledger_account_id": "la_123"
}
]
}
],
"workflow_id": "wf_123",
"docstyle_id": "ds_123"
}
'import requests
url = "https://rcur.app/api/v2/subscriptions"
payload = {
"name": "Monthly Premium",
"customer_id": "abc123def456",
"mollie_profile_id": "pfl_abc123",
"mollie_mandate_id": "mdt_abc123",
"start_date": "2025-02-01",
"rules": [
{
"amount": 29.99,
"interval": "month",
"interval_amount": 1,
"day": 1,
"times": 12,
"invoice_rules": [
{
"quantity": 1,
"description": "Monthly subscription fee",
"amount": 29.99,
"vat": "21",
"ledger_account_id": "la_123"
}
]
}
],
"workflow_id": "wf_123",
"docstyle_id": "ds_123"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Monthly Premium',
customer_id: 'abc123def456',
mollie_profile_id: 'pfl_abc123',
mollie_mandate_id: 'mdt_abc123',
start_date: '2025-02-01',
rules: [
{
amount: 29.99,
interval: 'month',
interval_amount: 1,
day: 1,
times: 12,
invoice_rules: [
{
quantity: 1,
description: 'Monthly subscription fee',
amount: 29.99,
vat: '21',
ledger_account_id: 'la_123'
}
]
}
],
workflow_id: 'wf_123',
docstyle_id: 'ds_123'
})
};
fetch('https://rcur.app/api/v2/subscriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://rcur.app/api/v2/subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Monthly Premium',
'customer_id' => 'abc123def456',
'mollie_profile_id' => 'pfl_abc123',
'mollie_mandate_id' => 'mdt_abc123',
'start_date' => '2025-02-01',
'rules' => [
[
'amount' => 29.99,
'interval' => 'month',
'interval_amount' => 1,
'day' => 1,
'times' => 12,
'invoice_rules' => [
[
'quantity' => 1,
'description' => 'Monthly subscription fee',
'amount' => 29.99,
'vat' => '21',
'ledger_account_id' => 'la_123'
]
]
]
],
'workflow_id' => 'wf_123',
'docstyle_id' => 'ds_123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://rcur.app/api/v2/subscriptions"
payload := strings.NewReader("{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://rcur.app/api/v2/subscriptions")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://rcur.app/api/v2/subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "sub_abc123",
"name": "Monthly Premium",
"status": "active",
"start_date": "2025-01-01",
"created_at": "2025-01-01 10:00:00",
"mollie_mandate_id": "mdt_abc123",
"mollie_profile_id": "pfl_abc123",
"next_payment_at": "2025-02-01",
"next_amount": "29.99",
"last_payment_created_at": "2025-01-01 10:00:00",
"resume_at": "2025-03-01",
"cancel_at": "2025-12-31",
"rules": [
{
"id": "rule_abc123",
"amount": "29.99",
"currency": "EUR",
"interval": "month",
"interval_amount": 1,
"day": 1,
"times_done": 3,
"times": 12
}
],
"customer": {}
}{
"status": 404,
"error": "Resource not found"
}{
"status": 422,
"error": "Could not process request. Some fields contain invalid data",
"fields": {
"email": [
"The email field is required."
]
}
}Subscriptions
Create subscription
POST
/
api
/
v2
/
subscriptions
Create subscription
curl --request POST \
--url https://rcur.app/api/v2/subscriptions \
--header 'Content-Type: application/json' \
--data '
{
"name": "Monthly Premium",
"customer_id": "abc123def456",
"mollie_profile_id": "pfl_abc123",
"mollie_mandate_id": "mdt_abc123",
"start_date": "2025-02-01",
"rules": [
{
"amount": 29.99,
"interval": "month",
"interval_amount": 1,
"day": 1,
"times": 12,
"invoice_rules": [
{
"quantity": 1,
"description": "Monthly subscription fee",
"amount": 29.99,
"vat": "21",
"ledger_account_id": "la_123"
}
]
}
],
"workflow_id": "wf_123",
"docstyle_id": "ds_123"
}
'import requests
url = "https://rcur.app/api/v2/subscriptions"
payload = {
"name": "Monthly Premium",
"customer_id": "abc123def456",
"mollie_profile_id": "pfl_abc123",
"mollie_mandate_id": "mdt_abc123",
"start_date": "2025-02-01",
"rules": [
{
"amount": 29.99,
"interval": "month",
"interval_amount": 1,
"day": 1,
"times": 12,
"invoice_rules": [
{
"quantity": 1,
"description": "Monthly subscription fee",
"amount": 29.99,
"vat": "21",
"ledger_account_id": "la_123"
}
]
}
],
"workflow_id": "wf_123",
"docstyle_id": "ds_123"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Monthly Premium',
customer_id: 'abc123def456',
mollie_profile_id: 'pfl_abc123',
mollie_mandate_id: 'mdt_abc123',
start_date: '2025-02-01',
rules: [
{
amount: 29.99,
interval: 'month',
interval_amount: 1,
day: 1,
times: 12,
invoice_rules: [
{
quantity: 1,
description: 'Monthly subscription fee',
amount: 29.99,
vat: '21',
ledger_account_id: 'la_123'
}
]
}
],
workflow_id: 'wf_123',
docstyle_id: 'ds_123'
})
};
fetch('https://rcur.app/api/v2/subscriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://rcur.app/api/v2/subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Monthly Premium',
'customer_id' => 'abc123def456',
'mollie_profile_id' => 'pfl_abc123',
'mollie_mandate_id' => 'mdt_abc123',
'start_date' => '2025-02-01',
'rules' => [
[
'amount' => 29.99,
'interval' => 'month',
'interval_amount' => 1,
'day' => 1,
'times' => 12,
'invoice_rules' => [
[
'quantity' => 1,
'description' => 'Monthly subscription fee',
'amount' => 29.99,
'vat' => '21',
'ledger_account_id' => 'la_123'
]
]
]
],
'workflow_id' => 'wf_123',
'docstyle_id' => 'ds_123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://rcur.app/api/v2/subscriptions"
payload := strings.NewReader("{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://rcur.app/api/v2/subscriptions")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://rcur.app/api/v2/subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Monthly Premium\",\n \"customer_id\": \"abc123def456\",\n \"mollie_profile_id\": \"pfl_abc123\",\n \"mollie_mandate_id\": \"mdt_abc123\",\n \"start_date\": \"2025-02-01\",\n \"rules\": [\n {\n \"amount\": 29.99,\n \"interval\": \"month\",\n \"interval_amount\": 1,\n \"day\": 1,\n \"times\": 12,\n \"invoice_rules\": [\n {\n \"quantity\": 1,\n \"description\": \"Monthly subscription fee\",\n \"amount\": 29.99,\n \"vat\": \"21\",\n \"ledger_account_id\": \"la_123\"\n }\n ]\n }\n ],\n \"workflow_id\": \"wf_123\",\n \"docstyle_id\": \"ds_123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "sub_abc123",
"name": "Monthly Premium",
"status": "active",
"start_date": "2025-01-01",
"created_at": "2025-01-01 10:00:00",
"mollie_mandate_id": "mdt_abc123",
"mollie_profile_id": "pfl_abc123",
"next_payment_at": "2025-02-01",
"next_amount": "29.99",
"last_payment_created_at": "2025-01-01 10:00:00",
"resume_at": "2025-03-01",
"cancel_at": "2025-12-31",
"rules": [
{
"id": "rule_abc123",
"amount": "29.99",
"currency": "EUR",
"interval": "month",
"interval_amount": 1,
"day": 1,
"times_done": 3,
"times": 12
}
],
"customer": {}
}{
"status": 404,
"error": "Resource not found"
}{
"status": 422,
"error": "Could not process request. Some fields contain invalid data",
"fields": {
"email": [
"The email field is required."
]
}
}Body
application/json
Subscription data
Subscription name
Example:
"Monthly Premium"
Customer hash ID
Example:
"abc123def456"
Mollie profile ID
Example:
"pfl_abc123"
Mollie mandate ID
Example:
"mdt_abc123"
Start date (Y-m-d)
Example:
"2025-02-01"
Subscription rules
Show child attributes
Show child attributes
Invoice workflow ID (required for Moneybird)
Example:
"wf_123"
Document style ID (required for Moneybird)
Example:
"ds_123"
Response
Subscription details
Example:
"sub_abc123"
Example:
"Monthly Premium"
Available options:
draft, active, paused, cancelled, completed Example:
"active"
Example:
"2025-01-01"
Example:
"2025-01-01 10:00:00"
Example:
"mdt_abc123"
Example:
"pfl_abc123"
Example:
"2025-02-01"
Example:
"29.99"
Example:
"2025-01-01 10:00:00"
Example:
"2025-03-01"
Example:
"2025-12-31"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I