Clickwise Postbacks API

The Postbacks API from Clickwise — 4 operation(s) for postbacks.

GitHub OpenAPI

Operations 5

GET /postback/ Conversion postback (webhook) configuration #
PUT /postback/ Not available with an API key: set the postback URL in the portal #
POST /postback/secret/ Not available with an API key: rotate the secret in the portal #
POST /postback/test/ Send a signed test event #
GET /postback/deliveries/ Recent postback delivery attempts #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/clickwise-net:clickwise-net-postbacks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

clickwise-net-postbacks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Clickwise Net Postbacks API
  version: '1.1'
  contact:
    name: Clickwise integrations
    email: partnerships@clickwise.net
  description: 'Operations tagged Postbacks across 2 of this provider''s published API definitions: clickwise-net-publisher-openapi.json, clickwise-net-publisher-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://partners.clickwise.net/api/v1/publisher
security:
- ApiKeyHeader: []
- BearerKey: []
tags:
- name: Postbacks
paths:
  /postback/:
    get:
      operationId: getPostback
      summary: Conversion postback (webhook) configuration
      tags:
      - Postbacks
      responses:
        '200':
          description: OK
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostbackConfig'
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '429':
          $ref: '#/components/responses/E429'
        '503':
          $ref: '#/components/responses/E503'
    put:
      operationId: setPostback
      summary: 'Not available with an API key: set the postback URL in the portal'
      description: Always 403 `postback_write_requires_portal` with a publisher key, so a leaked key cannot redirect your conversions. Use the portal (Settings > Postback) or the portal API token.
      tags:
      - Postbacks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - url
              properties:
                url:
                  type: string
                  description: https URL with {macro} placeholders.
                http_method:
                  type: string
                  enum:
                  - GET
                  - POST
                event_types:
                  type: array
                  items:
                    type: string
                active:
                  type: boolean
            example:
              url: https://tracker.example/pb?sub={subid}&amount={commission}&status={status}
              http_method: GET
      responses:
        '200':
          description: Updated
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostbackConfig'
        '201':
          description: Created; the only response with the secret
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostbackConfig'
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '429':
          $ref: '#/components/responses/E429'
        '503':
          $ref: '#/components/responses/E503'
    servers:
    - url: https://partners.clickwise.net/api/v1/publisher
  /postback/secret/:
    post:
      operationId: rotatePostbackSecret
      summary: 'Not available with an API key: rotate the secret in the portal'
      description: Always 403 `postback_write_requires_portal` with a publisher key.
      tags:
      - Postbacks
      responses:
        '200':
          description: OK
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '429':
          $ref: '#/components/responses/E429'
        '503':
          $ref: '#/components/responses/E503'
        '404':
          $ref: '#/components/responses/E404'
    servers:
    - url: https://partners.clickwise.net/api/v1/publisher
  /postback/test/:
    post:
      operationId: testPostback
      summary: Send a signed test event
      tags:
      - Postbacks
      responses:
        '200':
          description: OK
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '429':
          $ref: '#/components/responses/E429'
        '503':
          $ref: '#/components/responses/E503'
        '404':
          $ref: '#/components/responses/E404'
    servers:
    - url: https://partners.clickwise.net/api/v1/publisher
  /postback/deliveries/:
    get:
      operationId: listPostbackDeliveries
      summary: Recent postback delivery attempts
      tags:
      - Postbacks
      responses:
        '200':
          description: OK
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '429':
          $ref: '#/components/responses/E429'
        '503':
          $ref: '#/components/responses/E503'
    servers:
    - url: https://partners.clickwise.net/api/v1/publisher
webhooks:
  saleEvent:
    post:
      summary: Conversion postback sent to your URL
      description: 'Events sale.created, sale.approved, sale.declined, sale.reversed, sale.commission_validated (subscription and X-CW-Event header); the {event} macro and the event field carry created, approved, declined, reversed or commission_validated. Signature: {signature} Retries with exponential backoff (up to 8 attempts, capped at 6 h). Sales from network programs can show as pending validation, with no commission amount until the sale is validated; the amount then arrives in a sale.commission_validated postback with the same transaction_id.'
      parameters:
      - name: X-CW-Event
        in: header
        required: true
        schema:
          type: string
      - name: X-CW-Delivery
        in: header
        required: true
        schema:
          type: string
      - name: X-CW-Timestamp
        in: header
        required: true
        schema:
          type: string
      - name: X-CW-Signature
        in: header
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaleEvent'
      responses:
        '200':
          description: Any 2xx acknowledges the delivery.
      tags:
      - Postbacks
    servers:
    - url: https://partners.clickwise.net/api/v1/publisher
components:
  responses:
    E400:
      description: Invalid request
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E503:
      description: Temporary failure or a query over its time budget; on 503, retry once after Retry-After
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E429:
      description: Rate limit; wait Retry-After seconds
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E404:
      description: Not found for this account
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E403:
      description: Not allowed for this key or account
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E401:
      description: Missing or invalid key
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E503_2:
      description: Temporary dependency failure; retry with backoff
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    Retry-After:
      schema:
        type: integer
      description: Seconds to wait.
    RateLimit-Limit:
      schema:
        type: integer
      description: Requests allowed per window.
    X-Request-Id:
      schema:
        type: string
      description: Echoes a valid X-Request-Id, else generated.
    RateLimit-Policy:
      schema:
        type: string
      description: For example 120;w=60.
    RateLimit-Reset:
      schema:
        type: integer
      description: Seconds until the window resets.
    RateLimit-Remaining:
      schema:
        type: integer
      description: Requests left in this window.
  schemas:
    PostbackConfig:
      type: object
      additionalProperties: true
      properties:
        configured:
          type: boolean
        url:
          type: string
        http_method:
          type: string
          enum:
          - GET
          - POST
        event_types:
          type: array
          items:
            type: string
        active:
          type: boolean
        macros:
          type: array
          items:
            type: string
    SaleEvent:
      type: object
      description: POST body (GET postbacks receive the same values as macros).
      properties:
        event:
          type:
          - string
          - number
          - 'null'
        subid:
          type:
          - string
          - number
          - 'null'
        click_id:
          type:
          - string
          - number
          - 'null'
        transaction_id:
          type:
          - string
          - number
          - 'null'
        order_ref:
          type:
          - string
          - number
          - 'null'
        sale_amount:
          type:
          - string
          - number
          - 'null'
        commission:
          type:
          - string
          - number
          - 'null'
        currency:
          type:
          - string
          - number
          - 'null'
        status:
          type:
          - string
          - number
          - 'null'
        campaign_id:
          type:
          - string
          - number
          - 'null'
        date:
          type:
          - string
          - number
          - 'null'
    Error:
      type: object
      required:
      - detail
      - error
      properties:
        detail:
          description: Human-readable message (kept for existing clients).
        error:
          type: object
          required:
          - code
          - message
          - status
          - request_id
          properties:
            code:
              type: string
              examples:
              - not_authenticated
              - throttled
              - invalid_request
              - api_key_scope
              - idempotency_key_reused
            message:
              type: string
            status:
              type: integer
            request_id:
              type: string
              description: Also sent as X-Request-Id.
    SaleEvent_2:
      type: object
      description: POST body (GET postbacks receive the same values as macros).
      properties:
        event:
          type:
          - string
          - number
          - 'null'
        subid:
          type:
          - string
          - number
          - 'null'
        click_id:
          type:
          - string
          - number
          - 'null'
        transaction_id:
          type:
          - string
          - number
          - 'null'
        order_ref:
          type:
          - string
          - number
          - 'null'
        sale_amount:
          type:
          - string
          - number
          - 'null'
        commission:
          type:
          - string
          - number
          - 'null'
        currency:
          type:
          - string
          - number
          - 'null'
        status:
          type:
          - string
          - number
          - 'null'
        campaign_id:
          type:
          - string
          - number
          - 'null'
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    BearerKey:
      type: http
      scheme: bearer
      description: The same publisher API key.
x-refined-from:
- clickwise-net-publisher-openapi.json
- clickwise-net-publisher-openapi.yml
x-servers-source: https://partners.clickwise.net/llms.txt