Skip to main content

Installation

Install via Composer:
composer require cms

Requirements

  • PHP 7.4 or higher
  • Composer for dependency management
  • cURL extension enabled

Quick Start

<?php
require_once __DIR__ . '/vendor/autoload.php';

use CutMeShort\SDK\Client;

$client = new Client();
$client->setAccessToken('your_api_token_here')
    ->setDebug(true);

$trackingApi = $client->getTrackingApi();

Non-Deferred Lead Tracking

Track lead events when you have all the required information available immediately, including the clickId.
<?php
require_once __DIR__ . '/vendor/autoload.php';

use CutMeShort\SDK\Client;
use CutMeShort\SDK\Models\LeadPayload;

$client = new Client();
$client->setAccessToken('your_api_token_here');

$trackingApi = $client->getTrackingApi();

// Create and track a lead with complete payload
$leadPayload = new LeadPayload();
$leadPayload->setClickId('clickid')
    ->setCustomerExternalId('user_123')
    ->setEventName('signup')
    ->setCustomerName('John Doe')
    ->setCustomerEmail('john@example.com');

try {
    $response = $trackingApi->trackLead($leadPayload);
    
    if ($response->getStatus()) {
        echo "✅ Lead Tracking successful!\n";
        echo "Message: " . $response->getData() . "\n";
    } else {
        echo "❌ Lead Tracking failed\n";
        echo "Error: " . $response->getData() . "\n";
    }
} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

Lead Payload Methods

  • setClickId(string $clickId) - The unique click identifier
  • setEventName(string $eventName) - Name of the lead event (e.g., “signup”, “email_verified”)
  • setCustomerExternalId(string $id) - Your internal customer identifier
  • setCustomerName(string $name) - Full name of the customer
  • setCustomerEmail(string $email) - Customer’s email address
  • setCustomerAvatar(string $url) - URL to customer’s avatar/profile picture
  • setTimestamp(string $timestamp) - ISO 8601 timestamp (auto-set if not provided)

Deferred Lead Tracking

Use deferred mode for two-step lead attribution when the clickId isn’t available at the time of the initial event.

Step 1: Store the clickId Association

<?php
require_once __DIR__ . '/vendor/autoload.php';

use CutMeShort\SDK\Client;
use CutMeShort\SDK\Models\LeadPayload;

$client = new Client();
$client->setAccessToken('your_api_token_here');

$trackingApi = $client->getTrackingApi();

// Step 1: Create initial lead with deferred mode
$payload = new LeadPayload();
$payload->setClickId('clickid')
    ->setMode('deferred')
    ->setEventName('signup')
    ->setCustomerExternalId('user_123')
    ->setCustomerName('John Doe')
    ->setCustomerEmail('john@example.com');

try {
    $response = $trackingApi->trackLead($payload);
    
    if ($response->getStatus()) {
        echo "✅ Deferred Lead Tracking initialized!\n";
        echo "Stored clickId association with customerExternalId\n";
    } else {
        echo "❌ Failed to initialize deferred lead tracking\n";
    }
} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

Step 2: Track Using Only customerExternalId

<?php
require_once __DIR__ . '/vendor/autoload.php';

use CutMeShort\SDK\Client;
use CutMeShort\SDK\Models\LeadPayload;

$client = new Client();
$client->setAccessToken('your_api_token_here');

$trackingApi = $client->getTrackingApi();

// Step 2: Later, track using just customerExternalId (no clickId)
$followUpPayload = new LeadPayload();
$followUpPayload->setCustomerExternalId('user_123')
    ->setEventName('email_verified');

try {
    $response = $trackingApi->trackLead($followUpPayload);
    
    if ($response->getStatus()) {
        echo "✅ Follow-up Lead Tracking successful!\n";
        echo "Used stored clickId from deferred mode\n";
    } else {
        echo "❌ Follow-up Lead Tracking failed\n";
    }
} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>
Key Benefits:
  • Store click context for later use
  • Track multiple events in a user journey without losing click attribution
  • No need to maintain clickId across complex workflows

Sale Tracking

Track completed sales and revenue events with full transaction details.
<?php
require_once __DIR__ . '/vendor/autoload.php';

use CutMeShort\SDK\Client;
use CutMeShort\SDK\Models\SalePayload;

$client = new Client();
$client->setAccessToken('your_api_token_here');

$trackingApi = $client->getTrackingApi();

// Create and track a sale
$salePayload = new SalePayload();
$salePayload->setClickId('clickid')
    ->setEventName('purchase')
    ->setCustomerExternalId('user_123')
    ->setCustomerName('Jane Smith')
    ->setCustomerEmail('jane@example.com')
    ->setInvoiceId('INV-2024-001')
    ->setAmount(4999) // Amount in cents
    ->setCurrency('USD');

try {
    $response = $trackingApi->trackSale($salePayload);
    
    if ($response->getStatus()) {
        echo "✅ Sale Tracking successful!\n";
        echo "Message: " . $response->getData() . "\n";
    } else {
        echo "❌ Sale Tracking failed\n";
        echo "Error: " . $response->getData() . "\n";
    }
} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

Sale Payload Methods

  • setClickId(string $clickId) - The unique click identifier
  • setEventName(string $eventName) - Name of the sale event (e.g., “purchase”, “purchase_completed”)
  • setCustomerExternalId(string $id) - Your internal customer identifier
  • setInvoiceId(string $invoiceId) - Invoice or transaction identifier
  • setAmount(float $amount) - Amount in cents (e.g., 4999 = $49.99)
  • setCurrency(string $currency) - 3-letter currency code (e.g., “USD”, “EUR”, “INR”)
  • setCustomerName(string $name) - Customer’s name
  • setCustomerEmail(string $email) - Customer’s email
  • setCustomerAvatar(string $url) - URL to customer’s avatar
  • setTimestamp(string $timestamp) - ISO 8601 timestamp (auto-set if not provided)

Error Handling

<?php
try {
    $response = $trackingApi->trackLead($leadPayload);
    
    if ($response->getStatus()) {
        echo "✅ Success!\n";
    } else {
        echo "Error: " . $response->getData() . "\n";
    }
} catch (\Exception $e) {
    echo "Exception caught: " . $e->getMessage() . "\n";
    echo "Code: " . $e->getCode() . "\n";
}
?>

Configuration

<?php
$client = new Client();
$client->setAccessToken('your_api_token_here')
    ->setDebug(true)  // Enable debug mode
    ->setTimeout(10000) // Set timeout in milliseconds
    ->setMaxRetries(2); // Set maximum retries
?>

Documentation

For complete documentation, visit PHP SDK Docs