Extole Reward Suppliers API
The Reward Suppliers API from Extole — 21 operation(s) for reward suppliers.
The Reward Suppliers API from Extole — 21 operation(s) for reward suppliers.
openapi: 3.0.1
info:
description: 'Consumer-to-Extole integration endpoints: consumer event submission, zone rendering, profile management, and SDK-backing operations for browser and native app environments.'
title: Integration API - Consumer to Extole Audiences Reward Suppliers API
version: '1.0'
servers:
- description: Production
url: https://{brand}.extole.io
variables:
brand:
default: yourcompany
description: Your Extole client subdomain (e.g. 'mycompany' for mycompany.extole.io)
security:
- HEADER: []
- QUERY: []
- COOKIE: []
tags:
- name: Reward Suppliers
paths:
/v2/rewards/custom-reward/{reward_id}/failed:
post:
description: Marks the custom reward as failed, recording a fulfilment failure.
operationId: failCustomReward
parameters:
- in: path
name: reward_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
message: message
schema:
$ref: '#/components/schemas/FailedRewardRequest'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RewardResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
period_count_invalid:
$ref: '#/components/examples/period_count_invalid'
period_not_supported:
$ref: '#/components/examples/period_not_supported'
retry_claimed_reward_not_allowed:
$ref: '#/components/examples/retry_claimed_reward_not_allowed'
reward_illegal_state_transition:
$ref: '#/components/examples/reward_illegal_state_transition'
reward_in_not_retryable_state:
$ref: '#/components/examples/reward_in_not_retryable_state'
reward_not_found:
$ref: '#/components/examples/reward_not_found'
reward_retry_not_supported:
$ref: '#/components/examples/reward_retry_not_supported'
reward_state_invalid:
$ref: '#/components/examples/reward_state_invalid'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
reward_type_not_supported:
$ref: '#/components/examples/reward_type_not_supported'
sandbox_not_found:
$ref: '#/components/examples/sandbox_not_found'
time_interval_invalid:
$ref: '#/components/examples/time_interval_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Mark custom reward failed
tags:
- Reward Suppliers
x-extole-bundle: integration-server-to-extole
x-extole-visibility: visible
/v2/rewards/custom-reward/{reward_id}/fulfilled:
post:
description: Marks the custom reward as fulfilled, signalling that the client system has completed fulfilment.
operationId: fulfillCustomReward
parameters:
- in: path
name: reward_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
cost_code: cost_code
face_value: 1.0
face_value_type: AUD
message: message
partner_reward_id: partner_reward_id
success: true
schema:
$ref: '#/components/schemas/FulfilledRewardRequest'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RewardResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
period_count_invalid:
$ref: '#/components/examples/period_count_invalid'
period_not_supported:
$ref: '#/components/examples/period_not_supported'
retry_claimed_reward_not_allowed:
$ref: '#/components/examples/retry_claimed_reward_not_allowed'
reward_illegal_state_transition:
$ref: '#/components/examples/reward_illegal_state_transition'
reward_in_not_retryable_state:
$ref: '#/components/examples/reward_in_not_retryable_state'
reward_not_found:
$ref: '#/components/examples/reward_not_found'
reward_retry_not_supported:
$ref: '#/components/examples/reward_retry_not_supported'
reward_state_invalid:
$ref: '#/components/examples/reward_state_invalid'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
reward_type_not_supported:
$ref: '#/components/examples/reward_type_not_supported'
sandbox_not_found:
$ref: '#/components/examples/sandbox_not_found'
time_interval_invalid:
$ref: '#/components/examples/time_interval_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Mark custom reward fulfilled
tags:
- Reward Suppliers
x-extole-bundle: integration-server-to-extole
x-extole-visibility: visible
/v2/rewards/custom-reward/{reward_id}/fulfilled_and_sent:
post:
description: Marks the custom reward as fulfilled and sent to the participant.
operationId: fulfillAndSendCustomReward
parameters:
- in: path
name: reward_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
cost_code: cost_code
email: email
face_value: 1.0
face_value_type: AUD
message: message
partner_reward_id: partner_reward_id
partner_reward_sent_id: partner_reward_sent_id
schema:
$ref: '#/components/schemas/FulfilledAndSentRewardRequest'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RewardResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
period_count_invalid:
$ref: '#/components/examples/period_count_invalid'
period_not_supported:
$ref: '#/components/examples/period_not_supported'
retry_claimed_reward_not_allowed:
$ref: '#/components/examples/retry_claimed_reward_not_allowed'
reward_illegal_state_transition:
$ref: '#/components/examples/reward_illegal_state_transition'
reward_in_not_retryable_state:
$ref: '#/components/examples/reward_in_not_retryable_state'
reward_not_found:
$ref: '#/components/examples/reward_not_found'
reward_retry_not_supported:
$ref: '#/components/examples/reward_retry_not_supported'
reward_state_invalid:
$ref: '#/components/examples/reward_state_invalid'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
reward_type_not_supported:
$ref: '#/components/examples/reward_type_not_supported'
sandbox_not_found:
$ref: '#/components/examples/sandbox_not_found'
time_interval_invalid:
$ref: '#/components/examples/time_interval_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Mark custom reward fulfilled and sent
tags:
- Reward Suppliers
x-extole-bundle: integration-server-to-extole
x-extole-visibility: visible
/v2/rewards/custom-reward/{reward_id}/redeemed:
post:
description: Marks the custom reward as redeemed by the participant.
operationId: redeemCustomReward
parameters:
- in: path
name: reward_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
message: message
partner_reward_redeem_id: partner_reward_redeem_id
schema:
$ref: '#/components/schemas/RedeemedRewardRequest'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RewardResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
period_count_invalid:
$ref: '#/components/examples/period_count_invalid'
period_not_supported:
$ref: '#/components/examples/period_not_supported'
retry_claimed_reward_not_allowed:
$ref: '#/components/examples/retry_claimed_reward_not_allowed'
reward_illegal_state_transition:
$ref: '#/components/examples/reward_illegal_state_transition'
reward_in_not_retryable_state:
$ref: '#/components/examples/reward_in_not_retryable_state'
reward_not_found:
$ref: '#/components/examples/reward_not_found'
reward_retry_not_supported:
$ref: '#/components/examples/reward_retry_not_supported'
reward_state_invalid:
$ref: '#/components/examples/reward_state_invalid'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
reward_type_not_supported:
$ref: '#/components/examples/reward_type_not_supported'
sandbox_not_found:
$ref: '#/components/examples/sandbox_not_found'
time_interval_invalid:
$ref: '#/components/examples/time_interval_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Mark custom reward redeemed
tags:
- Reward Suppliers
x-extole-bundle: integration-server-to-extole
x-extole-visibility: visible
/v2/rewards/custom-reward/{reward_id}/sent:
post:
description: Marks the custom reward as sent to the participant.
operationId: sendCustomReward
parameters:
- in: path
name: reward_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
message: message
partner_reward_sent_id: partner_reward_sent_id
success: true
schema:
$ref: '#/components/schemas/SentRewardRequest'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RewardResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
period_count_invalid:
$ref: '#/components/examples/period_count_invalid'
period_not_supported:
$ref: '#/components/examples/period_not_supported'
retry_claimed_reward_not_allowed:
$ref: '#/components/examples/retry_claimed_reward_not_allowed'
reward_illegal_state_transition:
$ref: '#/components/examples/reward_illegal_state_transition'
reward_in_not_retryable_state:
$ref: '#/components/examples/reward_in_not_retryable_state'
reward_not_found:
$ref: '#/components/examples/reward_not_found'
reward_retry_not_supported:
$ref: '#/components/examples/reward_retry_not_supported'
reward_state_invalid:
$ref: '#/components/examples/reward_state_invalid'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
reward_type_not_supported:
$ref: '#/components/examples/reward_type_not_supported'
sandbox_not_found:
$ref: '#/components/examples/sandbox_not_found'
time_interval_invalid:
$ref: '#/components/examples/time_interval_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Mark custom reward sent
tags:
- Reward Suppliers
x-extole-bundle: integration-server-to-extole
x-extole-visibility: visible
/v2/reward-suppliers/manual-coupons/{reward_supplier_id}/coupons:
get:
description: Downloads the current coupon pool for the manual coupon supplier as a JSON response.
operationId: downloadManualCoupons
parameters:
- in: path
name: reward_supplier_id
required: true
schema:
type: string
- in: query
name: operation_id
schema:
nullable: true
type: string
- in: query
name: issued
schema:
nullable: true
type: boolean
- in: query
name: include_expired
schema:
nullable: true
type: boolean
- in: query
name: limit
schema:
nullable: true
type: string
- in: query
name: offset
schema:
nullable: true
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ManualCouponRewardSupplierDownloadCouponsResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
invalid_expiration_date:
$ref: '#/components/examples/invalid_expiration_date'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_limit:
$ref: '#/components/examples/invalid_limit'
invalid_offset:
$ref: '#/components/examples/invalid_offset'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
max_fetch_size_1000:
$ref: '#/components/examples/max_fetch_size_1000'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
not_an_upload_operation:
$ref: '#/components/examples/not_an_upload_operation'
operation_id_missing:
$ref: '#/components/examples/operation_id_missing'
operation_not_found:
$ref: '#/components/examples/operation_not_found'
partner_reward_supplier_id_invalid:
$ref: '#/components/examples/partner_reward_supplier_id_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unauthorized
'402':
content:
application/json:
examples:
payment_required:
$ref: '#/components/examples/payment_required'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Payment Required
'403':
content:
application/json:
examples:
access_denied:
$ref: '#/components/examples/access_denied'
method_unauthorized:
$ref: '#/components/examples/method_unauthorized'
missing_access_token:
$ref: '#/components/examples/missing_access_token'
reward_supplier_not_found:
$ref: '#/components/examples/reward_supplier_not_found'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Forbidden
'415':
content:
application/json:
examples:
unsupported_media_type:
$ref: '#/components/examples/unsupported_media_type'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Unsupported Media Type
'429':
content:
application/json:
examples:
too_many_requests:
$ref: '#/components/examples/too_many_requests'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Too Many Requests
summary: Download manual coupons
tags:
- Reward Suppliers
x-extole-bundle: management
x-extole-visibility: visible
post:
description: Uploads a coupon code file (CSV or text) to the manual coupon supplier's pool.
operationId: uploadManualCouponsFile
parameters:
- in: path
name: reward_supplier_id
required: true
schema:
type: string
- in: query
name: allow_restricted_characters
schema:
type: boolean
- in: query
name: allow_expired
schema:
type: boolean
- in: query
name: discard_duplicated
schema:
type: boolean
- in: query
name: default_expiry_date
schema:
$ref: '#/components/schemas/ZonedDateTime'
requestBody:
content:
multipart/form-data:
example:
file:
creationDate: '2025-10-24T09:00:00.000Z'
fileName: fileName
modificationDate: '2025-10-24T09:00:00.000Z'
name: name
parameters:
parameters_key: parameters_key
readDate: '2025-10-24T09:00:00.000Z'
size: 1
type: type
schema:
properties:
file:
$ref: '#/components/schemas/FormDataContentDisposition'
type: object
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ManualCouponRewardSupplierOperationResponse'
description: Successful response
'400':
content:
application/json:
examples:
binding_error:
$ref: '#/components/examples/binding_error'
corrupted_uploaded_file:
$ref: '#/components/examples/corrupted_uploaded_file'
coupon_code_blank:
$ref: '#/components/examples/coupon_code_blank'
coupon_code_invalid:
$ref: '#/components/examples/coupon_code_invalid'
coupon_code_too_long:
$ref: '#/components/examples/coupon_code_too_long'
coupon_filename_empty:
$ref: '#/components/examples/coupon_filename_empty'
coupons_concurrent_upload:
$ref: '#/components/examples/coupons_concurrent_upload'
coupons_missing:
$ref: '#/components/examples/coupons_missing'
duplicate_coupon_code_in_list:
$ref: '#/components/examples/duplicate_coupon_code_in_list'
existing_coupon_code:
$ref: '#/components/examples/existing_coupon_code'
invalid_expiration_date:
$ref: '#/components/examples/invalid_expiration_date'
invalid_file_line:
$ref: '#/components/examples/invalid_file_line'
invalid_json:
$ref: '#/components/examples/invalid_json'
invalid_parameter:
$ref: '#/components/examples/invalid_parameter'
missing_request_body:
$ref: '#/components/examples/missing_request_body'
partner_reward_supplier_id_invalid:
$ref: '#/components/examples/partner_reward_supplier_id_invalid'
schema:
$ref: '#/components/schemas/RestExceptionResponse'
description: Bad Request
'401':
content:
application/json:
examples:
method_unauthorized:
$ref: '#/components/e
# --- truncated at 32 KB (416 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-reward-suppliers-api-openapi.yml