curl -X POST "https://api.affonso.io/v1/embed/coupon" \
-H "Content-Type: application/json" \
-d '{
"token": "a1b2c3d4e5f6789...",
"code": "JOHN20"
}'
const response = await fetch('https://api.affonso.io/v1/embed/coupon', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
token: embedToken,
code: 'JOHN20',
}),
});
const { data, error } = await response.json();
if (error) {
if (error.code === 'ALREADY_EXISTS') {
console.log('You already have a coupon');
} else if (error.code === 'CODE_TAKEN') {
console.log('This code is already in use');
}
} else {
console.log(`Created coupon: ${data.code}`);
}
import requests
response = requests.post(
'https://api.affonso.io/v1/embed/coupon',
json={
'token': 'a1b2c3d4e5f6789...',
'code': 'JOHN20'
}
)
result = response.json()
if result.get('success'):
print(f"Created coupon: {result['data']['code']}")
else:
print(f"Error: {result['error']['message']}")
{
"success": true,
"data": {
"code": "JOHN20",
"discountType": "percentage",
"discountValue": 20
}
}
{
"success": false,
"error": {
"code": "ALREADY_EXISTS",
"message": "You already have a coupon code"
}
}
{
"success": false,
"error": {
"code": "CODE_TAKEN",
"message": "This code is already taken"
}
}
{
"success": false,
"error": {
"code": "NO_BLUEPRINT",
"message": "Self-service coupons are not enabled"
}
}
{
"success": false,
"error": {
"code": "INVALID_CODE",
"message": "Code must be 3-20 alphanumeric characters"
}
}
{
"success": false,
"error": {
"code": "TOKEN_EXPIRED",
"message": "Token has expired"
}
}
Embed
Create Self-Service Coupon
Allow affiliates to create their own coupon code
POST
/
v1
/
embed
/
coupon
curl -X POST "https://api.affonso.io/v1/embed/coupon" \
-H "Content-Type: application/json" \
-d '{
"token": "a1b2c3d4e5f6789...",
"code": "JOHN20"
}'
const response = await fetch('https://api.affonso.io/v1/embed/coupon', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
token: embedToken,
code: 'JOHN20',
}),
});
const { data, error } = await response.json();
if (error) {
if (error.code === 'ALREADY_EXISTS') {
console.log('You already have a coupon');
} else if (error.code === 'CODE_TAKEN') {
console.log('This code is already in use');
}
} else {
console.log(`Created coupon: ${data.code}`);
}
import requests
response = requests.post(
'https://api.affonso.io/v1/embed/coupon',
json={
'token': 'a1b2c3d4e5f6789...',
'code': 'JOHN20'
}
)
result = response.json()
if result.get('success'):
print(f"Created coupon: {result['data']['code']}")
else:
print(f"Error: {result['error']['message']}")
{
"success": true,
"data": {
"code": "JOHN20",
"discountType": "percentage",
"discountValue": 20
}
}
{
"success": false,
"error": {
"code": "ALREADY_EXISTS",
"message": "You already have a coupon code"
}
}
{
"success": false,
"error": {
"code": "CODE_TAKEN",
"message": "This code is already taken"
}
}
{
"success": false,
"error": {
"code": "NO_BLUEPRINT",
"message": "Self-service coupons are not enabled"
}
}
{
"success": false,
"error": {
"code": "INVALID_CODE",
"message": "Code must be 3-20 alphanumeric characters"
}
}
{
"success": false,
"error": {
"code": "TOKEN_EXPIRED",
"message": "Token has expired"
}
}
Create a self-service coupon code for an affiliate. This endpoint is public and uses token-based authentication in the request body.
This endpoint does not require API key authentication. Instead, it uses the
token in the request body for authentication.Prerequisites
Self-service coupons must be enabled for the program:- Configure a Coupon Blueprint in your program settings
- The blueprint defines the discount type and value for affiliate coupons
- Affiliates can only create one coupon per program
Body Parameters
string
required
The embed token from
POST /v1/embed/token.string
required
The coupon code to create. Must be 3-20 alphanumeric characters. Will be automatically uppercased and special characters removed.
Response
boolean
Always
true for successful responses.object
Validation Rules
- Code must be 3-20 alphanumeric characters
- Code is converted to uppercase
- Non-alphanumeric characters are stripped
- Code must be unique within the program
- Affiliate can only have one coupon per program
curl -X POST "https://api.affonso.io/v1/embed/coupon" \
-H "Content-Type: application/json" \
-d '{
"token": "a1b2c3d4e5f6789...",
"code": "JOHN20"
}'
const response = await fetch('https://api.affonso.io/v1/embed/coupon', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
token: embedToken,
code: 'JOHN20',
}),
});
const { data, error } = await response.json();
if (error) {
if (error.code === 'ALREADY_EXISTS') {
console.log('You already have a coupon');
} else if (error.code === 'CODE_TAKEN') {
console.log('This code is already in use');
}
} else {
console.log(`Created coupon: ${data.code}`);
}
import requests
response = requests.post(
'https://api.affonso.io/v1/embed/coupon',
json={
'token': 'a1b2c3d4e5f6789...',
'code': 'JOHN20'
}
)
result = response.json()
if result.get('success'):
print(f"Created coupon: {result['data']['code']}")
else:
print(f"Error: {result['error']['message']}")
{
"success": true,
"data": {
"code": "JOHN20",
"discountType": "percentage",
"discountValue": 20
}
}
{
"success": false,
"error": {
"code": "ALREADY_EXISTS",
"message": "You already have a coupon code"
}
}
{
"success": false,
"error": {
"code": "CODE_TAKEN",
"message": "This code is already taken"
}
}
{
"success": false,
"error": {
"code": "NO_BLUEPRINT",
"message": "Self-service coupons are not enabled"
}
}
{
"success": false,
"error": {
"code": "INVALID_CODE",
"message": "Code must be 3-20 alphanumeric characters"
}
}
{
"success": false,
"error": {
"code": "TOKEN_EXPIRED",
"message": "Token has expired"
}
}
Checking Coupon Status
UseGET /v1/embed/data to check if an affiliate already has a coupon:
const { data } = await fetch(`https://api.affonso.io/v1/embed/data?token=${token}`)
.then(r => r.json());
if (data.coupon) {
// Affiliate already has a coupon
console.log(`Your code: ${data.coupon.code}`);
} else if (data.couponBlueprint) {
// Can create a coupon
console.log('You can create a coupon!');
} else {
// Self-service coupons not enabled
console.log('Coupon creation not available');
}
Once created, coupon codes cannot be changed. Affiliates should choose their code carefully.
Was this page helpful?
