Promotion Codes
Retrieve a list of promotion codes
Required scope: promotion-codes:read
Organization authorization: supported
query Parameters
pagepage number to retrieve (starts with 0)
perPagenumber of items per page (between 1 and 100, default 10)
operatorIdAllows filtering promotion codes by operatorId.
*Note:*The operatorId must be in the consumer’s operatorIds or, if empty, belong to the organization’s sub-operators.
typeAllows filtering promotion codes by promotion code type.
codePrefixReturns only codes starting with this prefix, which lists one bulk-created batch whose codes share it.
includeDeletedIncludes deleted resources in the response
Retrieve a list of promotion codes › Responses
Promotion codes retrieved successfully
Create a promotion code
Required scope: promotion-codes:write
Organization authorization: supported
Credit promotion codes
Set type to credit to deposit currency into the driver's wallet instead of applying a discount:
amountis a currency amount, not a percentage.- The code is single-use.
maxUsesCountmust be 1 or omitted; a higher value is rejected with 422. - One code is created per call. To create many single-use codes at once, use
POST /promotion-codes/bulk. creditmust be enabled for your operator, otherwise the request is rejected with 422.- Your operator wallet is debited when a driver redeems the code, not when the code is created.
Create a promotion code › Request Body
nameName of the promotion code
code^[a-z0-9]+(?:-[a-z0-… · requiredUnique code string. Must be lowercase alphanumeric, optionally hyphen-separated (e.g. summer-2025).
amountPercentage off for the discount types (max 100), or the currency amount deposited into the driver's wallet for credit (max 500). The cap is enforced per type by the server, so a percentage type above 100 is rejected with 422 even though the schema maximum is 500.
descriptionDescription of the promotion code
maxUsesCountMaximum number of times the code can be used. For credit this must be 1 or omitted — a higher value is rejected with 422, and omitting it creates the code as single-use.
startAtWhen the promotion code becomes active (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
endAtWhen the promotion code expires (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
typeWhat the code gives the driver.
ongoing-charge-discount-percentage— a percentage off each charge.charge-package-discount-percentage— a percentage off a charge package.credit— depositsamountas currency into the driver's wallet instead of applying any discount. Must be enabled for your operator.
userIdUser ID to limit this code to a specific user
maxDiscountAmountCap on the total discount a single driver can accumulate from this code. Once a driver reaches it the code stops discounting for them; the code stays usable for everyone else. Ignored for credit. Omit to set no cap.
selectedTeamIdsTeam IDs the promotion code is restricted to. Omit or pass an empty array to leave the code unrestricted.
amountKwhkWh allowance the discount covers per budget period. Ignored for credit, and must be enabled for your operator. Omit or pass null for no kWh cap.
budgetPeriodTypecalendar-monthReset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap. Ignored for credit.
includeHomeChargingWhether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.
selectedListIdsList IDs the promotion code is restricted to. Omit or pass an empty array to leave the code unrestricted.
maxChargeUsesCountMax charges per driver eligible for the discount after redeeming. Omit to set no limit.
Create a promotion code › Responses
Promotion code created
idId of the promotion code
codePromotion code
descriptionDescription of the promotion code
amountAmount associated with the promotion code
amountFormattedFormatted amount associated with the promotion code
typeType of the promotion code
nameName of the promotion code
maxUsesCountMaximum number of times the code can be used
usesCountNumber of times the code has been used
usableWhether the promotion code is currently usable
The operator to this promotion code is associated
createdAtCreation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
updatedAtUpdate timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
deletedAtSoft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
startAtStart timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
endAtEnd timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
userIdUser ID this code is scoped to, if any
maxDiscountAmountCap on the total discount a single driver can accumulate from this code. Null when no cap is set.
selectedTeamIdsTeam IDs the promotion code is restricted to. Empty when the code is not team-restricted.
amountKwhkWh allowance the discount covers per budget period. Null means no kWh cap.
budgetPeriodTypeReset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.
includeHomeChargingWhether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.
selectedListIdsList IDs the promotion code is restricted to. Empty when the code is not list-restricted.
The redeem deeplinks for this code. Null when the code has no meaningful deeplink.
Issue many single-use credit promotion codes
Required scope: promotion-codes:write
Organization authorization: supported
Creates one single-use credit code per string in codes, for handing a credit to a large group of drivers as one code each rather than a shared code. You choose the codes, so they can follow your own naming scheme. Up to 5000 per request; issue a larger run as several requests.
- The response carries the id of every code created.
GET /promotion-codes?codePrefix=lists a batch again if the codes share a prefix. - Retrying is safe. A replayed request finds every code already taken, so it creates nothing new and returns them all in
skippedExistingCodes. - Codes are unique across all operators. One already taken is reported in
skippedExistingCodesrather than failing the whole batch, so check that list and reissue those codes under new strings. - Set
startAtin the future to issue the batch inactive, then activate a code withPATCH /promotion-codes/{id}when it is sold. Until then it cannot be redeemed. creditmust be enabled for your operator, otherwise the request is rejected with 422.- Your operator wallet is debited as each code is redeemed, not when the batch is created.
Issue many single-use credit promotion codes › Request Body
nameName shared by every code in the batch
codesThe codes to create, chosen by you, up to 5000 per request. Each must be lowercase alphanumeric with optional hyphens, at most 64 characters, and unique within the request. A shared prefix is worth keeping: pass it to GET /promotion-codes?codePrefix= to list the batch again.
amountCurrency amount deposited into the driver's wallet when a code is redeemed (max 500). Every code in the batch carries the same amount and is single-use — send one request per amount.
descriptionDescription shared by every code in the batch
startAtWhen the codes become redeemable (ISO8601: yyyy-MM-ddTHH:mm:ssZ). Set a future date to issue the batch inactive — a code stays unredeemable until this passes, so vouchers can be printed and distributed before they carry value, then activated per code with PATCH /promotion-codes/{id} when one is sold.
endAtWhen the codes expire (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
Issue many single-use credit promotion codes › Responses
Promotion codes created
The codes created by this request
skippedExistingCodesThe requested codes that already existed and were therefore not created again. Codes are unique across all operators, so a code held elsewhere is reported here instead of failing the batch. A replayed request returns an empty created list and every code here, so retrying is safe.
Redeem a promotion code
Required scope: promotion-codes:write
Organization authorization: supported
Redeem a promotion code › Request Body
promotionCodeIdPromotion code id
userIdId of the user redeeming the code
teamIdId of the team (if applicable)
Redeem a promotion code › Responses
Promotion code redeemed
promotionCodeIdId of the promotion code
userIdId of user using the promotion code
statusStatus of the promotion code
Validate a promotion code
Validates that the given code is unique and can be used for a new promotion. Required scope: promotion-codes:read
Organization authorization: supported
Validate a promotion code › Request Body
codeThe promotion code to validate
Validate a promotion code › Responses
Promotion code is valid
Retrieve a single promotion code
Required scope: promotion-codes:read
Organization authorization: supported
path Parameters
idRetrieve a single promotion code › Responses
Promotion code retrieved successfully
idId of the promotion code
codePromotion code
descriptionDescription of the promotion code
amountAmount associated with the promotion code
amountFormattedFormatted amount associated with the promotion code
typeType of the promotion code
nameName of the promotion code
maxUsesCountMaximum number of times the code can be used
usesCountNumber of times the code has been used
usableWhether the promotion code is currently usable
The operator to this promotion code is associated
createdAtCreation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
updatedAtUpdate timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
deletedAtSoft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
startAtStart timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
endAtEnd timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
userIdUser ID this code is scoped to, if any
maxDiscountAmountCap on the total discount a single driver can accumulate from this code. Null when no cap is set.
selectedTeamIdsTeam IDs the promotion code is restricted to. Empty when the code is not team-restricted.
amountKwhkWh allowance the discount covers per budget period. Null means no kWh cap.
budgetPeriodTypeReset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.
includeHomeChargingWhether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.
selectedListIdsList IDs the promotion code is restricted to. Empty when the code is not list-restricted.
The redeem deeplinks for this code. Null when the code has no meaningful deeplink.
Update a promotion code
Required scope: promotion-codes:write
Organization authorization: supported
path Parameters
idUpdate a promotion code › Request Body
nameName of the promotion code
code^[a-z0-9]+(?:-[a-z0-…Unique code string. Cannot be changed once used. Must be lowercase alphanumeric, optionally hyphen-separated.
descriptionDescription of the promotion code
amountDiscount amount or percentage. Cannot be changed once the code has been used.
maxUsesCountMaximum number of times the code can be used
startAtWhen the promotion code becomes active (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
endAtWhen the promotion code expires (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
maxDiscountAmountCap on the total discount a single driver can accumulate from this code. Once a driver reaches it the code stops discounting for them; the code stays usable for everyone else. Ignored for credit. Omit to leave unchanged.
selectedTeamIdsTeam IDs the promotion code is restricted to. Pass an empty array to clear restrictions.
amountKwhkWh allowance the discount covers per budget period. Ignored for credit, and must be enabled for your operator.
budgetPeriodTypecalendar-monthReset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap. Ignored for credit.
includeHomeChargingWhether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.
selectedListIdsList IDs the promotion code is restricted to. Pass an empty array to clear restrictions.
maxChargeUsesCountMax charges per driver eligible for the discount after redeeming. Omit to leave unchanged.
Update a promotion code › Responses
Promotion code updated
idId of the promotion code
codePromotion code
descriptionDescription of the promotion code
amountAmount associated with the promotion code
amountFormattedFormatted amount associated with the promotion code
typeType of the promotion code
nameName of the promotion code
maxUsesCountMaximum number of times the code can be used
usesCountNumber of times the code has been used
usableWhether the promotion code is currently usable
The operator to this promotion code is associated
createdAtCreation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
updatedAtUpdate timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
deletedAtSoft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
startAtStart timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
endAtEnd timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
userIdUser ID this code is scoped to, if any
maxDiscountAmountCap on the total discount a single driver can accumulate from this code. Null when no cap is set.
selectedTeamIdsTeam IDs the promotion code is restricted to. Empty when the code is not team-restricted.
amountKwhkWh allowance the discount covers per budget period. Null means no kWh cap.
budgetPeriodTypeReset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.
includeHomeChargingWhether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.
selectedListIdsList IDs the promotion code is restricted to. Empty when the code is not list-restricted.
The redeem deeplinks for this code. Null when the code has no meaningful deeplink.