curl --request POST \
--url https://api-sandbox.beinfi.com/billing/coupons \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"percentOff": "<string>",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api-sandbox.beinfi.com/billing/coupons"
payload = {
"code": "<string>",
"percentOff": "<string>",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}
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({
code: '<string>',
percentOff: '<string>',
durationInCycles: 123,
maxRedemptions: 123,
redeemBy: '2023-11-07T05:31:56Z'
})
};
fetch('https://api-sandbox.beinfi.com/billing/coupons', 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/billing/coupons",
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([
'code' => '<string>',
'percentOff' => '<string>',
'durationInCycles' => 123,
'maxRedemptions' => 123,
'redeemBy' => '2023-11-07T05:31:56Z'
]),
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/billing/coupons"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\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/billing/coupons")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/billing/coupons")
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 \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"percentOff": "<string>",
"duration": "once",
"timesRedeemed": 123,
"status": "active",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Create a coupon
Creates a percentage-off coupon. The buyer enters its code at checkout to apply it to the invoice.
curl --request POST \
--url https://api-sandbox.beinfi.com/billing/coupons \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"percentOff": "<string>",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api-sandbox.beinfi.com/billing/coupons"
payload = {
"code": "<string>",
"percentOff": "<string>",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}
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({
code: '<string>',
percentOff: '<string>',
durationInCycles: 123,
maxRedemptions: 123,
redeemBy: '2023-11-07T05:31:56Z'
})
};
fetch('https://api-sandbox.beinfi.com/billing/coupons', 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/billing/coupons",
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([
'code' => '<string>',
'percentOff' => '<string>',
'durationInCycles' => 123,
'maxRedemptions' => 123,
'redeemBy' => '2023-11-07T05:31:56Z'
]),
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/billing/coupons"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\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/billing/coupons")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/billing/coupons")
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 \"code\": \"<string>\",\n \"percentOff\": \"<string>\",\n \"durationInCycles\": 123,\n \"maxRedemptions\": 123,\n \"redeemBy\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"percentOff": "<string>",
"duration": "once",
"timesRedeemed": 123,
"status": "active",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"durationInCycles": 123,
"maxRedemptions": 123,
"redeemBy": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<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.
Body
A new coupon's details.
Coupon code: 3 to 32 characters from uppercase letters, digits, _ and - (e.g. BLACKFRIDAY-20).
Discount percentage, as a decimal string, above 0 and up to 100.
once (first invoice only), repeating (for durationInCycles cycles) or forever (every invoice).
once, repeating, forever Required (1 or more) when duration is repeating; omit it otherwise.
Total redemption limit. Omit for no limit.
Deadline for applying the coupon. Omit for no deadline.
Response
Created.
A percentage discount the buyer applies at checkout with its code. On subscriptions, duration sets how many cycles the discount lasts.
The code the buyer enters at checkout.
Discount percentage, as a decimal string ("15" = 15%).
once (first invoice only), repeating (for durationInCycles cycles) or forever (every invoice).
once, repeating, forever How many times the coupon has been used.
active (accepted at checkout) or archived (no longer accepted).
active, archived How many cycles the discount lasts. Only on repeating coupons.
How many times the coupon can be used in total. null = no limit.
Last moment the coupon can be applied. null = no deadline.