Loza CRM
Loza CRM

Working with integrations and API

Complete guide for integrating Loza CRM with landing pages, trackers, and external services. Webhooks, Postbacks, REST API, widgets, field automation, and ready-to-use code examples.

01 · Intro

Introduction to Loza CRM API

1
Copy your API key
In account settings → API & Keys
2
Create a campaign
Get Campaign ID from CRM
3
Set up landing page
POST /api/leads on form submit
4
Set up postback
For tracker: GET /postback/{api_key}
10ms
Postback speed
From receipt to processing — 10 milliseconds
15ms
Data processing
Hundreds of thousands of records without delays
99.9%
Uptime
Uninterrupted operation 24/7
Architecture without analogs: Loza CRM is built on a well-designed and clear architecture that no other competitors have. Thanks to distributed data processing, the CRM can process hundreds of thousands of records in 15 milliseconds or faster — without delays or performance loss under load.
Base URL: https://api.connects.loza-crm.com · All requests require the header X-API-Key: YOUR_KEY, except public postback endpoints.

Authentication

Every request to protected endpoints must contain the header X-API-Key. The key is located in the Integrations → API & Keys section.

headers.http
Content-Type: "application/json" X-API-Key: "YOUR_KEY"
200
OK — request successful
401
Unauthorized — invalid key
429
Too Many Requests — rate limit

System workflow

Landing click → CRM
VisitorTracker scriptPOST /api/clickCRM logs click302 redirect
Landing lead → CRM
FormPOST /api/leadsCRM savesAuto-fieldsWebhooksTracker/Zapier/n8n
Tracker conversion → CRM
ConversionGET /postback/{api_key}?click_id=X&status=depositCRM updates lead (10ms)
Broker → CRM
Broker approvesPOST /api/postback {click_id, status}CRM updatesWebhook to Telegram
The diagram covers 99% of arbitrage traffic scenarios
02 · Webhooks

Webhooks

Outgoing webhooks
CRM sends a POST to your URL on every event. Use for Zapier, Make, n8n, or your own server.
lead_created
status_changed
deposit
ftd
reject
fraud
Incoming / Postbacks
External services (trackers, brokers) send data to CRM. CRM receives and updates the lead status.
GET/postback/{api_key}Postback from tracker
POST/api/postbackPostback from broker
POST/api/leadsReceive lead

Outgoing webhook format

CRM sends Content-Type: application/json. If a secret is specified — the X-Webhook-Secret header contains an HMAC-SHA256 signature of the body.
webhook-payload.json
{ "event": "lead_created", "timestamp": "2024-01-15T10:30:00Z", "data": { "id": "uuid", "crm_uid": "lz12345678", // unique ID in CRM "name": "John Smith", "phone": "+380501234567", "status": "new", "campaign": "campaign-uuid", "click_id": "abc123", // from tracker "source": "facebook" } }

Event types

lead_created
New lead
status_changed
Status changed
deposit
Deposit confirmed
ftd
FTD (first deposit)
reject
Rejected
fraud
Fraud status

Setting up a webhook in CRM

1
Go to Integrations → Webhooks → Add webhook
2
Specify your server URL (Zapier / Make / your own endpoint)
3
Select the events you want to receive
4
Optionally specify a secret for HMAC signing
5
Click Save — webhooks will start arriving immediately

Integration catalog

CRM supports direct integrations with popular services. Setup takes a few minutes — each service has step-by-step instructions in the Integrations → Services section.

Trackers
KeitaroBinomVoluumRedTrackBeMobCPV LabAffiseEverflowTrackierCustom
Messengers
Telegram BotDiscord WebhookSlack
Pixels (S2S)
Facebook / Meta CAPITikTok PixelGoogle Ads Offline
Analytics
Google Analytics 4Yandex.MetrikaGoogle Sheets
03 · API

API Variations

All requests go to https://api.connects.loza-crm.com. Protected endpoints require the X-API-Key header.

POST /api/leads — receive a lead

The main endpoint. Called from the landing page when a visitor fills out a form. The lead instantly appears in CRM, gets linked to a campaign, and statistics are updated. CRM automatically calculates, finds, and fills in missing fields — country, language, geo tier, UTM tags, and other data are determined on the fly.

Automatic field population: CRM determines the country by IP, calculates the geo tier (Tier 1/2/3), fills in UTM tags from the landing page URL, and generates a unique crm_uid and client_id. You only need to pass the first name and phone — CRM calculates the rest.
Parameter
Required
Description
fname
required
First name (John)
lname
required
Last name (Smith)
mname
optional
Middle name — optional
phone
required
Phone in any format (+380501234567)
email
optional
Email address
country
optional
Country — ISO code. Auto-detected by IP
language
optional
Client language. Auto-detected by country
geo_tier
optional
Geo tier (Tier1/2/3). Auto-calculated
campaign
optional
Campaign ID from CRM
click_id
optional
Click ID from tracker — for postbacks
source
optional
Source: facebook, google, tiktok...
network
optional
Affiliate network / broker
offer
optional
Offer ID from CRM
landing
optional
Landing page URL or ID
utm_source
optional
Auto-extracted from URL
utm_medium
optional
Auto-extracted from URL
utm_campaign
optional
Auto-extracted from URL
utm_term
optional
Auto-extracted from URL
utm_content
optional
Auto-extracted from URL
deposit_amount
optional
Deposit amount (number)
deposit_date
optional
Deposit date (ISO 8601)
payout
optional
Partner payout (number)
request.json
// POST https://api.connects.loza-crm.com/api/leads { "fname": "John", "lname": "Smith", "mname": "Robert", // optional "phone": "+380501234567", "email": "john@gmail.com", "country": "UA", "campaign": "CAMPAIGN_ID", // from Campaigns section "click_id": "abc123xyz", // from tracker "source": "facebook" }
Success (200)
{ "success": true, "id": "lead-uuid", "crm_uid": "lz12345678" }
Errors
401 Invalid X-API-Key
429 Plan limit or campaign cap
200 dup Duplicate — lead already exists

Receiving leads via a single URL

Must-have feature: Connect lead reception with just one URL. No need to write code or install scripts — simply use a postback URL with your API key. Any tracker or broker can send data to this URL, and CRM will automatically create a lead, link it to a campaign, and update statistics.
GEThttps://api.connects.loza-crm.com/postback/YOUR_API_KEY?click_id=abc123&status=lead

One URL — and leads start flowing into CRM. Works with any tracker (Keitaro, Binom, Voluum, RedTrack, BeMob, etc.), broker networks, and custom solutions.

GET /api/leads — list leads

Get a list of leads with filtering. Requires authorization.

request.http
GET https://api.connects.loza-crm.com/api/leads ?campaign = CAMPAIGN_ID &status = deposit // filter by status &limit = 50 X-API-Key: YOUR_KEY

PUT /api/clients/:id — update status

update-status.json
PUT https://api.connects.loza-crm.com/api/clients/UUID X-API-Key: YOUR_KEY { "status": "deposit", "payout": 25 }
04 · Campaigns

Campaigns & WAT Tokens

2 min
Campaign creation
From clicking "Create" to working state
< 5 min
Full setup
Campaign + landing + WAT + postback
1 click
WAT generation
Token is created instantly and automatically
Everything in 5 minutes: Create a campaign, connect a landing page by URL, generate a WAT token, and start receiving leads — all in less than five minutes. No complex settings, servers, or code. CRM does everything for you.

Step 1 — Create a campaign (2 minutes)

1
Open the "Campaigns" section → click "Create"
Specify a name, select an offer and network
30 sec
2
Configure parameters
Geo, language, limits, schedule, cap
60 sec
3
Choose traffic source
Facebook, Google, TikTok, or custom
15 sec
4
Click "Save" — campaign is ready
Campaign ID is generated automatically
15 sec

Step 2 — Connect a landing page by URL

No code required: Simply specify your landing page URL in the campaign settings. CRM automatically generates a tracker script and links the landing page to the campaign. No server changes needed — just insert one JS snippet.
What happens automatically
CRM checks landing page availability
Generates a unique JS snippet for the campaign
Links the landing page to the campaign via Campaign ID
Activates click tracking via POST /api/click
JS snippet (generated instantly)
campaign-snippet.html
<!-- Loza CRM: Campaign Tracker --> <script src=="https://loza-crm.pages.dev/embed.js" data-api-key=="YOUR_API_KEY" data-campaign=="CAMPAIGN_ID" data-wat=="WAT_TOKEN" // auto-generated data-auto-utm=="true" ></script>

Step 3 — WAT token: linking and protection

WAT (Web Attribution Token) — must-have: A unique token that CRM generates instantly when creating a campaign. The token is strictly bound to a specific campaign — through it, the campaign can only receive leads. No data modifications, deletions, or access to other campaigns. WAT works both via URL and through a JS snippet.
WAT via URL
wat-url.http
GET https://api.connects.loza-crm.com/postback/KEY ?click_id = abc123 &status = lead &wat = WAT_TOKEN // campaign token
WAT in JS snippet
wat-js.html
<script src=="https://loza-crm.pages.dev/embed.js" data-campaign=="CAMPAIGN_ID" data-wat=="WAT_TOKEN" ></script>
Lead reception only
WAT token only allows creating leads — no edits, deletions, or data access
Campaign binding
Token is bound to a specific campaign — cannot be used for another
Instant generation
Token is created automatically when creating a campaign — no manual actions
Anti-fraud & protection
Every lead is checked: IP, duplicates, fill patterns, speed, geo match

Step 4 — Anti-fraud and campaign protection

Built-in protection
IP checkBlock proxies, VPNs, data centers
DuplicatesAuto-detect duplicates by phone and email
Geo matchCompare IP country with declared one
Fill speedDetect bots by form fill time
Fraud patternsAnalyze sequences and anomalies
Fraud ScoreEach lead gets a 0–100 score
Campaign control
CapLead limit per day / week / month
Blocked GEOBlacklist of countries for the campaign
ScheduleDays and hours for receiving leads
RotationAuto-switching between campaigns
SourcesLinking traffic sources to the campaign
StatusesAuto-status change: active → paused → stopped

Final workflow — 5 minutes to first leads

1
Create a campaign
Name, offer, geo, limits
2 min
2
Specify landing page URL
CRM generates JS snippet automatically
1 min
3
Insert JS snippet on site
One <script> tag — and clicks are tracked
1 min
4
WAT token is active
Already bound to campaign, protection enabled
0 min
5
Set up postback
Postback URL in tracker — and leads start flowing
1 min
Total:< 5 minutes
05 · Postbacks

Postbacks

10ms
Processing speed
Postback is processed in 10 milliseconds
0
Data loss
Guaranteed delivery of every postback
Limits
No limits on the number of postbacks

GET /postback/{api_key} — postback from tracker

When a tracker records a conversion — it calls this URL. Public endpoint — authorization via api_key in the URL, no X-API-Key header needed. Processing takes 10 milliseconds — the postback is received and recorded instantly.
1
Visitor clicks
Tracker generates click_id
2
Lead → CRM
click_id is passed
3
Conversion in tracker
Tracker sends GET postback
4
CRM updates
deposit / reject / ftd
GEThttps://api.connects.loza-crm.com/postback/{{api_key}}?click_id={{click_id}}&status={{status}}&payout={{payout}}
Parameter
Required
Description
click_id
required
Click ID — same as provided when creating the lead
status
required
lead · deposit · reject · ftd · callback · interested
payout
optional
Payout amount as a number (25 or 25.50)
Ready URL examples for tracker
Deposit $25https://api.connects.loza-crm.com/postback/KEY?click_id=abc123&status=deposit&payout=25
FTDhttps://api.connects.loza-crm.com/postback/KEY?click_id=abc123&status=ftd&payout=40
Rejectedhttps://api.connects.loza-crm.com/postback/KEY?click_id=abc123&status=reject
Callbackhttps://api.connects.loza-crm.com/postback/KEY?click_id=abc123&status=callback
Keitaro / Binom
1
Keitaro → Conversions → Postbacks → Add
2
URL: https://api.connects.loza-crm.com/postback/YOUR_KEY?click_id={click_id}&status=deposit&payout={payout}
3
Binom → Campaigns → Postback URL → paste URL
4
Macro: {click_id} or {subid}
Voluum / RedTrack / BeMob
1
Voluum → Settings → Postback URL
2
URL: https://api.connects.loza-crm.com/postback/YOUR_KEY?click_id={clickId}&status={status}
3
RedTrack → Integration → Postback
4
BeMob → Offer → Postback URL

WAT tokens

Must-have feature: WAT (Web Attribution Token) — unique attribution tokens that Loza CRM generates and binds to each click. The token ensures that the postback from the tracker will be matched with the correct lead, even if the click_id was lost or changed. WAT token works as an additional identifier ensuring 100% conversion attribution accuracy.
Passing WAT token
wat-token.json
GET https://api.connects.loza-crm.com/postback/KEY ?click_id = abc123 &status = deposit &wat = TOKEN_VALUE // WAT token
Benefits
100% attributionPrecise conversion matching
Loss protectionWorks even without click_id
Anti-fraudConversion authenticity check
UniversalCompatible with any tracker

POST /api/postback — postback from broker

A broker (Dr.Cash, Leadbit, CPA network) sends a POST when a lead is approved or makes a deposit. CRM finds the lead by click_id or crm_uid and updates the status.
Request body
postback-broker.json
{ "click_id": "abc123xyz", "status": "deposit", "payout": 25.00, "owner_id": "YOUR_OWNER_ID" }
Statuses (status field)
leadNew lead
depositMade a deposit
ftdFirst deposit (FTD)
rejectRejected / invalid
callbackRequests callback
interestedInterested
06 · Widgets

Widgets & Forms

Loza CRM can generate multiple widgets — embeddable forms for direct use on your website. Each widget can be configured individually and connected to any campaign. Forms automatically read UTM parameters from the URL and pass them to CRM.

Widget generation

In the Integrations → Tools → Embed forms section you can create a widget with the required fields, configure the theme, language, button text, and success message. CRM will generate ready-to-use code for embedding on your site.

Multiple widgets
Create unlimited forms
Auto-UTM
Parameters from URL are filled automatically
Campaign binding
Each widget connects to its own campaign

Embed code

The script loads from CDN and automatically renders the form on your website. All data is sent directly to CRM.

embed-widget.html
<!-- Loza CRM Form: My Form --> <script src=="https://loza-crm.pages.dev/embed.js" data-api-key=="YOUR_API_KEY" data-campaign=="CAMPAIGN_ID" data-fields=="name,phone,email,country" data-title=="Submit your application" data-btn-text=="Submit" data-theme=="dark" data-lang=="EN" data-success=="Thank you! We will contact you soon." ></script>

Widget parameters

Parameter
Required
Description
data-api-key
required
Your API key from CRM
data-campaign
optional
Campaign ID for linking leads
data-fields
required
Comma-separated list of fields: name,phone,email,country
data-title
optional
Form title
data-btn-text
optional
Submit button text
data-theme
optional
Theme: dark or light
data-lang
optional
Form language: RU, EN, DE, ES, FR...
data-success
optional
Message after successful submission

Anti-fraud

CRM includes a built-in anti-fraud system that analyzes every lead: checks IP, duplicates, fill patterns, and other factors. The fraud log is available in the Integrations → Tools → Anti-fraud section.

Tracker script for landing page

To track clicks on your landing page — insert the tracker script. It sends data about every click to CRM via POST /api/click.

tracker-script.html
<!-- Loza CRM Tracker --> <script> (function(){ var utm="direct";var srcVar="utm_source"; var lid="";var cid=""; var endpoint="https://api.connects.loza-crm.com/api/click"; var payload={landing_id:lid,campaign_id:cid,utm_source:utm,source_variable:srcVar,ts:new Date().toISOString(),url:location.href}; try{navigator.sendBeacon&&navigator.sendBeacon(endpoint,JSON.stringify(payload));}catch(e){ var xhr=new XMLHttpRequest();xhr.open("POST",endpoint,true); xhr.setRequestHeader("Content-Type","application/json");xhr.send(JSON.stringify(payload)); } })(); </script>
07 · Clients

Clients & Data Fields

CRM automatically calculates, finds on the landing page, and generates client fields when filling out a form. You don't need to pass all data manually — the system determines country, language, geo tier, fills in UTM tags, and creates unique identifiers on its own.

Automatically generated fields

crm_uidUnique client ID in CRM (lz12345678)auto
client_idInternal client IDauto
click_idClick ID from tracker
countryDetermined by IP addressauto
languageDetermined by countryauto
geo_tierTier 1/2/3 — calculated by countryauto
ip_addressVisitor IP addressauto
sourceTraffic source
utm_*All UTM tags — extracted from URLauto
date_creationLead creation date and timeauto
fraud_scoreFraud score (anti-fraud system)auto
client_typeType: real, demo, testauto

Full list of lead fields

CRM works with the following fields. Some you provide, some CRM generates automatically.

click_idclient_idstatusnamedate_creationfirst_namelast_namemiddle_namephoneemailcountrylanguagegeo_tiersourcenetworklandingoffercampaign_namecrm_uidip_addresspayoutdeposit_amountdeposit_dateutm_sourceutm_mediumutm_campaignutm_termutm_content

Client management

Client types
Real, Demo, Test — CRM automatically determines the type by behavior
Campaign rotation
CRM tracks rotation_count and switches campaigns
Comments & logs
Every client has a change history and comments
Data export
Export to Excel with filters by status, country, campaign

Data import and export

CRM supports bulk import of clients from CSV/TXT files. During import, data is automatically normalized: phone numbers are formatted uniformly, country is determined by name or ISO code, name is split into first_name / last_name / middle_name. Headers in both Russian and English are supported.
import-format.csv
first_name,last_name,middle_name,phone,email,country, John,Smith,Robert,+491701234567,john@example.com,DE
08 · Reference

Reference & Endpoints

Base URL: https://api.connects.loza-crm.com · Auth: X-API-Key: YOUR_KEY in every protected request
Method
Endpoint
Description
Auth
POST
/api/leadsReceive a lead from landing/trackerX-API-Key
GET
/postback/{api_key}Postback from tracker (public)public
POST
/api/postbackStatus postback from brokerpublic
POST
/api/clickTracker click from landing pagepublic
POST
/api/leads/importBulk import (up to 500 leads)X-API-Key
GET
/api/leadsList leads with filtersX-API-Key
GET
/api/clientsList clientsX-API-Key
GET
/api/clients/:idClient by IDX-API-Key
PUT
/api/clients/:idUpdate client statusX-API-Key
GET
/api/clients/:id/logsClient logsX-API-Key
POST
/api/clients/:id/commentsAdd a commentX-API-Key
GET
/api/campaignsList campaignsX-API-Key
GET
/api/offersList offersX-API-Key
GET
/api/landingsList landing pagesX-API-Key
GET
/api/integrationsConnected integrationsX-API-Key
GET
/api/stats/dashboardDashboard statisticsX-API-Key
GET
/api/analytics/realtimeReal-time analyticsX-API-Key
GET
/api/postback-logsPostback logsX-API-Key
GET
/api/blocked-geosBlocked GEOsX-API-Key
GET
/healthHealth checkpublic
09 · Examples

Ready Examples

cURL — test request (paste in terminal)

terminal.sh
curl -X POST "https://api.connects.loza-crm.com/api/leads" \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_KEY" \ -d '{"fname":"John","lname":"Smith", "phone":"+380501234567","country":"UA", "campaign":"CAMPAIGN_ID","click_id":"test001"}'

PHP — landing page (form handler)

landing-handler.php
<?php $data = [ 'fname' => $_POST['fname'], 'lname' => $_POST['lname'], 'mname' => $_POST['mname'] ?? '', 'phone' => $_POST['phone'], 'country' => 'UA', 'campaign' => 'CAMPAIGN_ID', // ID from CRM 'click_id' => $_GET['click_id'] ?? '', // from tracker ]; $ch = curl_init('https://api.connects.loza-crm.com/api/leads') ; curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-API-Key: ' . $apiKey, ], ]); $result = json_decode(curl_exec($ch), true); curl_close($ch);

Node.js / Express — handle incoming webhook

webhook-handler.js
app.post('/webhook' , (req, res) => { const { event, data } = req.body; if (event === 'lead_created') { console.log('New lead:', data.name, data.phone); } if (event === 'deposit') { console.log('Deposit:' , data.crm_uid,' payout:' , data.payout); } res.json({ ok: true }); });

JavaScript (fetch) — lead from landing page

landing.js
async function sendLead(formData) { const res = await fetch('https://api.connects.loza-crm.com/api/leads', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': YOUR_KEY, }, body: JSON.stringify({ fname: formData.get('fname'), lname: formData.get('lname'), phone: formData.get('phone'), country: 'UA', campaign: 'CAMPAIGN_ID', click_id: new URLSearchParams(location.search).get('click_id') ?? '' , }), }); const result = await res.json(); return result; }

Python (requests) — send a lead

send_lead.py
import requests API_BASE = "https://api.connects.loza-crm.com" API_KEY = "YOUR_KEY" def send_lead(fname, lname, phone, campaign_id, click_id=""): resp = requests.post( f"https://api.connects.loza-crm.com/api/leads", headers={"Content-Type": "application/json", "X-API-Key": API_KEY}, json={ "fname": fname, "lname": lname, "phone": phone, "country": "UA", "campaign": campaign_id, "click_id": click_id, } ) return resp.json() result = send_lead("John", "Smith", "+380501234567", "CAMPAIGN_ID", "abc123") print(result)