curl --request POST \
--url https://api-sandbox.beinfi.com/products/{productID}/customers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {}
}
'import requests
url = "https://api-sandbox.beinfi.com/products/{productID}/customers"
payload = {
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalId: '<string>',
name: '<string>',
email: '<string>',
taxId: '<string>',
pspRef: '<string>',
metadata: {}
})
};
fetch('https://api-sandbox.beinfi.com/products/{productID}/customers', 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://api-sandbox.beinfi.com/products/{productID}/customers",
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([
'externalId' => '<string>',
'name' => '<string>',
'email' => '<string>',
'taxId' => '<string>',
'pspRef' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api-sandbox.beinfi.com/products/{productID}/customers"
payload := strings.NewReader("{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api-sandbox.beinfi.com/products/{productID}/customers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/products/{productID}/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {},
"creditAlertSent": true,
"createdAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"resource": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Enroll a customer
Enrolls a customer in the product, creating the customer if they do not exist yet. This is the recommended call to start billing someone.
Idempotent on externalId: repeating it with the same externalId returns the same enrollment, and any fields you send update the customer (fields you omit are kept).
Keep the response’s id: it is the enrollment ID that subscriptions, invoices, usage and balances expect. The response’s customerId is a different id (the customer’s) and does not work for those calls.
curl --request POST \
--url https://api-sandbox.beinfi.com/products/{productID}/customers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {}
}
'import requests
url = "https://api-sandbox.beinfi.com/products/{productID}/customers"
payload = {
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalId: '<string>',
name: '<string>',
email: '<string>',
taxId: '<string>',
pspRef: '<string>',
metadata: {}
})
};
fetch('https://api-sandbox.beinfi.com/products/{productID}/customers', 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://api-sandbox.beinfi.com/products/{productID}/customers",
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([
'externalId' => '<string>',
'name' => '<string>',
'email' => '<string>',
'taxId' => '<string>',
'pspRef' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api-sandbox.beinfi.com/products/{productID}/customers"
payload := strings.NewReader("{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api-sandbox.beinfi.com/products/{productID}/customers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/products/{productID}/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"taxId\": \"<string>\",\n \"pspRef\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"name": "<string>",
"email": "<string>",
"taxId": "<string>",
"pspRef": "<string>",
"metadata": {},
"creditAlertSent": true,
"createdAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"resource": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Authorizations
Your account's secret key: Authorization: Bearer sk_test_… or sk_live_…. Server-side only.
Headers
A unique key per operation (a UUID works). Retrying with the same key returns the original response.
Path Parameters
Product ID.
Body
This customer's id in your own system (for example, your app's user id). Required; sending the same value again returns the same customer.
Customer name.
Customer email.
CPF or CNPJ.
The customer's reference with the payment processor, if you already have one. Usually not needed.
Your own free-form JSON data. Stored on the enrollment.
Response
Enrollment created
An enrollment: this customer in this product. The id is the enrollment ID that subscriptions, invoices, usage and balances reference.
Enrollment ID. This is the one billing and usage calls expect.
Customer ID. Do not use it for billing and usage calls; use id.
The customer's id in your own system.
CPF or CNPJ.
The customer's reference with the payment processor, when there is one.
The free-form data sent at enrollment.
Whether the low-balance alert has already been sent for this enrollment.