SumoRouter
SumoRouter Admin API

Coupons

Server

Credit coupons users can redeem.


List coupons

GET
https://ai.brandkamu.id/api/admin
/coupons

Coupons, newest first.

List coupons › query Parameters

q
​string

Substring of the code or description (case-insensitive).

limit
​integer · min: 1 · max: 200

Page size (clamped to 1-200).

Default: 50
offset
​integer · min: 0

Rows to skip.

Default: 0

List coupons › Responses

A page of coupons.

​Coupon[] · required
total
​integer · required

Create a coupon

POST
https://ai.brandkamu.id/api/admin
/coupons

Creates an active coupon. Codes are upper-cased; an empty or omitted code generates a random 10-character one. Each user can redeem a coupon once.

Create a coupon › Request Body

credit_nano
​integer · int64 · min: 1 · max: 10000000000000 · required

Credit granted per redemption, in nano-USD (1 USD = 1_000_000_000); at most $10,000.

code
​string | null · pattern: ^[A-Za-z0-9_-]{4,32}…

4-32 letters, digits, - or _. Empty generates one.

max_redemptions
​integer | null · min: 1 · max: 1000000

Total redemptions allowed; null for unlimited.

expires_at
​string | null · date-time

Must be in the future; null never expires.

description
​string · maxLength: 200
Default:

Create a coupon › Responses

The new coupon.

id
​string · uuid · required
code
​string · required
credit_nano
​integer · int64 · required

Credit per redemption, nano-USD (1 USD = 1_000_000_000).

max_redemptions
​integer | null · required

null = unlimited.

redeemed_count
​integer · required
expires_at
​string | null · date-time · required
is_active
​boolean · required
description
​string · required
created_by_email
​string | null · required
created_at
​string · date-time · required

Update a coupon

PUT
https://ai.brandkamu.id/api/admin
/coupons/{id}

Replaces the coupon's editable fields (the code can't change). max_redemptions and expires_at are always written, so omitting them clears them (unlimited / never expires). An active coupon's expiry must be in the future. Set is_active: false to turn a coupon off.

Update a coupon › path Parameters

id
​string · uuid · required

Coupon id.

Update a coupon › Request Body

credit_nano
​integer · int64 · min: 1 · max: 10000000000000 · required

Credit per redemption in nano-USD.

is_active
​boolean · required
max_redemptions
​integer | null · min: 1 · max: 1000000
expires_at
​string | null · date-time
description
​string · maxLength: 200
Default:

Update a coupon › Responses

The updated coupon.

id
​string · uuid · required
code
​string · required
credit_nano
​integer · int64 · required

Credit per redemption, nano-USD (1 USD = 1_000_000_000).

max_redemptions
​integer | null · required

null = unlimited.

redeemed_count
​integer · required
expires_at
​string | null · date-time · required
is_active
​boolean · required
description
​string · required
created_by_email
​string | null · required
created_at
​string · date-time · required

Delete a coupon

DELETE
https://ai.brandkamu.id/api/admin
/coupons/{id}

Deletes a coupon that was never redeemed. A redeemed coupon can't be deleted (400); deactivate it instead.

Delete a coupon › path Parameters

id
​string · uuid · required

Coupon id.

Delete a coupon › Responses

Done.

ok
​boolean · const · required
Const value:

List a coupon's redemptions

GET
https://ai.brandkamu.id/api/admin
/coupons/{id}/redemptions

Who redeemed the coupon, newest first. An unknown coupon id returns an empty list.

List a coupon's redemptions › path Parameters

id
​string · uuid · required

Coupon id.

List a coupon's redemptions › query Parameters

limit
​integer · min: 1 · max: 200

Page size (clamped to 1-200).

Default: 50
offset
​integer · min: 0

Rows to skip.

Default: 0

List a coupon's redemptions › Responses

A page of redemptions.

​object[] · required
total
​integer · required