NAV
bash javascript php

Introduction

The Publisher API offers a set of API calls that allow you to pull data about the advertiser program on the Involve asia platform, the commission you can earn from those advertiser programs, your transactions and campaign details.

Limitation/Throttling

To guarantee smooth operation for all our publishers, we currently have a throttling in place that limits the number of API requests to 20 API calls per minute per account.

Standard Pagination

Certain endpoints will generate large result sets. To save bandwidth and long processing times, these endpoints will paginate the results to reduce the strain on both client and server.

Any endpoint that supports pagination will return 3 attributes to support this:

API requests

Purpose Endpoint Remarks
Authenticating API key /authenticate You must have a valid "token" before making requests.
To get all conversions /conversions/all Getting a full list of conversions
To get all conversions within a specific date range /conversions/range
  • Use "start_date" and "end_date" to specify the date.
  • The date format should be in "yyyy-mm-dd” format, e.g.: "2017-02-28".
To get all conversion with a specific date and time /conversions/data-range
  • Use "start_date_time" and "end_date_time" to specify the date and time.
  • The date and time format should be in "yyyy-mm-dd hh:mm:ss” format, e.g.: "2017-02-26 21:16:47".
To Get All Advertiser Program details /offers/all Getting a Full list of of advertiser program details
To get last updated advertiser program details /offers/last-updated-range Getting a list of updated advertiser program
  • Use "start_date" and "end_date" to specify the date and time.
  • The date and time format should be in "yyyy-mm-dd hh:mm:ss” format, e.g.: "2017-02-26 21:16:47".
To get all Advertiser active campaign details /campaigns/all Getting Full list of advertiser campaign

Important note

Authentication

Authenticating API Key

How to call it

curl -X POST "https://api.involve.asia/api/authenticate" \
    -H "Accept: application/json" \
    --data-urlencode "secret=4ZU659+Ba4LjcSVGamz0LYnA3zYSKLDQgN3DriAzyH4=" \
    --data-urlencode "key=general"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/authenticate",
    "method": "POST",
    "headers": {
        "accept": "application/json"
    },
    "data": {
        "key": "general",
        "secret": "4ZU659+Ba4LjcSVGamz0LYnA3zYSKLDQgN3DriAzyH4="
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/authenticate",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
          "secret" => "4ZU659+Ba4LjcSVGamz0LYnA3zYSKLDQgN3DriAzyH4=",
          "key" => "general"
          )
      )
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "",
  "data": {
    "token": ""
  }
}

You need to Authenticate your API key before being able to call any API request from involve asia. Once you already authenticate you will receive a "token" which will be expired in 2 hours.

HTTP Request

POST https://api.involve.asia/api/authenticate

Response data type and sample ?

Parameters Name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
Example :
  • "success"

If your API key Credentials is wrong you will get error as below
Example :
  • "invalid Credentials"

*Please ensure your API's credentials are correct and please refer to our sample request.
"token" This will be your token. It can be used only for 2 hours once your token expires you need to request for a new token again.

Conversion

All Conversion

How to call it

curl -X POST "https://api.involve.asia/api/conversions/all" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "filters[conversion_id]=899191|7008168" \
    -d "filters[offer_id]=25" \
    -d "filters[offer_name]=lazada" \
    -d "filters[conversion_status]=pending" \
    -d "filters[preferred_currency]=USD"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/conversions/all",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "filters[conversion_id]": "899191|7008168",
        "filters[offer_id]": 25,
        "filters[offer_name]": "lazada",
        "filters[conversion_status]": "pending",
        "filters[preferred_currency]": "USD"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/conversions/all",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "filters[conversion_id]" => "899191|7008168",
            "filters[offer_id]" => 25,
            "filters[offer_name]" => "lazada",
            "filters[conversion_status]" => "pending",
            "filters[preferred_currency]" => "USD"
          )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "",
  "data": {
    "page": 1,
    "limit": 100,
    "count": 246,
    "nextPage": 2,
    "data": [
      {
        "conversion_id": 899191,
        "offer_name": "Lazada (PH)",
        "offer_id": 44,
        "sale_amount": "345.00",
        "currency": "PHP",
        "payout": "14.49",
        "aff_sub1": null,
        "aff_sub2": null,
        "aff_sub3": null,
        "aff_sub4": null,
        "aff_sub5": null,
        "adv_sub1": "348666368",
        "adv_sub2": "Health & Beauty",
        "adv_sub3": "false",
        "adv_sub4": "AD109HBAK1YRANPH-611385",
        "adv_sub5": "6.00",
        "datetime_conversion": "2017-02-22 21:16:47",
        "conversion_status": "pending",
        "affiliate_id": 4726,
        "user_id": 2,
        "user_email": "email@gmail.com"
      }
    ]
  }
}

Publishers can pull individual transactions, to check the status of the transactions, to create your own reports, and to pull additional information that is shared between publishers and advertisers via Aff_sub (from publisher to advertiser) and Adv_sub and custom parameters (from advertiser to publisher).

When should you call API for all conversion ?

Best to use this API once a month to update all the conversion and status. To get updates real time is advisable to use POSTBACK URL for frequent update.

HTTP Request

POST https://api.involve.asia/api/conversions/all

Optional parameters available for you to filter.

Parameters name Description and Example
[conversion_id]
  • Optional
This field is optional if you would like to track specific individual conversion you can use the conversion id to keep track of the conversion.

String
ID of the conversion
Example : 899191

To filter more than 1 conversion id please use vertical bar " | "

String
ID of the conversion
Example : 899191|7008168
[offer_id]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer id to keep track of the conversion.

String
ID of the advertiser
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the advertiser
Example : 25|85
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[conversion_status]
  • Optional
Current conversion status

Available Filter
  • Pending
  • Approved
  • Rejected
  • Paid
  • Yet to consumed

String
Conversion Status
Example : pending

To filter more than 1 status please use vertical bar " | "

String
Conversion Status
Example : pending|approved
[preferred_currency]
  • Optional
Default conversion currency code - (ISO 4217)

Available Filter
  • MYR
  • USD

String
Currency code
Example : USD

Response data type and sample

Parameters name Description
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"conversion_id" Involve Asia unique conversion id to keep track conversion

String
Example : 348666368
"offer_name" Advertiser or Program Name

String
Example : Lazada (PH)
"offer_id" Advertiser or offer unique reference ID

String
Example : 44
"sale_amount" Local sale amount or user paid amount to advertiser

Number
Example : 345.00
"currency" Default conversion currency code - (ISO 4217)

String
Example : PHP
"payout" Commission earn based on local currency

Number
Example : 14.49
"aff_sub" Publisher custom parameter sent to involve asia

String
Example : 1293847 or null (Blank)
"adv_sub" Advertiser custom parameter (refer to advertiser integration document)

String
Example : 1293847 or null (Blank)
"datetime_conversion" Date and time of the conversion recorded

String
Example : 2017-02-22 21:16:47
"conversion_status" Status of the conversion - (pending, approved, rejected, paid, yet to consumed and processing)

String
Example : pending
"affiliate_id" Publisher Unique account ID

Number
Example : 4726
"user_id" User ID for the assigned API key

Number
Example : 2
"user_email" User email address for the assigned API key

String
Example : email@gmail.com

Conversion by Date range

How to call it

curl -X POST "https://api.involve.asia/api/conversions/range" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "start_date=2017-02-26" \
    -d "end_date=2017-02-28" \
    -d "filters[conversion_id]=899191|7008168" \
    -d "filters[offer_id]=25" \
    -d "filters[offer_name]=lazada" \
    -d "filters[conversion_status]=pending" \
    -d "filters[preferred_currency]=USD"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/conversions/range",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "start_date": "2017-02-26",
        "end_date": "2017-02-28",
        "filters[conversion_id]": "899191|7008168",
        "filters[offer_id]": 25,
        "filters[offer_name]": "lazada",
        "filters[conversion_status]": "pending",
        "filters[preferred_currency]": "USD"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/conversions/range",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "start_date" => "2017-02-26",
            "end_date" => "2017-02-28",
            "filters[conversion_id]" => "899191|7008168",
            "filters[offer_id]" => 25,
            "filters[offer_name]" => "lazada",
            "filters[conversion_status]" => "pending",
            "filters[preferred_currency]" => "USD"
          )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "",
  "data": {
    "page": 1,
    "limit": 100,
    "count": 246,
    "nextPage": 2,
    "data": [
      {
        "conversion_id": 899191,
        "offer_name": "Lazada (PH)",
        "offer_id": 44,
        "sale_amount": "345.00",
        "currency": "PHP",
        "payout": "14.49",
        "aff_sub1": null,
        "aff_sub2": null,
        "aff_sub3": null,
        "aff_sub4": null,
        "aff_sub5": null,
        "adv_sub1": "348666368",
        "adv_sub2": "Health & Beauty",
        "adv_sub3": "false",
        "adv_sub4": "AD109HBAK1YRANPH-611385",
        "adv_sub5": "6.00",
        "datetime_conversion": "2017-02-22 21:16:47",
        "conversion_status": "pending",
        "affiliate_id": 4726,
        "user_id": 2,
        "user_email": "email@gmail.com"
      }
    ]
  }
}

Publishers can pull individual transactions by date range, to check the status of the transactions, to create your own reports, and to pull additional information that shared between publishers and advertisers via Aff_sub (from publisher to advertiser) and Adv_sub and custom parameters (from advertiser to publisher)

When should you call API for conversion by date range ?

Best to use this API once a month or twice a month to update and get the current conversion status.

HTTP Request

POST https://api.involve.asia/api/conversions/range

Parameters available for you to filter

Parameters name Description and Example
[start_date]
  • Required
Start date of conversion you would like to filter. (YYYY:MM:DD)

String
Example : 2017-02-26
[end_date]
  • Required
End date of conversion you would like to filter. (YYYY:MM:DD)

String
Example : 2017-02-28
[conversion_id]
  • Optional
This field is optional if you would like to track specific individual conversion you can use the conversion id to keep track of the conversion.

String
ID of the conversion
Example : 899191

To filter more than 1 conversion id please use vertical bar " | "

String
ID of the conversion
Example : 899191|7008168
[offer_id]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer id to keep track of the conversion.

String
ID of the advertiser
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the advertiser
Example : 25|85
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[conversion_status]
  • Optional
Current conversion status

Available Filter
  • Pending
  • Approved
  • Rejected
  • Paid
  • Yet to consumed

String
Conversion Status
Example : pending

To filter more than 1 status please use vertical bar " | "

String
Conversion Status
Example : pending|approved
[preferred_currency]
  • Optional
Default conversion currency code - (ISO 4217)

Available Filter
  • MYR
  • USD

String
Currency code
Example : USD

Response data type and sample

Parameters name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"conversion_id" Involve Asia unique conversion id to keep track conversion

String
Example : 348666368
"offer_name" Advertiser or Program Name

String
Example : Lazada (PH)
"offer_id" Advertiser or offer unique reference ID

String
Example : 44
"sale_amount" Local sale amount or user paid amount to advertiser

Number
Example : 345.00
"currency" Default conversion currency code - (ISO 4217)

String
Example : PHP
"payout" Commission earn based on local currency

Number
Example : 14.49
"aff_sub" Publisher custom parameter sent to involve asia

String
Example : 1293847 or null (Blank)
"adv_sub" Advertiser custom parameter (refer to advertiser integration document)

String
Example : 1293847 or null (Blank)
"datetime_conversion" Date and time of the conversion recorded

String
Example : 2017-02-22 21:16:47
"conversion_status" Status of the conversion - (pending, approved, rejected, paid, yet to consumed and processing)

String
Example : pending
"affiliate_id" Publisher Unique account ID

Number
Example : 4726
"user_id" User ID for the assigned API key

Number
Example : 2
"user_email" User email address for the assigned API key

String
Example : email@gmail.com

Conversion by Date and time range

How to call it

curl -X POST "https://api.involve.asia/api/conversions/data-range" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "start_date=2017-02-26 21:16:47" \
    -d "end_date=2017-02-28 21:16:47" \
    -d "filters[conversion_id]=899191|7008168" \
    -d "filters[offer_id]=25" \
    -d "filters[offer_name]=lazada" \
    -d "filters[conversion_status]=pending" \
    -d "filters[preferred_currency]=USD"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/conversions/data-range",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "start_date": "2017-02-26 21:16:47",
        "end_date": "2017-02-28 21:16:47",
        "filters[conversion_id]": "899191|7008168",
        "filters[offer_id]": 25,
        "filters[offer_name]": "lazada",
        "filters[conversion_status]": "pending",
        "filters[preferred_currency]": "USD"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/conversions/data-range",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "start_date" => "2017-02-26 21:16:47",
            "end_date" => "2017-02-28 21:16:47",
            "filters[conversion_id]" => "899191|7008168",
            "filters[offer_id]" => 25,
            "filters[offer_name]" => "lazada",
            "filters[conversion_status]" => "pending",
            "filters[preferred_currency]" => "USD"
          )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "",
  "data": {
    "page": 1,
    "limit": 100,
    "count": 246,
    "nextPage": 2,
    "data": [
      {
        "conversion_id": 899191,
        "offer_name": "Lazada (PH)",
        "offer_id": 44,
        "sale_amount": "345.00",
        "currency": "PHP",
        "payout": "14.49",
        "aff_sub1": null,
        "aff_sub2": null,
        "aff_sub3": null,
        "aff_sub4": null,
        "aff_sub5": null,
        "adv_sub1": "348666368",
        "adv_sub2": "Health & Beauty",
        "adv_sub3": "false",
        "adv_sub4": "AD109HBAK1YRANPH-611385",
        "adv_sub5": "6.00",
        "datetime_conversion": "2017-02-22 21:16:47",
        "conversion_status": "pending",
        "affiliate_id": 4726,
        "user_id": 2,
        "user_email": "email@gmail.com"
      }
    ]
  }
}

Publishers can pull individual transactions by date and time range, to check the status of the transactions, to create own reports, and to pull additional information that can be shared between publishers and advertisers via Aff_sub (from publisher to advertiser) and Adv_sub and custom parameters (from advertiser to publisher)

When should you call API for conversion by date and time range ?

Best to use this API once a month or twice a month to update and get the current conversion status.

HTTP Request

POST https://api.involve.asia/api/conversions/data-range

Parameters available for you to filter

Parameters name Description and Example
[start_date]
  • Required
Start date of conversion you would like to filter. (YYYY-MM-DD HH:MM:SS)

String
Example : 2017-02-26 21:16:47
[end_date]
  • Required
End date of conversion you would like to filter. (YYYY-MM-DD HH:MM:SS)

String
Example : 2017-02-28 21:16:47
[conversion_id]
  • Optional
This field is optional if you would like to track specific individual conversion you can use the conversion id to keep track of the conversion.

String
ID of the conversion
Example : 899191

To filter more than 1 conversion id please use vertical bar " | "

String
ID of the conversion
Example : 899191|7008168
[offer_id]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer id to keep track of the conversion.

String
ID of the advertiser
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the advertiser
Example : 25|85
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[conversion_status]
  • Optional
Current conversion status

Available Filter
  • Pending
  • Approved
  • Rejected
  • Paid
  • Yet to consumed

String
Conversion Status
Example : pending

To filter more than 1 status please use vertical bar " | "

String
Conversion Status
Example : pending|approved
[preferred_currency]
  • Optional
Default conversion currency code - (ISO 4217)

Available Filter
  • MYR
  • USD

String
Currency code
Example : USD

Response data type and sample

Parameters name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"conversion_id" Involve Asia unique conversion id to keep track conversion

String
Example : 348666368
"offer_name" Advertiser or Program Name

String
Example : Lazada (PH)
"offer_id" Advertiser or offer unique reference ID

String
Example : 44
"sale_amount" Local sale amount or user paid amount to advertiser

Number
Example : 345.00
"currency" Default conversion currency code - (ISO 4217)

String
Example : PHP
"payout" Commission earn based on local currency

Number
Example : 14.49
"aff_sub" Publisher custom parameter sent to involve asia

String
Example : 1293847 or null (Blank)
"adv_sub" Advertiser custom parameter (refer to advertiser integration document)

String
Example : 1293847 or null (Blank)
"datetime_conversion" Date and time of the conversion recorded

String
Example : 2017-02-22 21:16:47
"conversion_status" Status of the conversion - (pending, approved, rejected, paid, yet to consumed and processing)

String
Example : pending
"affiliate_id" Publisher Unique account ID

Number
Example : 4726
"user_id" User ID for the assigned API key

Number
Example : 2
"user_email" User email address for the assigned API key

String
Example : email@gmail.com

Offers

All offers

How to call it

curl -X POST "https://api.involve.asia/api/offers/all" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "sort_by=relevance" \
    -d "filters[offer_id]=25" \
    -d "filters[offer_name]=lazada" \
    -d "filters[country]=Malaysia" \
    -d "filters[offer_type]=cpa|cps|cpa_both|cpc|cpm" \
    -d "filters[categories]=Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/offers/all",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "sort_by": "relevance",
        "filters[offer_id]": 25,
        "filters[offer_name]": "lazada",
        "filters[country]": "Malaysia",
        "filters[offer_type]": "cpa|cps|cpa_both|cpc|cpm",
        "filters[categories]": "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/offers/all",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "sort_by" => "relevance",
            "filters[offer_id]" => 25,
            "filters[offer_name]" => "lazada",
            "filters[country]" => "Malaysia",
            "filters[offer_type]" => "cpa|cps|cpa_both|cpc|cpm",
            "filters[categories]" => "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
          )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "Success",
  "data": {
    "page": 1,
    "limit": 1,
    "count": 75,
    "nextPage": 2,
    "data": [
      {
        "offer_name": "Medical Departures",
        "description": "Offer Description",
        "preview_url": "https://www.medicaldepartures.com/",
        "offer_id": 289,
        "currency": "USD",
        "logo": "https://img.involve.asia/ia_logo/289.png",
        "lookup_value": "cpa",
        "datetime_updated": "2019-05-31 11:17:36",
        "countries": "International",
        "categories": "Health & Beauty",
        "commissions": [
          {
            "Commission": "USD52.50"
          },
          {
            "Commission": "USD52.50 OR 0.000"
          }
        ],
        "validation_terms": "30",
        "payment_terms": "60",
        "tracking_link": "https://invol.co/aff_m?offer_id=577&aff_id=2&source=deeplink_generator&url=https%3A%2F%2Fwww.medicaldepartures.com%2F"
      }
    ]
  }
}

Publishers can check via API which programmes they currently have an active and pause relationship. You can also check the whole program list, and filter by program country, offer type and categories.

When should you call API for all offer ?

Best to use this API once a week to update and get the current advertiser or program status.

HTTP Request

POST https://api.involve.asia/api/offers/all

Which data fields you can filter

Parameters name Description and Example
[offer_id]
  • Optional
This field is optional if you would like to track specific individual offers you can use the offer id to filter for information.

String
ID of the offer
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the offer
Example : 25|50
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[country]
  • Optional
Filter by country availability, For example if you are would like to filter which advertiser is available in Singapore you can just filter the country

String
Advertiser availability country
Example : Malaysia
[offer_type]
  • Optional
Filter by offer type (CPS,CPA,CPC and etc)

List of available option
  • cpa
  • cps
  • cpa_both
  • cpc
  • cpm


String
Example : cps
[categories]
  • Optional
Filter by program categories (Fashion,Travel, Finance and etc)

List of available option
  • Fashion
  • Electronics
  • Health & Beauty
  • Travel
  • Marketplace
  • Services
  • Finance

String
Example : Fashion

Which data fields do we provide

Parameters name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"offer_name" Advertiser or Program Name

String
Example : Medical Departures
"description" Advertiser or Program description

String
Example : Offer Description
"preview_url" Advertiser landing page or campaign page

String
Example : https://www.medicaldepartures.com/
"offer_id" Advertiser or offer unique reference ID

Number
Example : 289
"currency" Default conversion currency code - (ISO 4217)

String
Example : PHP
"logo" Advertiser Logo link in png file format

String
Example : https://img.involve.asia/ia_logo/289.png
"offer_type" Offer type (CPS,CPA,CPC and etc)

String
Example : CPA
"datetime_updated" Last advertiser or program updated date and time

String
Example : 2019-05-31 11:17:36
"countries" Advertiser or program availability.

String
Example : International or Thailand
"categories" Program categories (Fashion,Travel, Finance and etc)

String
Example : Health & Beauty
"commission" Advertiser or program default commission

*Take note some offers will have multiple tier commissions based on user type, product or categories.

String
Example : USD52.50 OR 0.000
"validation_terms" Advertiser validation terms, Number of days it takes for advertiser to validate your transaction.

*Please refer to validation our knowledge base to understand validation terms
https://help.involve.asia/hc/en-us/articles/360038154852-What-is-Validation-Payment-Terms-

String
Example : 30
"payment_terms" Advertiser terms upon validation and invoiced. Number of days it takes for the advertiser to process payment and ready to be collected by the publisher.

*Please refer to validation our knowledge base to understand payment terms
https://help.involve.asia/hc/en-us/articles/360038154852-What-is-Validation-Payment-Terms-

String
Example : 60
"tracking_link" Publisher default landing page tracking link

String
Example : https://invol.co/aff_m?offer_id=577&aff_id=2&source=deeplink_generator&url=https%3A%2F%2Fwww.medicaldepartures.com%2F

Last updated offers

How to call it

curl -X POST "https://api.involve.asia/api/offers/last-updated-range" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "start_date=2017-01-01 00:00:00" \
    -d "end_date=2017-12-30 23:59:59" \
    -d "sort_by=relevance" \
    -d "filters[offer_id]=25" \
    -d "filters[offer_name]=lazada" \
    -d "filters[country]=Malaysia" \
    -d "filters[offer_type]=cpa|cps|cpa_both|cpc|cpm" \
    -d "filters[categories]=Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/offers/last-updated-range",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "start_date": "2017-01-01 00:00:00",
        "end_date": "2017-12-30 23:59:59",
        "sort_by": "relevance",
        "filters[offer_id]": 25,
        "filters[offer_name]": "lazada",
        "filters[country]": "Malaysia",
        "filters[offer_type]": "cpa|cps|cpa_both|cpc|cpm",
        "filters[categories]": "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/offers/last-updated-range",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "start_date" => "2017-01-01 00:00:00",
            "end_date" => "2017-12-30 23:59:59",
            "sort_by" => "relevance",
            "filters[offer_id]" => 25,
            "filters[offer_name]" => "lazada",
            "filters[country]" => "Malaysia",
            "filters[offer_type]" => "cpa|cps|cpa_both|cpc|cpm",
            "filters[categories]" => "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel"
          )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "Success",
  "data": {
    "page": 1,
    "limit": 1,
    "count": 75,
    "nextPage": 2,
    "data": [
      {
        "offer_name": "Medical Departures",
        "description": "Offer Description",
        "preview_url": "https://www.medicaldepartures.com/",
        "offer_id": 289,
        "currency": "USD",
        "logo": "https://img.involve.asia/ia_logo/289.png",
        "lookup_value": "cpa",
        "datetime_updated": "2019-05-31 11:17:36",
        "countries": "International",
        "categories": "Health & Beauty",
        "commissions": [
          {
            "Commission": "USD52.50"
          },
          {
            "Commission": "USD52.50 OR 0.000"
          }
        ],
        "validation_terms": "30",
        "payment_terms": "60",
        "tracking_link": "https://invol.co/aff_m?offer_id=577&aff_id=13972&source=deeplink_generator&url=https%3A%2F%2Fwww.medicaldepartures.com%2F"
      }
    ]
  }
}

Publishers can check automatically with which programmes they currently have an active and pause relationship. You can filter by the last update.

When should you call API for last updated offers ?

Best to use this API once a week to update and get the current advertiser or program status.

HTTP Request

POST https://api.involve.asia/api/offers/last-updated-range

Which data fields you can filter

Parameters name Description and Example
[start_date]
  • Required
Last updated start date and time. (YYYY-MM-DD HH:MM:SS)

String
Example : 2017-02-26 21:16:47
[end_date]
  • Required
Last updated end date and time. (YYYY-MM-DD HH:MM:SS)

String
Example : 2017-02-28 21:16:47
[offer_id]
  • Optional
This field is optional if you would like to track specific individual offers you can use the offer id to filter for information.

String
ID of the offer
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the offer
Example : 25|50
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[country]
  • Optional
Filter by country availability, For example if you are would like to filter which advertiser is available in Singapore you can just filter the country

String
Advertiser availability country
Example : Malaysia
[offer_type]
  • Optional
Filter by offer type (CPS,CPA,CPC and etc)

List of available option
  • cpa
  • cps
  • cpa_both
  • cpc
  • cpm

String
Example : cps
[categories]
  • Optional
Filter by program categories (Fashion,Travel, Finance and etc)

List of available option
  • Fashion
  • Electronics
  • Health & Beauty
  • Travel
  • Marketplace
  • Services
  • Finance

String
Example : Fashion

Response data type and sample

Parameters name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"offer_name" Advertiser or Program Name

String
Example : Medical Departures
"description" Advertiser or Program description

String
Example : Offer Description
"preview_url" Advertiser landing page or campaign page

String
Example : https://www.medicaldepartures.com/
"offer_id" Advertiser or offer unique reference ID

Number
Example : 289
"currency" Default conversion currency code - (ISO 4217)

String
Example : PHP
"logo" Advertiser Logo link in png file format

String
Example : https://img.involve.asia/ia_logo/289.png
"offer_type" Offer type (CPS,CPA,CPC and etc)

String
Example : CPA
"datetime_updated" Last advertiser or program updated date and time

String
Example : 2019-05-31 11:17:36
"countries" Advertiser or program availability.

String
Example : International or Thailand
"categories" Program categories (Fashion,Travel, Finance and etc)

String
Example : Health & Beauty
"commission" Advertiser or program default commission

*Take note some offers will have multiple tier commissions based on user type, product or categories.

String
Example : USD52.50 OR 0.000
"validation_terms" Advertiser validation terms, Number of days it takes for advertiser to validate your transaction.

*Please refer to validation our knowledge base to understand validation terms
https://help.involve.asia/hc/en-us/articles/360038154852-What-is-Validation-Payment-Terms-

String
Example : 30
"payment_terms" Advertiser terms upon validation and invoiced. Number of days it takes for the advertiser to process payment and ready to be collected by the publisher.

*Please refer to validation our knowledge base to understand payment terms
https://help.involve.asia/hc/en-us/articles/360038154852-What-is-Validation-Payment-Terms-

String
Example : 60
"tracking_link" Publisher default landing page tracking link

String
Example : https://invol.co/aff_m?offer_id=577&aff_id=2&source=deeplink_generator&url=https%3A%2F%2Fwww.medicaldepartures.com%2F

Campaign

All Campaign

How to call it

curl -X POST "https://api.involve.asia/api/campaigns/all" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer [token]" \
    -d "page=1" \
    -d "limit=100" \
    -d "filters[campaign_banner_id]=123|456" \
    -d "filters[offer_id]=25|815" \
    -d "filters[offer_name]=lazada" \
    -d "filters[start_date]=2017-06-29" \
    -d "filters[end_date]=2017-06-29" \
    -d "filters[country]=Malaysia" \
    -d "filters[category]=Finance|Services|Marketplace|Other|Travel|Health & Beauty|Lifestyle|Electronics|Fashion" \
    -d "filters[coupons_only]=true" \
    -d "filters[with_banner]=true"
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://api.involve.asia/api/campaigns/all",
    "method": "POST",
    "headers": {
        "accept": "application/json",
        "Authorization": "Bearer [token]"
    },
    "data": {
        "page": 1,
        "limit": 100,
        "filters[campaign_banner_id]": "123|456",
        "filters[offer_id]": "25|815",
        "filters[offer_name]": "lazada",
        "filters[start_date]": "2017-06-29",
        "filters[end_date]": "2017-06-29",
        "filters[country]": "Malaysia",
        "filters[category]": "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel",
        "filters[coupons_only]": true,
        "filters[with_banner]": true,
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.involve.asia/api/campaigns/all",
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_POSTFIELDS => http_build_query(
      array(
            "page" => 1,
            "limit" => 100,
            "filters[campaign_banner_id]" => "123|456",
            "filters[offer_id]" => "25|815",
            "filters[offer_name]" => "lazada",
            "filters[start_date]" => "2017-06-29",
            "filters[end_date]" => "2017-06-29",
            "filters[country]" => "Malaysia",
            "filters[category]" => "Electronics|Fashion|Finance|Health & Beauty|Lifestyle|Marketplace|Other|Services|Travel",
            "filters[coupons_only]" => true,
            "filters[with_banner]" => true,
            )
      ),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer [token]"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

How does the response look

{
  "status": "success",
  "message": "Success",
  "data": {
    "page": 1,
    "limit": 1,
    "count": 71,
    "nextPage": 2,
    "data": [
      {
        "campaign_banner_id": 123,
        "offer_id": 46,
        "offer_name": "Photobook (MY)",
        "campaign_name": "60% OFF storewide!",
        "description": "60% OFF storewide! for all Photobooks",
        "voucher_code": "IARAM60",
        "date_campaign_start": "2017-05-23",
        "date_campaign_end": "2017-06-30",
        "banner_image_url": "https://dev-bkt.s3-ap-southeast-1.amazonaws.com/rpss/campaigns_banners/no-img.jpg",
        "tracking_link": "https://invol.co/aff_m?offer_id=124&aff_id=13972&source=campaign&url=http%3A%2F%2Fwww.photobook.com.my%2Fprp%2Fmay17-aff-involveasia",
        "categories": "Food & Beverage, Lifestyle, Other",
        "with_banner": true
      }
    ]
  }
}

Publishers can check all ongoing and upcoming campaign details and creative.

When should you call API for all campaign ?

Best to use this API once a week to update and get the current campaign details.

HTTP Request

POST https://api.involve.asia/api/campaigns/all

Which data fields you can filter

Field name Description
[campaign_banner_id]
  • Optional
Advertiser or offer banner unique reference ID

String
ID of the campaign banner
Example : 123

To filter more than 1 offer banner unique reference ID please use vertical bar " | "

String
ID of the campaign banner
Example : 123|456
[offer_id]
  • Optional
This field is optional if you would like to track specific individual offers you can use the offer id to filter for information.

String
ID of the offer
Example : 25

To filter more than 1 offer id please use vertical bar " | "

String
ID of the offer
Example : 25|50
[offer_name]
  • Optional
This field is optional if you would like to track specific advertiser conversion you can use the offer name aka advertiser name to keep track of the conversion.

String
Name of the advertiser
Example : Lazada

To filter more than 1 advertiser please use vertical bar " | "

String
Name of the advertiser
Example : Lazada|Shopee
[start_date]
  • Required
Campaign Start date, If you prefer to see only active campaigns for specific start dates you can filter by date. (YYYY:MM:DD)

String
Example : 2017-02-26
[end_date]
  • Required
Campaign end date,If you prefer to see only active campaign for specific end date you can filter by end date (YYYY:MM:DD)

String
Example : 2017-02-28
[country]
  • Optional
Filter by country availability, For example if you are would like to filter which advertiser is available in Singapore you can just filter the country

String
Advertiser availability country
Example : Malaysia
[categories]
  • Optional
Filter by program categories (Fashion,Travel, Finance and etc)

List of available option
  • Fashion
  • Electronics
  • Health & Beauty
  • Travel
  • Marketplace
  • Services
  • Finance

String
Example : Fashion
[coupons_only]
  • Optional
To filter campaigns with coupon code only below is the available option.

List of available option
  • true - Filter only with coupon code
  • false or "blank" - will not filter for coupon will show all

String
Example : true
[with_banner]
  • Optional
To filter campaigns with banners only below is the available option.

List of available option
  • true - Filter only with banners
  • false or "blank" - will not filter for banners will show all

String
Example : true

Response data type and sample

Parameters name Description and Example
"status" API call Status, There will be only 2 type of respond
Example :
  • "success"
  • "error"
"message" API call message status, If your API key is correct you will get below status
  • "Success"

If your API Token is wrong you will get error as below
  • "Token Signature could not be verified"

If you Get this below error it means your header is incorrect.
  • "Failed to authenticate because of bad credentials or an invalid authorization header"
  • "Incorrect arguments. Please fill up start_date and end_date"
  • "Incorrect arguments"

*Please ensure your API's credentials are correct and please refer to our sample request.
"page" Current page index

Number
Example : 1
"limit" Number of data available in 1 page - Maximum is 100 entry per page

Number
Example : 100
"count" Count of total number of data available

Number
Example : 246
"nextPage" Next page number

Number
Example : 3
"campaign_banner_id" Campaign banner id is unique for every campaign in involve asia

Number
Example : 123
"offer_id" Advertiser or offer unique reference ID

Number
Example : 289
"offer_name" Advertiser or Program Name

String
Example : Medical Departures
"campaign_name" Campaign Name and details

String
Example : 60% OFF storewide!
"description" Details and description of the campaign

String
Example : 60% OFF storewide! for all Photobooks
"voucher_code" Campaign or promotion coupon code, Please take note if coupon code is not available the response will return as blank

String
Example : IARAM60
"date_campaign_start" Campaign Start date, If you prefer to see only active campaigns for specific start dates you can filter by date.

(YYYY-MM-DD)

String
Example : 2017-02-26
"date_campaign_end" Campaign end date,If you prefer to see only active campaign for specific end date you can filter by end date.

(YYYY-MM-DD)

String
Example : 2017-02-26
"banner_image_url" Image banners for the campaign can be used by you to promote.

String
Example : https://img.involve.asia/rpss/campaigns_banners/no-img.jpg
"tracking_link" Publisher campaign landing page tracking link

String
Example : https://invol.co/aff_m?offer_id=577&aff_id=2&source=deeplink_generator&url=https%3A%2F%2Fwww.medicaldepartures.com%2F
"categories" Program categories (Fashion,Travel, Finance and etc)

String
Example : Health & Beauty
"with_banner" Campaign banner availability Status

If return response as below
  • true (Banner is available from this campaign)
  • false (Banner is not available for this campaign)

String
Example : true