Docs Getting Started

Getting Started

Welcome to the Tiqora API. This guide will walk you through everything you need to start integrating your application with Tiqora's ticket management system.

Base URL

All API requests are made to:

https://api.tiqora.dev/api/v1/external

All endpoints return JSON responses. Set your Content-Type header to application/json for all requests (except file uploads which use multipart/form-data).

Step 1: Get Your API Keys

Before making API calls, you need an API key and secret. Your tenant administrator can generate these from the Tiqora dashboard:

  1. Log in to Tiqora Dashboard
  2. Navigate to Settings → API Keys
  3. Click Create API Key
  4. Give it a descriptive name (e.g., "Production CRM Integration")
  5. Copy both the API Key and API Secret — the secret is shown only once

Your API key looks like: tk_live_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2 Your API secret looks like: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Important: Store your API secret securely. It cannot be retrieved after creation. If lost, you must rotate the key to get a new secret.

Step 2: Authenticate Your Requests

Tiqora uses HMAC-SHA256 authentication. Every request must include three headers:

Header Description
x-api-key Your full API key
x-api-signature HMAC-SHA256 signature of the request
x-api-timestamp Current Unix timestamp (seconds)

See the Authentication guide for complete details on generating signatures.

Step 3: Make Your First Request

Here's a quick example to list your tickets:

cURL

# Set your credentials
API_KEY="tk_live_your_key_here"
API_SECRET="your_secret_here"
TIMESTAMP=$(date +%s)
METHOD="GET"
PATH="/api/v1/external/tickets"

# Generate signature
BODY_HASH=$(echo -n "" | openssl dgst -sha256 | awk '{print $NF}')
MESSAGE="${TIMESTAMP}${METHOD}${PATH}${BODY_HASH}"
SIGNATURE=$(echo -n "$MESSAGE" | openssl dgst -sha256 -hmac "$API_SECRET" | awk '{print $NF}')

# Make the request
curl -s https://api.tiqora.dev${PATH} \
  -H "x-api-key: ${API_KEY}" \
  -H "x-api-signature: ${SIGNATURE}" \
  -H "x-api-timestamp: ${TIMESTAMP}" \
  -H "Content-Type: application/json"

JavaScript (Node.js)

const crypto = require('crypto');

const API_KEY = 'tk_live_your_key_here';
const API_SECRET = 'your_secret_here';
const BASE_URL = 'https://api.tiqora.dev';

async function tiqoraRequest(method, path, body = null) {
  const timestamp = Math.floor(Date.now() / 1000).toString();
  const bodyString = body ? JSON.stringify(body) : '';
  const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
  const message = timestamp + method.toUpperCase() + path + bodyHash;
  const signature = crypto.createHmac('sha256', API_SECRET).update(message).digest('hex');

  const response = await fetch(BASE_URL + path, {
    method,
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': API_KEY,
      'x-api-signature': signature,
      'x-api-timestamp': timestamp,
    },
    body: bodyString || undefined,
  });

  return response.json();
}

// List tickets
const tickets = await tiqoraRequest('GET', '/api/v1/external/tickets');
console.log(tickets);

Python

import hashlib
import hmac
import json
import time
import requests

API_KEY = 'tk_live_your_key_here'
API_SECRET = 'your_secret_here'
BASE_URL = 'https://api.tiqora.dev'

def tiqora_request(method, path, body=None):
    timestamp = str(int(time.time()))
    body_string = json.dumps(body) if body else ''
    body_hash = hashlib.sha256(body_string.encode()).hexdigest()
    message = timestamp + method.upper() + path + body_hash
    signature = hmac.new(
        API_SECRET.encode(), message.encode(), hashlib.sha256
    ).hexdigest()

    response = requests.request(
        method,
        BASE_URL + path,
        headers={
            'Content-Type': 'application/json',
            'x-api-key': API_KEY,
            'x-api-signature': signature,
            'x-api-timestamp': timestamp,
        },
        json=body,
    )
    return response.json()

# List tickets
tickets = tiqora_request('GET', '/api/v1/external/tickets')
print(tickets)

Step 4: Create a Ticket

const newTicket = await tiqoraRequest('POST', '/api/v1/external/tickets', {
  subject: 'Cannot access my account',
  description: 'I have been locked out of my account since this morning.',
  priority: 'high',
  customer: {
    email: 'jane@example.com',
    name: 'Jane Smith',
  },
});

console.log('Created ticket:', newTicket.data.ticket_number);

Hint: If a customer with the given email doesn't exist, Tiqora automatically creates one. No need to call the customers endpoint first.

What's Next?