Invoicing API Sandbox

About the Invoicing API

Using the VeLabs site as a point of entry, our Invoicing API enables our clients to view their customer’s invoice and transaction details using a range of different criteria.

The Invoicing API enables clients to filter their search based on information such as invoices for a given day, invoices specific to a certain customer or invoices for multiple clients.

This technology also allows the user to retrieve lists of transactions which can be defined by optional parameters; as well as providing the flexibility to update the status of certain transactions where necessary - primarily when cancelling or approving.


The Sandbox Tier

Every API call must be authorized using an API key. While you are testing the Invoicing API, you should use the sandbox and generate your keys from there. You will be working against our Production Environment, but all the data generated will be marked as test data. With this approach we make sure that you can play as much as you want with the API and, at the same time, we keep the consistency in our DBs. So that when you decide to go live, we'll enable you the Customer Tier to work with our production environment and level up the throttling limits.


The Sandbox Tier includes the following limits:

  • Request size limits: 0.5kb (double than the average request).
  • Requests per minute: 10(triple than the max. peak of 200 installations per hour found in our metrics).


For subscribing to the Customer Tier, click here.

GetTransactions

Pulls a list of transactions which can be defined by optional parameters.

The "transactionType" parameter supports the following values.

Name Description
Promo Codes Transaction generaty by promo codes way
Click / Email Transaction Generated without promo codes
By Email By Email
Click / Email Transaction Generated without promo codes,sale converted by cookie
VePrompt Promo Codes Transaction generated by a VePrompt Promo Code
VePrompt Transaction generated by VePrompt without promo code
Postsale Promo Codes Transaction generaty by Postsale promo codes way
Postsale Click / Email Transaction Generated Postsale Click / Email
Postsale Email Transaction generated by Postsale Email
Postsale Cookie Transaction Generated by Postsale Cookie
Newsletter Promo Codes Transaction generaty by Newsletter promo codes way
Newsletter Click / Email Transaction Generated Newsletter Click / Email
Newsletter Email Transaction generated by Newsletter Email
Newsletter Cookie Transaction Generated by Newsletter Cookie
VeAssist Promo Codes Transaction generated by a VeAssist Promo Code
VeAssist Transaction generated by VeAssist without promo code
VePrompt Advanced Promo Codes Transaction generated by VePrompt Advanced Promo code
VePrompt Advanced Transaction generated by VePrompt Advanced without promo code
VePrompt Feedback Promo Codes Transaction generated by VePrompt Feedback Promo code
VePrompt Feedback Transaction generated by VePrompt Feedback without promo code
VePrompt Prompt Promo Codes Transaction generated by VePrompt Prompt Promo code
VePrompt Prompt Transaction generated by VePrompt Prompt without promo code
Click / Email Transaction Generated without promo codes,open no click
VePrompt Proactive Email Promo Codes Transaction generated by VePrompt Proactive Email Promo code
VePrompt Proactive Email Transaction generated by VePrompt Proactive Email without promo code
VePrompt Proactive SMS Promo Codes Transaction generated by VePrompt Proactive SMS Promo code
VePrompt Proactive SMS Transaction generated by VePrompt Proactive SMS without promo code
VePromote Promo Codes Transaction generated by VePromote Promo Code
VePromote Transaction generated by VePromote without promo code
VePanel Promo Codes Transaction generated by VePanel Promo Code
VePanel Transaction generated by VePanel without promo code
VeAssist Transaction generated by VeAssist via tracking cookie without promo code
VePrompt Advanced Transaction generated by VePrompt Advanced via tracking cookie without promo code
VePrompt Feedback Transaction generated by VePrompt Feedback via tracking cookie without promo code
VePrompt Prompt Transaction generated by VePrompt Prompt via tracking cookie without promo code
VePrompt Proactive Email Transaction generated by VePrompt Proactive Email via tracking cookie without promo code
VePrompt Proactive SMS Transaction generated by VePrompt Proactive SMS via tracking cookie without promo code
VePromote Transaction generated by VePromote via tracking cookie without promo code
VePanel Transaction generated by VePanel via tracking cookie without promo code

The "transactionStatus" parameter supports the following values.

Name Description
Pending Describes the first state of a transaction
Approved Describes the status, after customer validation
Cancelled (sold out) Cancelled (sold out)
Cancelled (payment not cleared) Cancelled (payment not cleared)
Cancelled (customer cancel) Cancelled (customer cancel)
Cancelled (fraud) Cancelled (fraud)
Approved Waiting for min commision
Cancel (sold out) Waiting for min commision
Cancelled (payment not cleared) Waiting for min commision
Cancelled (customer cancel) Waiting for min commision
Cancelled (fraud) Waiting for min commision
Approved Invoiced, charge
Cancelled (sold out) Invoiced, no charge
Cancelled (payment not cleared) Invoiced, no charge
Cancelled (customer cancel) Invoiced, no charge
Cancelled (fraud) Invoiced, no charge
Approved Paid
Cancelled (sold out) paid, no charge
Cancelled (payment not cleared) paid, no charge
Cancelled (customer cancel) paid, no charge
Cancelled (fraud) paid, no charge
Cancelled (auto cancel) Cancelled (Total or Order number not captured)
Cancelled (auto cancel) Waiting for min commision
Cancelled (auto cancel) Invoiced, no charge
Cancelled (auto cancel) paid, no charge
Sent to Recurly The transaction has been sent to recurly
Autocancelled not processed by Recurly The transaction is autocancelled and has not been sent to recurly
Cancelled not processed by Recurly The transaction is cancelled and has not been sent to recurly
Trial Period not processed by Recurly The transaction is in trial period has not been sent to recurly

The values for the "currency" parameter are in ISO2 format. More details can be found here.

Request parameters:

  • transactionid: Ve’s internal ID for the transaction.
  • domain: If you are an Agency, use the domain of your merchant. If you are an individual company with a single Ve account, you can leave this empty.
  • country: Allows you to specify the country in which a certain account is running – applicable for agencies where the customer has multiple accounts across a number of territories.
  • transactionType: Type of transaction, as listed previously.
  • transactionStatus: Status of the transaction, as listed previously.
  • subinvoiceId: Ve’s internal ID for the subinvoice that the transaction belongs to.
  • datefrom: For searching purposes. When setting this parameter, the search will pull the transactions generated from this date on.
  • dateTo: For searching purposes. When setting this parameter, the search will pull all of the transactions generated up until this date.

Try it

Request URL

Request parameters

(optional)
number
(optional)
string
(optional)
string
(optional)
string
(optional)
string
(optional)
number
(optional)
dateTime
(optional)
dateTime

Request headers

string
Subscription key which provides access to this API. Found in your Profile.

Request body

Response 200

List of transactions.

{
  "transactions": [
    {
      "transactionId": 0,
      "transactionType": "string",
      "transactionStatus": "string",
      "creationDate": "2016-12-09T11:02:07.216Z",
      "modifiedDate": "2016-12-09T11:02:07.216Z",
      "subInvoiceId": 0,
      "commission": 0,
      "commissionType": "string",
      "orderNumber": "string",
      "total": 0,
      "currency": "string",
      "invoiceCurrency": "string",
      "conversionValue": 0,
      "email": "string",
      "promoCodeName": "string",
      "checkOutDate": "2016-12-09T11:02:07.216Z"
    }
  ]
}

Response 400

Invalid request data.

{
  "message": "The request is invalid.",
  "details": {
    "invoiceId": "The 'invoiceId' field is required."
  }
}

Response 401

You are unauthorised for this action.

Response 500

Internal server error.

Code samples

@ECHO OFF

curl -v -X GET "https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions?transactionId={number}&domain={string}&country={string}&transactionType={string}&transactionStatus={string}&subinvoiceId={number}&dateFrom={dateTime}&dateTo={dateTime}"
-H "Ocp-Apim-Subscription-Key: {subscription key}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");

            // Request parameters
            queryString["transactionId"] = "{number}";
            queryString["domain"] = "{string}";
            queryString["country"] = "{string}";
            queryString["transactionType"] = "{string}";
            queryString["transactionStatus"] = "{string}";
            queryString["subinvoiceId"] = "{number}";
            queryString["dateFrom"] = "{dateTime}";
            queryString["dateTo"] = "{dateTime}";
            var uri = "https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions?" + queryString;

            var response = await client.GetAsync(uri);
        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions");

            builder.setParameter("transactionId", "{number}");
            builder.setParameter("domain", "{string}");
            builder.setParameter("country", "{string}");
            builder.setParameter("transactionType", "{string}");
            builder.setParameter("transactionStatus", "{string}");
            builder.setParameter("subinvoiceId", "{number}");
            builder.setParameter("dateFrom", "{dateTime}");
            builder.setParameter("dateTo", "{dateTime}");

            URI uri = builder.build();
            HttpGet request = new HttpGet(uri);
            request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
            "transactionId": "{number}",
            "domain": "{string}",
            "country": "{string}",
            "transactionType": "{string}",
            "transactionStatus": "{string}",
            "subinvoiceId": "{number}",
            "dateFrom": "{dateTime}",
            "dateTo": "{dateTime}",
        };
      
        $.ajax({
            url: "https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions?" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
            },
            type: "GET",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                         @"transactionId={number}",
                         @"domain={string}",
                         @"country={string}",
                         @"transactionType={string}",
                         @"transactionStatus={string}",
                         @"subinvoiceId={number}",
                         @"dateFrom={dateTime}",
                         @"dateTo={dateTime}",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"GET"];
    // Request headers
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Ocp-Apim-Subscription-Key' => '{subscription key}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
    'transactionId' => '{number}',
    'domain' => '{string}',
    'country' => '{string}',
    'transactionType' => '{string}',
    'transactionStatus' => '{string}',
    'subinvoiceId' => '{number}',
    'dateFrom' => '{dateTime}',
    'dateTo' => '{dateTime}',
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_GET);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.urlencode({
    # Request parameters
    'transactionId': '{number}',
    'domain': '{string}',
    'country': '{string}',
    'transactionType': '{string}',
    'transactionStatus': '{string}',
    'subinvoiceId': '{number}',
    'dateFrom': '{dateTime}',
    'dateTo': '{dateTime}',
})

try:
    conn = httplib.HTTPSConnection('api.veinteractive.com')
    conn.request("GET", "/InvoicingApiSandbox/GetTransactions?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.parse.urlencode({
    # Request parameters
    'transactionId': '{number}',
    'domain': '{string}',
    'country': '{string}',
    'transactionType': '{string}',
    'transactionStatus': '{string}',
    'subinvoiceId': '{number}',
    'dateFrom': '{dateTime}',
    'dateTo': '{dateTime}',
})

try:
    conn = http.client.HTTPSConnection('api.veinteractive.com')
    conn.request("GET", "/InvoicingApiSandbox/GetTransactions?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://api.veinteractive.com/InvoicingApiSandbox/GetTransactions')

query = URI.encode_www_form({
    # Request parameters
    'transactionId' => '{number}',
    'domain' => '{string}',
    'country' => '{string}',
    'transactionType' => '{string}',
    'transactionStatus' => '{string}',
    'subinvoiceId' => '{number}',
    'dateFrom' => '{dateTime}',
    'dateTo' => '{dateTime}'
})

if uri.query && uri.query.length > 0
    uri.query += '&' + query
else
    uri.query = query
end

request = Net::HTTP::Get.new(uri.request_uri)
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body