Skip to main content
POST

Authorizations

Authorization
string
header
required

OAuth2 client_credentials authorization. Obtain a new access_token when it expires.

Body

application/json

Creates a subscription awaiting activation. Supply either an existing customer reference or new customer details. New customers require firstName, lastName and emailAddress in full. Exactly one subscription definition mode is required: manual, template or By agreement. Manual mode must enable at least one charge segment. plan_name is required outside template mode. The nested customer and plan format is recommended.

merchant_id
string
required

Business identifier assigned by BillBuddy.

Required string length: 1 - 20
notify_email

Whether to allow email notifications for this transaction or subscription. false prohibits them; true allows them. Omission or null uses the business's API email notification setting, which defaults to off. Actual delivery depends on notification preferences and applicable rules. Also accepts 0/1 and the strings "0"/"1".

notify_sms

Whether to allow SMS notifications for this transaction or subscription. false prohibits them; true allows them. Omission or null uses the business's API SMS notification setting, which defaults to off. Actual delivery depends on notification preferences and applicable rules. Also accepts 0/1 and the strings "0"/"1".

customer
object

Supply customer_id to reuse a customer, or firstName, lastName and emailAddress to create one. These options are mutually exclusive.

plan
object

Choose exactly one mode: manual recurring/one_off, template_id, or By agreement schedule.

customer_id
string | null

Supported top-level alternative; use customer.customer_id for new integrations. If both forms supply this field, the nested value takes precedence.

BillBuddy customer identifier. Must identify a valid customer within the current merchant and business.

Maximum string length: 32
firstName
string | null

Supported top-level alternative; use customer.firstName for new integrations. If both forms supply this field, the nested value takes precedence.

New customer's first name. Required when creating a new customer.

Maximum string length: 100
lastName
string | null

Supported top-level alternative; use customer.lastName for new integrations. If both forms supply this field, the nested value takes precedence.

New customer's last name. Required when creating a new customer.

Maximum string length: 100
emailAddress
string<email> | null

Supported top-level alternative; use customer.emailAddress for new integrations. If both forms supply this field, the nested value takes precedence.

New customer's primary email address. Required when creating a new customer. If it already belongs to a customer in the same merchant and business, supply that existing customer_id instead.

Maximum string length: 500
mobilePhoneNumber
string | null

Supported top-level alternative; use customer.mobilePhoneNumber for new integrations. If both forms supply this field, the nested value takes precedence.

Customer mobile phone number.

Maximum string length: 20
addressLine1
string | null

Supported top-level alternative; use customer.addressLine1 for new integrations. If both forms supply this field, the nested value takes precedence.

Customer address line 1.

Maximum string length: 255
addressSuburb
string | null

Supported top-level alternative; use customer.addressSuburb for new integrations. If both forms supply this field, the nested value takes precedence.

Customer city or suburb.

Maximum string length: 100
addressState
string | null

Supported top-level alternative; use customer.addressState for new integrations. If both forms supply this field, the nested value takes precedence.

Customer state or province.

Maximum string length: 100
addressPostCode
string | null

Supported top-level alternative; use customer.addressPostCode for new integrations. If both forms supply this field, the nested value takes precedence.

Customer postcode.

Maximum string length: 50
plan_name
string | null

Supported top-level alternative; use plan.plan_name for new integrations. If both forms supply this field, the nested value takes precedence.

Subscription name. In template mode, omission or null inherits the template name. Required and nonempty in other modes.

Maximum string length: 255
description
string | null

Supported top-level alternative; use plan.description for new integrations. If both forms supply this field, the nested value takes precedence.

Description.

Maximum string length: 500
recurring
object | null

Supported top-level alternative; use plan.recurring for new integrations. If both forms supply this field, the nested value takes precedence.

Recurring subscription definition.

one_off
object | null

Supported top-level alternative; use plan.one_off for new integrations. If both forms supply this field, the nested value takes precedence.

One-off payment definition. Acts as a Deposit when enabled with recurring, or as a One-off when used alone.

schedule
object | null

Supported top-level alternative; use plan.schedule for new integrations. If both forms supply this field, the nested value takes precedence.

Initial By agreement payment schedule definition. Mutually exclusive with manual recurring/one_off mode and template_id mode.

surcharge_config
enum<string>[] | null

Supported top-level alternative; use plan.surcharge_config for new integrations. If both forms supply this field, the nested value takes precedence.

Surcharge options, preferably an array of strings. See the schema and examples for allowed options. Omission, null or an empty array disables all options; non-array values are also treated as all disabled. Unknown options do not enable charges. credit_card_surcharge selects the credit card surcharge group. Actual charges depend on merchant business rules and payment method restrictions. Applies in manual mode. Template mode uses the template's surcharge options, which this field cannot override. By agreement schedule mode does not support this setting. Card surcharges remain subject to the applicable charging policy; if it prohibits them, selecting card options does not enable charges.

Surcharge option.

Available options:
direct_debit_surcharge,
visa_domestic_surcharge,
visa_international_surcharge,
mastercard_domestic_surcharge,
mastercard_international_surcharge,
amex_domestic_surcharge,
amex_international_surcharge,
credit_card_surcharge
dishonour_fee_switch

Supported top-level alternative; use plan.dishonour_fee_switch for new integrations. If both forms supply this field, the nested value takes precedence.

Whether to charge a customer dishonour fee. Omission or null defaults to off. Enabling it requires an applicable positive fee configuration; the signed terms determine the actual amount. Also accepts 0/1 and the strings "0"/"1". Applies only to manual recurring/one_off mode. Template mode and By agreement schedule mode do not support this setting through this field.

template_id
string | null

Supported top-level alternative; use plan.template_id for new integrations. If both forms supply this field, the nested value takes precedence.

Available template ID from GET /api/v2/plan/list. Only enabled, ACTIVE, non-tiered templates other than By agreement are accepted.

Maximum string length: 20
start_date
string<date> | null

Supported top-level alternative; use plan.start_date for new integrations. If both forms supply this field, the nested value takes precedence.

Date override for the template's recurring segment. Required when the template contains recurring. Must be no earlier than tomorrow in the service business timezone.

payment_date
string<date> | null

Supported top-level alternative; use plan.payment_date for new integrations. If both forms supply this field, the nested value takes precedence.

Date override for the template's one_off segment. Required when the template contains one_off. Must be no earlier than tomorrow in the service business timezone.

Response

HTTP 200. Distinguish success, business errors, validation errors and business authentication errors using the response body code.

Success response.

code
enum<integer>
required

0 means the subscription was created and awaits customer activation.

Available options:
0
message
string
required

Response message.

data
object
required

Created DDR awaiting activation.