Skip to content

Authentication

To sign requests, you can use the following code examples that demonstrate how to authenticate with the Uniwire API using HMAC-SHA256 signatures.

API Keys

You can obtain API Keys by logging in and creating a key in Settings > API Keys. This will give you both an "API Key" that will serve as your user name, and an "API Secret" that you will use to sign messages.

Request Requirements

All requests must contain a nonce, a number that will never be repeated and must increase between requests. This is to prevent an attacker who has captured a previous request from simply replaying that request. We recommend using a timestamp at millisecond or higher precision. The nonce need only be increasing with respect to the session that the message is on.

Payload

The payload of the requests must be a JSON object, which will be described in the documentation below. Rather than being sent as the body of the POST request, it will be base-64 encoded and stored as a header in the request.

TIP

Do not submit payload as POSTed data, but instead put it in the X-CC-PAYLOAD header.

Required Headers

The following three headers is all that is required to make requests to Uniwire API:

HeaderValue
X-CC-KEYYour Uniwire API Key
X-CC-PAYLOADBase64-encoded JSON payload
X-CC-SIGNATUREhex(HMAC_SHA256(base64(payload), key=api_secret))

Client Examples

python
import base64
import hashlib
import hmac
import json
import time
import requests

API_URL = 'https://api.uniwire.com'
API_KEY = 'my_api_key'
API_SECRET = 'my_api_secret'


def encode_hmac(key, msg, digestmod=hashlib.sha256):
    return hmac.new(key.encode(), msg=msg, digestmod=digestmod).hexdigest()


def uniwire_api_request(endpoint, payload=None, method='GET'):
    payload_nonce = str(int(time.time() * 1000))
    payload = payload or {}
    payload.update({'request': endpoint, 'nonce': payload_nonce})

    # Encode payload to base64 format and create signature using your API_SECRET
    encoded_payload = json.dumps(payload).encode()
    b64 = base64.b64encode(encoded_payload)
    signature = encode_hmac(API_SECRET, b64)

    # Add your API key, encoded payload and signature to following headers
    request_headers = {
        'X-CC-KEY': API_KEY,
        'X-CC-PAYLOAD': b64,
        'X-CC-SIGNATURE': signature,
    }

    # Make request
    response = requests.request(method, API_URL + endpoint, headers=request_headers)
    return response.json()


profiles = uniwire_api_request('/v1/profiles/')
print(json.dumps(profiles, indent=2))
javascript
const axios = require('axios');
const Base64 = require('js-base64').Base64;
const crypto = require('crypto');

const API_URL = 'https://api.uniwire.com';
const API_KEY = 'my_api_key';
const API_SECRET = 'my_api_secret';

function encode_hmac(key, msg) {
    return crypto.createHmac('sha256', key).update(msg).digest('hex');
}

function uniwire_api_request(endpoint, payload = {}, method = 'GET') {
    payload.request = endpoint;
    payload.nonce = (new Date).getTime();

    // Encode payload to base64 format and create signature using your API_SECRET
    const encoded_payload = JSON.stringify(payload);
    const b64 = Base64.encode(encoded_payload);
    const signature = encode_hmac(API_SECRET, b64);

    // Add your API key, encoded payload and signature to following headers
    let request_headers = {
        'X-CC-KEY': API_KEY,
        'X-CC-PAYLOAD': b64,
        'X-CC-SIGNATURE': signature,
    };

    return axios({
        method: method,
        url: API_URL + endpoint,
        headers: request_headers,
    });
}

uniwire_api_request('/v1/profiles/').then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});
php
function cryptochill_api_request($endpoint, $payload = [], $method = 'GET'){
    $API_URL = 'https://api.cryptochill.com';
    $API_KEY = 'your_api_key';
    $API_SECRET = 'your_secret';

    $payload['request'] = $endpoint;
    $payload['nonce'] = time();

    // Encode payload to base64 format and create signature using your API_SECRET
    $encoded_payload = json_encode($payload, JSON_UNESCAPED_SLASHES);
    $b64 = base64_encode($encoded_payload);
    $signature = hash_hmac('sha256', $b64, $API_SECRET);

    // Add your API key, encoded payload and signature to following headers
    $request_headers = [
        'X-CC-KEY: ' . $API_KEY,
        'X-CC-PAYLOAD: ' . $b64,
        'X-CC-SIGNATURE: ' . $signature,
    ];

    $result = file_get_contents($API_URL . $endpoint, null, stream_context_create(array(
        'http' => array(
            'method' => $method,
            'header' => implode("\r\n", $request_headers),
            'ignore_errors' => true,
            'content' => $encoded_payload)
        )
    ));

    return $result;
}