Extole Rewards API

The Rewards API from Extole — 13 operation(s) for rewards.

OpenAPI Specification

extole-rewards-api-openapi.yml Raw ↑
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 Rewards 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: Rewards
paths:
  /v2/rewards:
    get:
      description: Returns reward records for the client matching the specified query parameters.
      operationId: listRewards
      parameters:
      - description: Filter by reward state(s). Repeat for multiple values (e.g. `EARNED`, `FULFILLED`).
        in: query
        name: state
        schema:
          type: string
      - description: Filter by Extole reward supplier id(s). Repeat for multiple values.
        in: query
        name: reward_supplier_id
        schema:
          type: string
      - description: Filter by partner-assigned reward supplier id(s). Repeat for multiple values.
        in: query
        name: partner_reward_supplier_id
        schema:
          type: string
      - description: Filter by Extole person id(s). Repeat for multiple values.
        in: query
        name: person_id
        schema:
          type: string
      - description: Filter by Extole action id(s). Repeat for multiple values.
        in: query
        name: action_id
        schema:
          type: string
      - description: Filter by root event id(s). Repeat for multiple values.
        in: query
        name: root_event_id
        schema:
          type: string
      - description: Filter by partner-assigned reward id(s). Repeat for multiple values.
        in: query
        name: partner_reward_id
        schema:
          type: string
      - description: Filter by reward type(s). Repeat for multiple values.
        in: query
        name: reward_type
        schema:
          type: string
      - description: When true (default), include only rewards that were successfully fulfilled.
        in: query
        name: success_only
        schema:
          type: boolean
      - description: ISO 8601 time interval to restrict results to a date range (e.g. `P30D` for last 30 days).
        in: query
        name: time_interval
        schema:
          type: string
      - description: Maximum number of rewards to return. Defaults to 100.
        in: query
        name: limit
        schema:
          format: int32
          type: integer
      - description: Number of rewards to skip for pagination. Defaults to 0.
        in: query
        name: offset
        schema:
          format: int32
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RewardResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                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'
                period_count_invalid:
                  $ref: '#/components/examples/period_count_invalid'
                period_not_supported:
                  $ref: '#/components/examples/period_not_supported'
                reward_state_invalid:
                  $ref: '#/components/examples/reward_state_invalid'
                reward_type_not_supported:
                  $ref: '#/components/examples/reward_type_not_supported'
                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: List rewards
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v2/rewards/state_summary:
    get:
      description: Returns aggregate state counts for rewards on this client (e.g. earned, fulfilled, cancelled).
      operationId: getRewardStateSummary
      parameters:
      - description: Time period for grouping (e.g. `DAY`, `WEEK`, `MONTH`).
        in: query
        name: period
        schema:
          enum:
          - DAY
          - MONTH
          - WEEK
          type: string
      - description: Number of periods to include in the summary.
        in: query
        name: period_count
        schema:
          type: string
      - description: End of the date range for the summary.
        in: query
        name: end_date
        schema:
          $ref: '#/components/schemas/ZonedDateTime'
      - description: When true, include only rewards that were successfully fulfilled.
        in: query
        name: success_only
        schema:
          type: boolean
      - description: Filter by one or more reward supplier ids (repeat the parameter for multiple values).
        in: query
        name: reward_supplier_id
        schema:
          type: string
      - description: Filter by one or more reward types (repeat the parameter for multiple values).
        in: query
        name: reward_type
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RewardStateSummaryResponse'
                type: array
          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'
                reward_state_invalid:
                  $ref: '#/components/examples/reward_state_invalid'
                reward_type_not_supported:
                  $ref: '#/components/examples/reward_type_not_supported'
                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: Get reward state summary
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v2/rewards/{reward_id}:
    get:
      description: Returns the reward record for the specified reward id, including its current state and history.
      operationId: getReward
      parameters:
      - description: Extole-assigned unique identifier for the reward.
        in: path
        name: reward_id
        required: true
        schema:
          type: string
      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: Get a reward
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
    put:
      description: Updates attributes on the specified reward record. Returns the updated reward.
      operationId: updateReward
      parameters:
      - description: Extole-assigned unique identifier for the reward.
        in: path
        name: reward_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            example:
              sandbox: sandbox
            schema:
              $ref: '#/components/schemas/RewardUpdateRequest'
        description: Reward update request.
        required: true
      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'
                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_supplier_not_found:
                  $ref: '#/components/examples/reward_supplier_not_found'
                sandbox_not_found:
                  $ref: '#/components/examples/sandbox_not_found'
              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'
                person_not_found:
                  $ref: '#/components/examples/person_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: Update a reward
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v2/rewards/{reward_id}/cancels:
    get:
      description: Returns the cancellation history for the specified reward.
      operationId: getRewardCancels
      parameters:
      - description: Extole-assigned unique identifier for the reward.
        in: path
        name: reward_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/CanceledRewardStateResponse'
                type: array
          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: Get reward cancels
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v2/rewards/{reward_id}/fails:
    get:
      description: Returns the fulfilment failure history for the specified reward.
      operationId: getRewardFails
      parameters:
      - description: Extole-assigned unique identifier for the reward.
        in: path
        name: reward_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/FailedRewardStateResponse'
                type: array
          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: Get reward fails
      tags:
      - Rewards
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v2/rewards/{reward_id}/fulfillments:
    get:
      description: Returns the fulfilment records for the specified reward.
      operationId: getRewardFulfillments
      parameters:
      - description: Extole-assigned unique identifier for the reward.
        in: path
        name: reward_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/FulfilledRewardStateResponse'
                type: array
          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/RestExceptio

# --- truncated at 32 KB (86 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-rewards-api-openapi.yml