API Reference for Developersv3

Getting Started

An API key is required for requests to be processed by the system. Once a user registers, an API key is automatically generated for this user. The API key must be sent with each request (see full example below). If the API key is not sent or is expired, there will be an error. Please make sure to keep your API key secret to prevent abuse.

Authentication

To authenticate with the API system, you need to send your API key as an authorization token with each request. You can see sample code below.

curl --location --request POST 'http://fx-timing.clickthru.ca/api/url/add' \ 
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/url/add",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"POST",
    CURLOPT_HTTPHEADER =>array(
    "Authorization: Bearer YOURAPIKEY",
    "Content-Type: application/json",
    ),
));

$response = curl_exec($curl);
Rate Limit

Our API has a rate limiter to safeguard against spike in requests to maximize its stability. Our rate limiter is currently caped at 30 requests per 1 minute.

Several headers will be sent alongside the response and these can be examined to determine various information about the request.

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: TIMESTAMP
Response Handling

All API response are returned in JSON format by default. To convert this into usable data, the appropriate function will need to be used according to the language. In PHP, the function json_decode() can be used to convert the data to either an object (default) or an array (set the second parameter to true). It is very important to check the error key as that provides information on whether there was an error or not. You can also check the header code.

{
    "error": 1,
    "message": "An error ocurred"
}

Account

Get Account
GEThttp://fx-timing.clickthru.ca/api/account

To get information on the account, you can send a request to this endpoint and it will return data on the account.

curl --location --request GET 'http://fx-timing.clickthru.ca/api/account' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/account",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "data": {
        "id": 1,
        "email": "sample@domain.com",
        "username": "sampleuser",
        "avatar": "https:\/\/domain.com\/content\/avatar.png",
        "status": "pro",
        "expires": "2022-11-15 15:00:00",
        "registered": "2020-11-10 18:01:43"
    }
}
Update Account
PUThttp://fx-timing.clickthru.ca/api/account/update

To update information on the account, you can send a request to this endpoint and it will update data on the account.

curl --location --request PUT 'http://fx-timing.clickthru.ca/api/account/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "email": "newemail@google.com",
    "password": "newpassword"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/account/update",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"PUT",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "email": "newemail@google.com",
    "password": "newpassword"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "Account has been successfully updated."
}

Branded Domains

List all branded domains
GEThttp://fx-timing.clickthru.ca/api/domains?limit=2&page=1

To get your branded domains codes via the API, you can use this endpoint. You can also filter data (See table for more info).

ParameterDescription
limit(optional) Per page data result
page(optional) Current page request
curl --location --request GET 'http://fx-timing.clickthru.ca/api/domains?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/domains?limit=2&page=1",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "domains": [
            {
                "id": 1,
                "domain": "https:\/\/domain1.com",
                "redirectroot": "https:\/\/rootdomain.com",
                "redirect404": "https:\/\/rootdomain.com\/404"
            },
            {
                "id": 2,
                "domain": "https:\/\/domain2.com",
                "redirectroot": "https:\/\/rootdomain2.com",
                "redirect404": "https:\/\/rootdomain2.com\/404"
            }
        ]
    }
}
Create a Branded Domain
POSThttp://fx-timing.clickthru.ca/api/domain/add

A domain can be added using this endpoint. You need to send the pixel type and the tag.

ParameterDescription
domain(required) Branded domain including http or https
redirectroot(optional) Root redirect when someone visits your domain
redirect404(optional) Custom 404 redirect
curl --location --request POST 'http://fx-timing.clickthru.ca/api/domain/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "domain": "https:\/\/domain1.com",
    "redirectroot": "https:\/\/rootdomain.com",
    "redirect404": "https:\/\/rootdomain.com\/404"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/domain/add",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"POST",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "domain": "https:\/\/domain1.com",
    "redirectroot": "https:\/\/rootdomain.com",
    "redirect404": "https:\/\/rootdomain.com\/404"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "id": 1
}
Update a Domain
PUThttp://fx-timing.clickthru.ca/api/domain/:id/update

To update a branded domain, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

ParameterDescription
redirectroot(optional) Root redirect when someone visits your domain
redirect404(optional) Custom 404 redirect
curl --location --request PUT 'http://fx-timing.clickthru.ca/api/domain/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "redirectroot": "https:\/\/rootdomain-new.com",
    "redirect404": "https:\/\/rootdomain-new.com\/404"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/domain/:id/update",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"PUT",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "redirectroot": "https:\/\/rootdomain-new.com",
    "redirect404": "https:\/\/rootdomain-new.com\/404"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "Domain has been updated successfully."
}
Delete Domain
DELETEhttp://fx-timing.clickthru.ca/api/domain/:id/delete

To delete a domain, you need to send a DELETE request.

curl --location --request DELETE 'http://fx-timing.clickthru.ca/api/domain/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/domain/:id/delete",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"DELETE",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "Domain has been deleted successfully."
}

Custom Splash

List all custom splash
GEThttp://fx-timing.clickthru.ca/api/splash?limit=2&page=1

To get custom splash pages via the API, you can use this endpoint. You can also filter data (See table for more info).

ParameterDescription
limit(optional) Per page data result
page(optional) Current page request
curl --location --request GET 'http://fx-timing.clickthru.ca/api/splash?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/splash?limit=2&page=1",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "splash": [
            {
                "id": 1,
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "name": "Product 2 Promo",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

CTA Overlays

List all cta overlays
GEThttp://fx-timing.clickthru.ca/api/overlay?limit=2&page=1

To get cta overlays via the API, you can use this endpoint. You can also filter data (See table for more info).

ParameterDescription
limit(optional) Per page data result
page(optional) Current page request
curl --location --request GET 'http://fx-timing.clickthru.ca/api/overlay?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/overlay?limit=2&page=1",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "cta": [
            {
                "id": 1,
                "type": "message",
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "contact",
                "name": "Contact Page",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

Links


Pixels

List all pixels
GEThttp://fx-timing.clickthru.ca/api/pixels?limit=2&page=1

To get your pixels codes via the API, you can use this endpoint. You can also filter data (See table for more info).

ParameterDescription
limit(optional) Per page data result
page(optional) Current page request
curl --location --request GET 'http://fx-timing.clickthru.ca/api/pixels?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/pixels?limit=2&page=1",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "pixels": [
            {
                "id": 1,
                "type": "gtmpixel",
                "name": "GTM Pixel",
                "tag": "GA-123456789",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "twitterpixel",
                "name": "Twitter Pixel",
                "tag": "1234567",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}
Create a Pixel
POSThttp://fx-timing.clickthru.ca/api/pixel/add

A pixel can be created using this endpoint. You need to send the pixel type and the tag.

ParameterDescription
type(required) gtmpixel | gapixel | fbpixel | adwordspixel | linkedinpixel | twitterpixel | adrollpixel | quorapixel | pinterest | bing | snapchat | reddit
name(required) Custom name for your pixel
tag(required) The tag for the pixel
curl --location --request POST 'http://fx-timing.clickthru.ca/api/pixel/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "gtmpixel",
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/pixel/add",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"POST",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "type": "gtmpixel",
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "id": 1
}
Update a Pixel
PUThttp://fx-timing.clickthru.ca/api/pixel/:id/update

To update a pixel, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

ParameterDescription
name(optional) Custom name for your pixel
tag(required) The tag for the pixel
curl --location --request PUT 'http://fx-timing.clickthru.ca/api/pixel/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/pixel/:id/update",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"PUT",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "Pixel has been updated successfully."
}
Delete Pixel
DELETEhttp://fx-timing.clickthru.ca/api/pixel/:id/delete

To delete a pixel, you need to send a DELETE request.

curl --location --request DELETE 'http://fx-timing.clickthru.ca/api/pixel/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/pixel/:id/delete",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"DELETE",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "Pixel has been deleted successfully."
}

QR Codes

List all QR codes
GEThttp://fx-timing.clickthru.ca/api/qr?limit=2&page=1

To get your QR codes via the API, you can use this endpoint. You can also filter data (See table for more info).

ParameterDescription
limit(optional) Per page data result
page(optional) Current page request
curl --location --request GET 'http://fx-timing.clickthru.ca/api/qr?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/qr?limit=2&page=1",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "qrs": [
            {
                "id": 2,
                "link": "http:\/\/fx-timing.clickthru.ca\/qr\/a2d5e",
                "scans": 0,
                "name": "Google",
                "date": "2020-11-10 18:01:43"
            },
            {
                "id": 1,
                "link": "http:\/\/fx-timing.clickthru.ca\/qr\/b9edfe",
                "scans": 5,
                "name": "Google Canada",
                "date": "2020-11-10 18:00:25"
            }
        ]
    }
}
Get a single QR Code
GEThttp://fx-timing.clickthru.ca/api/qr/:id

To get details for a single QR code via the API, you can use this endpoint.

curl --location --request GET 'http://fx-timing.clickthru.ca/api/qr/:id' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/qr/:id",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "details": {
        "id": 1,
        "link": "http:\/\/fx-timing.clickthru.ca\/qr\/b9edfe",
        "scans": 5,
        "name": "Google Canada",
        "date": "2020-11-10 18:00:25"
    },
    "data": {
        "clicks": 1,
        "uniqueClicks": 1,
        "topCountries": {
            "Unknown": "1"
        },
        "topReferrers": {
            "Direct, email and other": "1"
        },
        "topBrowsers": {
            "Chrome": "1"
        },
        "topOs": {
            "Windows 10": "1"
        },
        "socialCount": {
            "facebook": 0,
            "twitter": 0,
            "instagram": 0
        }
    }
}
Create a QR Code
POSThttp://fx-timing.clickthru.ca/api/qr/add

To create a QR Code, you need to send a valid data in JSON via a POST request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

ParameterDescription
type(required) text | vcard | link | email | phone | sms | wifi
data(required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background(optional) RGB color e.g. rgb(255,255,255)
foreground(optional) RGB color e.g. rgb(0,0,0)
logo(optional) Path to the logo either png or jpg
curl --location --request POST 'http://fx-timing.clickthru.ca/api/qr/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/qr/add",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"POST",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "id": 3,
    "link": "http:\/\/fx-timing.clickthru.ca\/qr\/a58f79"
}
Update a QR Code
PUThttp://fx-timing.clickthru.ca/api/qr/:id/update

To update a QR Code, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

ParameterDescription
data(required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background(optional) RGB color e.g. rgb(255,255,255)
foreground(optional) RGB color e.g. rgb(0,0,0)
logo(optional) Path to the logo either png or jpg
curl --location --request PUT 'http://fx-timing.clickthru.ca/api/qr/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/qr/:id/update",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"PUT",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "QR has been updated successfully."
}
Delete a QR Code
DELETEhttp://fx-timing.clickthru.ca/api/qr/:id/delete

To delete a QR code, you need to send a DELETE request.

curl --location --request DELETE 'http://fx-timing.clickthru.ca/api/qr/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/qr/:id/delete",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"DELETE",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "QR Code has been deleted successfully."
}

Plans

This endpoint is only accessible by users with admin privileges.

List all plans
GEThttp://fx-timing.clickthru.ca/api/plans

Get a list of all plans on the platform.

curl --location --request GET 'http://fx-timing.clickthru.ca/api/plans' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/plans",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "data": [
        {
            "id": 2,
            "name": "Business",
            "free": false,
            "prices": {
                "monthly": 9.99,
                "yearly": 99.99,
                "lifetime": 999.99
            },
            "limits": {
                "links": 100,
                "clicks": 100000,
                "retention": 60,
                "custom": {
                    "enabled": "0"
                },
                "team": {
                    "enabled": "0",
                    "count": "0"
                },
                "splash": {
                    "enabled": "1",
                    "count": "5"
                },
                "overlay": {
                    "enabled": "1",
                    "count": "10"
                },
                "pixels": {
                    "enabled": "1",
                    "count": "10"
                },
                "domain": {
                    "enabled": "1",
                    "count": "1"
                },
                "multiple": {
                    "enabled": "0"
                },
                "alias": {
                    "enabled": "1"
                },
                "device": {
                    "enabled": "0"
                },
                "geo": {
                    "enabled": "0"
                },
                "bundle": {
                    "enabled": "0"
                },
                "parameters": {
                    "enabled": "0"
                },
                "export": {
                    "enabled": "0"
                },
                "api": {
                    "enabled": "0"
                }
            }
        },
        {
            "id": 1,
            "name": "Starter",
            "free": true,
            "prices": null,
            "limits": {
                "links": 10,
                "clicks": 1000,
                "retention": 7,
                "custom": {
                    "enabled": "0"
                },
                "team": {
                    "enabled": "0",
                    "count": "0"
                },
                "splash": {
                    "enabled": "0",
                    "count": "0"
                },
                "overlay": {
                    "enabled": "0",
                    "count": "10"
                },
                "pixels": {
                    "enabled": "0",
                    "count": "10"
                },
                "domain": {
                    "enabled": "0",
                    "count": "0"
                },
                "multiple": {
                    "enabled": "0"
                },
                "alias": {
                    "enabled": "0"
                },
                "device": {
                    "enabled": "0"
                },
                "geo": {
                    "enabled": "0"
                },
                "bundle": {
                    "enabled": "0"
                },
                "parameters": {
                    "enabled": "0"
                },
                "export": {
                    "enabled": "0"
                },
                "api": {
                    "enabled": "0"
                }
            }
        }
    ]
}
Subscribe a user to a plan
PUThttp://fx-timing.clickthru.ca/api/plan/:planid/user/:userid

To subscribe a user to plan, send a PUT request to this endpoint with the plan id and user id. The type of subscription and the expiration date will need to be specified. If the expiration date is not specified, the date will be adjusted according to the type.

ParameterDescription
typemonthly | yearly | lifetime
expiration(optional) Expiration date of the plan e.g. 2024-12-26 04:23:11
curl --location --request PUT 'http://fx-timing.clickthru.ca/api/plan/:planid/user/:userid' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "monthly",
    "expiration": "2024-12-26 04:23:11"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/plan/:planid/user/:userid",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"PUT",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "type": "monthly",
    "expiration": "2024-12-26 04:23:11"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "User has been subscribed to this plan."
}

Users

This endpoint is only accessible by users with admin privileges.

List all users
GEThttp://fx-timing.clickthru.ca/api/users?filter=free

Get a list of all users on the platform. Data can be filtered by sending a filter parameter in the url.

ParameterDescription
filteradmin | free | pro
curl --location --request GET 'http://fx-timing.clickthru.ca/api/users?filter=free' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/users?filter=free",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "data": [
        {
            "id": 2,
            "email": "sample2@domain.com",
            "username": "sample2user",
            "avatar": "https:\\\/\\\/domain.com\/content\/avatar2.png",
            "status": "free",
            "planid": 1,
            "expires": null,
            "registered": "2020-11-10 18:01:43",
            "apikey": "ABC123DEF456"
        },
        {
            "id": 1,
            "email": "sample@domain.com",
            "username": "sampleuser",
            "avatar": "https:\\\/\\\/domain.com\/content\/avatar.png",
            "status": "pro",
            "planid": 2,
            "expires": "2022-11-15 15:00:00",
            "registered": "2020-11-10 18:01:43",
            "apikey": "ABC123DEF456"
        }
    ]
}
List a single user
GEThttp://fx-timing.clickthru.ca/api/user/:id

Get data for a single user.

curl --location --request GET 'http://fx-timing.clickthru.ca/api/user/:id' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/user/:id",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"GET",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "data": {
        "id": 2,
        "email": "sample2@domain.com",
        "username": "sample2user",
        "avatar": "https:\\\/\\\/domain.com\/content\/avatar2.png",
        "status": "free",
        "planid": 1,
        "expires": null,
        "registered": "2020-11-10 18:01:43",
        "apikey": "ABC123DEF456"
    }
}
Create a user
POSThttp://fx-timing.clickthru.ca/api/user/add

To create a user, use this endpoint and send the following information as JSON.

ParameterDescription
username(required) User's username. Needs to be valid.
email(required) User's email. Needs to be valid.
password(required) User's password. Minimum 5 characters.
planid(optional) Premium plan. This can be found in the admin panel.
expiration(optional) Membership expiration example 2020-12-26 12:00:00
curl --location --request POST 'http://fx-timing.clickthru.ca/api/user/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "username": "user",
    "password": "1234567891011",
    "email": "demo@yourwebsite.com",
    "planid": 1,
    "expiration": "2020-11-20 11:00:00"
}'
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/user/add",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"POST",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    CURLOPT_POSTFIELDS =>'{
    "username": "user",
    "password": "1234567891011",
    "email": "demo@yourwebsite.com",
    "planid": 1,
    "expiration": "2020-11-20 11:00:00"
}',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "User has been registered.",
    "data": {
        "id": 3,
        "email": "demo@yourwebsite.com",
        "username": "user"
    }
}
Delete a user
DELETEhttp://fx-timing.clickthru.ca/api/user/:id/delete

To delete a user, use this endpoint.

curl --location --request DELETE 'http://fx-timing.clickthru.ca/api/user/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL =>"http://fx-timing.clickthru.ca/api/user/:id/delete",
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_ENCODING =>"",
    CURLOPT_MAXREDIRS =>2,
    CURLOPT_TIMEOUT =>10,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_CUSTOMREQUEST =>"DELETE",
    CURLOPT_HTTPHEADER =>array(
        "Authorization: Bearer YOURAPIKEY",
        "Content-Type: application/json",
    ),
    
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Server response
{
    "error": 0,
    "message": "User has been deleted."
}