Monta
Monta API

Promotion Codes


Retrieve a list of promotion codes

GET
https://partner-api.monta.com
/api/v1/promotion-codes

Required scope: promotion-codes:read
Organization authorization: supported

Retrieve a list of promotion codes › query Parameters

page
​integer · int32

page number to retrieve (starts with 0)

Default: 0
perPage
​integer · int32

number of items per page (between 1 and 100, default 10)

Default: 10
operatorId
​integer | null · int64

Allows 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.

Example: 1
type
​string · enum

Allows filtering promotion codes by promotion code type.

Enum values:
credit
ongoing-charge-discount-percentage
charge-package-discount-percentage
charge-package-price-group
Example: 1
codePrefix
​string | null

Returns only codes starting with this prefix, which lists one bulk-created batch whose codes share it.

Example: logista
includeDeleted
​boolean

Includes deleted resources in the response

Example: true
Default: false

Retrieve a list of promotion codes › Responses

Promotion codes retrieved successfully

​PromotionCode_1[] · required
​MontaPage.Meta · required

Create a promotion code

POST
https://partner-api.monta.com
/api/v1/promotion-codes

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:

  • amount is a currency amount, not a percentage.
  • The code is single-use. maxUsesCount must 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.
  • credit must 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

name
​string · minLength: 1 · required

Name of the promotion code

Example: Summer Sale
code
​string · pattern: ^[a-z0-9]+(?:-[a-z0-… · required

Unique code string. Must be lowercase alphanumeric, optionally hyphen-separated (e.g. summer-2025).

Example: summer-2025
amount
​number · double · min: 0.1 · max: 500 · required

Percentage 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.

Example: 25
description
​string | null

Description of the promotion code

Example: 25% off all charges this summer
maxUsesCount
​integer | null · int32 · min: 1

Maximum 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.

Example: 100
startAt
​string | null · date-time

When the promotion code becomes active (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
endAt
​string | null · date-time

When the promotion code expires (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
type
​string · enum

What 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 — deposits amount as currency into the driver's wallet instead of applying any discount. Must be enabled for your operator.
Enum values:
credit
ongoing-charge-discount-percentage
charge-package-discount-percentage
charge-package-price-group
Example: credit
userId
​integer | null · int64

User ID to limit this code to a specific user

Example: 42
maxDiscountAmount
​number | null · min: 0.01 · max: 999999.99

Cap 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.

Example: 500
selectedTeamIds
​array | null

Team IDs the promotion code is restricted to. Omit or pass an empty array to leave the code unrestricted.

Example: [1,2,3]
amountKwh
​number | null · min: 0.01

kWh 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.

Example: 300
budgetPeriodType
​string | null · pattern: calendar-month

Reset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap. Ignored for credit.

Example: calendar-month
includeHomeCharging
​boolean | null

Whether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.

Example: true
selectedListIds
​array | null

List IDs the promotion code is restricted to. Omit or pass an empty array to leave the code unrestricted.

Example: [1,2,3]
maxChargeUsesCount
​integer | null · int32 · min: 1 · max: 10000

Max charges per driver eligible for the discount after redeeming. Omit to set no limit.

Example: 3

Create a promotion code › Responses

Promotion code created

id
​integer · int64 · required

Id of the promotion code

code
​string · required

Promotion code

Example: summer2025
description
​string | null · required

Description of the promotion code

Example: summer sale
amount
​number · double · required

Amount associated with the promotion code

Example: 100
amountFormatted
​string · required

Formatted amount associated with the promotion code

Example: $100.00
type
​string | object · enum · required

Type of the promotion code

Enum values:
credit
ongoing-charge-discount-percentage
charge-package-discount-percentage
charge-package-price-group
name
​string | null

Name of the promotion code

Example: Summer Sale
maxUsesCount
​integer | null · int32

Maximum number of times the code can be used

Example: 100
usesCount
​integer | null · int32

Number of times the code has been used

Example: 5
usable
​boolean | null

Whether the promotion code is currently usable

​object

The operator to this promotion code is associated

Example: 1L
createdAt
​string | null · date-time

Creation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
updatedAt
​string | null · date-time

Update timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
deletedAt
​string | null · date-time

Soft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
startAt
​string | null · date-time

Start timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
endAt
​string | null · date-time

End timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
userId
​integer | null · int64

User ID this code is scoped to, if any

maxDiscountAmount
​number | null

Cap on the total discount a single driver can accumulate from this code. Null when no cap is set.

Example: 500
selectedTeamIds
​integer[]

Team IDs the promotion code is restricted to. Empty when the code is not team-restricted.

Example: [1,2,3]
amountKwh
​number | null

kWh allowance the discount covers per budget period. Null means no kWh cap.

Example: 300
budgetPeriodType
​string | null

Reset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.

Example: calendar-month
includeHomeCharging
​boolean | null

Whether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.

Example: true
selectedListIds
​integer[]

List IDs the promotion code is restricted to. Empty when the code is not list-restricted.

Example: [1,2,3]
​object

The redeem deeplinks for this code. Null when the code has no meaningful deeplink.


Issue many single-use credit promotion codes

POST
https://partner-api.monta.com
/api/v1/promotion-codes/bulk

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 skippedExistingCodes rather than failing the whole batch, so check that list and reissue those codes under new strings.
  • Set startAt in the future to issue the batch inactive, then activate a code with PATCH /promotion-codes/{id} when it is sold. Until then it cannot be redeemed.
  • credit must 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

name
​string · minLength: 1 · required

Name shared by every code in the batch

Example: Newsagent voucher
codes
​string[] · minItems: 1 · maxItems: 5000 · required

The 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.

Example: ["logista-a7f3k2","logista-b1c9d4"]
amount
​number · double · min: 0.1 · max: 500 · required

Currency 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.

Example: 45
description
​string | null

Description shared by every code in the batch

Example: 45 EUR welcome credit
startAt
​string | null · date-time

When 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.

Example: 2030-01-01T00:00:00Z
endAt
​string | null · date-time

When the codes expire (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2026-12-31T23:59:59Z

Issue many single-use credit promotion codes › Responses

Promotion codes created

​CreatedPromotionCode[] · required

The codes created by this request

skippedExistingCodes
​string[] · required

The 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.

Example: []

Redeem a promotion code

POST
https://partner-api.monta.com
/api/v1/promotion-codes/redeem

Required scope: promotion-codes:write
Organization authorization: supported

Redeem a promotion code › Request Body

promotionCodeId
​integer · int64 · required

Promotion code id

Example: 1
userId
​integer · int64 · required

Id of the user redeeming the code

Example: 123
teamId
​integer | null · int64

Id of the team (if applicable)

Example: 456

Redeem a promotion code › Responses

Promotion code redeemed

promotionCodeId
​integer · int64 · required

Id of the promotion code

userId
​integer · int64 · required

Id of user using the promotion code

status
​string · enum · required

Status of the promotion code

Enum values:
active
scheduled
expired
inactive
used
other

Validate a promotion code

POST
https://partner-api.monta.com
/api/v1/promotion-codes/validate-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

code
​string · minLength: 1 · required

The promotion code to validate

Example: SUMMER2024

Validate a promotion code › Responses

Promotion code is valid

No data returned

Retrieve a single promotion code

GET
https://partner-api.monta.com
/api/v1/promotion-codes/{id}

Required scope: promotion-codes:read
Organization authorization: supported

Retrieve a single promotion code › path Parameters

id
​integer · int64 · required

Retrieve a single promotion code › Responses

Promotion code retrieved successfully

id
​integer · int64 · required

Id of the promotion code

code
​string · required

Promotion code

Example: summer2025
description
​string | null · required

Description of the promotion code

Example: summer sale
amount
​number · double · required

Amount associated with the promotion code

Example: 100
amountFormatted
​string · required

Formatted amount associated with the promotion code

Example: $100.00
type
​string | object · enum · required

Type of the promotion code

Enum values:
credit
ongoing-charge-discount-percentage
charge-package-discount-percentage
charge-package-price-group
name
​string | null

Name of the promotion code

Example: Summer Sale
maxUsesCount
​integer | null · int32

Maximum number of times the code can be used

Example: 100
usesCount
​integer | null · int32

Number of times the code has been used

Example: 5
usable
​boolean | null

Whether the promotion code is currently usable

​object

The operator to this promotion code is associated

Example: 1L
createdAt
​string | null · date-time

Creation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
updatedAt
​string | null · date-time

Update timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
deletedAt
​string | null · date-time

Soft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
startAt
​string | null · date-time

Start timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
endAt
​string | null · date-time

End timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
userId
​integer | null · int64

User ID this code is scoped to, if any

maxDiscountAmount
​number | null

Cap on the total discount a single driver can accumulate from this code. Null when no cap is set.

Example: 500
selectedTeamIds
​integer[]

Team IDs the promotion code is restricted to. Empty when the code is not team-restricted.

Example: [1,2,3]
amountKwh
​number | null

kWh allowance the discount covers per budget period. Null means no kWh cap.

Example: 300
budgetPeriodType
​string | null

Reset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.

Example: calendar-month
includeHomeCharging
​boolean | null

Whether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.

Example: true
selectedListIds
​integer[]

List IDs the promotion code is restricted to. Empty when the code is not list-restricted.

Example: [1,2,3]
​object

The redeem deeplinks for this code. Null when the code has no meaningful deeplink.


Update a promotion code

PATCH
https://partner-api.monta.com
/api/v1/promotion-codes/{id}

Required scope: promotion-codes:write
Organization authorization: supported

Update a promotion code › path Parameters

id
​integer · int64 · required

Update a promotion code › Request Body

name
​string | null

Name of the promotion code

Example: Summer Sale
code
​string | null · pattern: ^[a-z0-9]+(?:-[a-z0-…

Unique code string. Cannot be changed once used. Must be lowercase alphanumeric, optionally hyphen-separated.

Example: summer-2025
description
​string | null

Description of the promotion code

Example: 25% off all charges this summer
amount
​number | null · double · min: 0.1 · max: 100

Discount amount or percentage. Cannot be changed once the code has been used.

Example: 25
maxUsesCount
​integer | null · int32 · min: 1

Maximum number of times the code can be used

Example: 100
startAt
​string | null · date-time

When the promotion code becomes active (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
endAt
​string | null · date-time

When the promotion code expires (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
maxDiscountAmount
​number | null · min: 0.01 · max: 999999.99

Cap 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.

Example: 500
selectedTeamIds
​array | null

Team IDs the promotion code is restricted to. Pass an empty array to clear restrictions.

Example: [1,2,3]
amountKwh
​number | null · min: 0.01

kWh allowance the discount covers per budget period. Ignored for credit, and must be enabled for your operator.

Example: 300
budgetPeriodType
​string | null · pattern: calendar-month

Reset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap. Ignored for credit.

Example: calendar-month
includeHomeCharging
​boolean | null

Whether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.

Example: true
selectedListIds
​array | null

List IDs the promotion code is restricted to. Pass an empty array to clear restrictions.

Example: [1,2,3]
maxChargeUsesCount
​integer | null · int32 · min: 1 · max: 10000

Max charges per driver eligible for the discount after redeeming. Omit to leave unchanged.

Example: 3

Update a promotion code › Responses

Promotion code updated

id
​integer · int64 · required

Id of the promotion code

code
​string · required

Promotion code

Example: summer2025
description
​string | null · required

Description of the promotion code

Example: summer sale
amount
​number · double · required

Amount associated with the promotion code

Example: 100
amountFormatted
​string · required

Formatted amount associated with the promotion code

Example: $100.00
type
​string | object · enum · required

Type of the promotion code

Enum values:
credit
ongoing-charge-discount-percentage
charge-package-discount-percentage
charge-package-price-group
name
​string | null

Name of the promotion code

Example: Summer Sale
maxUsesCount
​integer | null · int32

Maximum number of times the code can be used

Example: 100
usesCount
​integer | null · int32

Number of times the code has been used

Example: 5
usable
​boolean | null

Whether the promotion code is currently usable

​object

The operator to this promotion code is associated

Example: 1L
createdAt
​string | null · date-time

Creation timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
updatedAt
​string | null · date-time

Update timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
deletedAt
​string | null · date-time

Soft deletion timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
startAt
​string | null · date-time

Start timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
endAt
​string | null · date-time

End timestamp of the promotion code (ISO8601: yyyy-MM-ddTHH:mm:ssZ)

Example: 2022-05-22T09:30:03Z
userId
​integer | null · int64

User ID this code is scoped to, if any

maxDiscountAmount
​number | null

Cap on the total discount a single driver can accumulate from this code. Null when no cap is set.

Example: 500
selectedTeamIds
​integer[]

Team IDs the promotion code is restricted to. Empty when the code is not team-restricted.

Example: [1,2,3]
amountKwh
​number | null

kWh allowance the discount covers per budget period. Null means no kWh cap.

Example: 300
budgetPeriodType
​string | null

Reset window for the kWh allowance; calendar-month resets on the 1st, null means a lifetime cap.

Example: calendar-month
includeHomeCharging
​boolean | null

Whether the kWh allowance also covers charge points owned by the subscribing team, so home charging draws on the same allowance as public charging.

Example: true
selectedListIds
​integer[]

List IDs the promotion code is restricted to. Empty when the code is not list-restricted.

Example: [1,2,3]
​object

The redeem deeplinks for this code. Null when the code has no meaningful deeplink.


Delete a promotion code

DELETE
https://partner-api.monta.com
/api/v1/promotion-codes/{id}

Required scope: promotion-codes:delete
Organization authorization: supported

Delete a promotion code › path Parameters

id
​integer · int64 · required

Delete a promotion code › Responses

Promotion code deleted

No data returned