Create Billing Customer
Create a unified payment identity for invoices, subscriptions, and trigger billing
Creates a new billing customer record linking a CRM contact to a payment gateway. If a billing customer already exists for this contact and organization, returns the existing record with `existing: true`.
Requires a valid `api_key` in the JSON request body
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
api_key |
body | string |
Yes | Your Zyntro API key |
org_id |
body | string |
Yes | Your organization UUID |
brand_id |
body | string |
Yes | Your brand ID |
contact_id |
body | string |
Yes | The CRM contact UUID to create a billing customer for |
gateway |
body | string |
No | Payment gateway: `stripe` or `paypal`. Default: `stripe`. |
payment_data |
body | object |
No | Gateway-specific payment method data. Default: null. |
allow_trigger |
body | integer |
No | Whether trigger billing is allowed for this customer. `1` = yes, `0` = no. Default: `0`. |
require_initial |
body | integer |
No | Whether an initial verification charge is required. `1` = yes, `0` = no. Default: `1`. |
initial_amount |
body | float |
No | Initial verification charge amount. Default: `15.00`. Minimum set by Edge settings. |
notes |
body | string |
No | Internal notes about this billing customer. |
meta |
body | object |
No | Custom metadata stored on the billing customer record. |
Code Samples
bash
curl -X POST https://app.zyntrohq.com/apis/public/edge/createCustomer.php \
-H "Content-Type: application/json" \
-d '{
"api_key": "your_api_key",
"org_id": "org_xxx",
"brand_id": "1",
"contact_id": "cont_xxx",
"gateway": "stripe",
"allow_trigger": 1
}'
Response
200
Customer created or existing returned
json
{
"data": {
"bc_dt": "2026-03-30 10:22:00",
"bc_id": "bc_xxx",
"bc_orgid": "org_xxx",
"bc_contid": "cont_xxx",
"bc_status": "active",
"bc_gateway": "stripe",
"bc_allow_trigger": 1,
"bc_initial_charged": 1
},
"status": "success",
"existing": false,
"billing_customer_id": "bc_xxx"
}
Info:
If a billing customer already exists for this contact + org, the existing record is returned with `existing: true`. This provides built-in idempotency.