On this page
A lead is a customer's request: a name, a phone number, and data about where the customer came from. Through the API you send such requests from your own form or script, then check what happened to each one: whether it was approved, is waiting for its commission, or was declined. The leads app has two functions for this. leads/add sends a lead, and leads/list shows the statuses of the leads you sent.
The functions are the same for an affiliate, an agency and a company, and the token sets the role. Parameters and fields that only the agency and the company use are marked “Agency only:”, “Company only:” or “Agency and company only:”. An affiliate does not need them.
The request address, the token, the response formats and the common errors (key, ban) are described on the General API rules page. Lead phases and decline reasons are in the reference tables.
Affiliate: from sending to status#
-
Create a flow. A lead is always recorded on one of your flows. That is how the network knows who earns the commission. Create a flow for the offer in the cabinet (Creating a flow) or with the
wm/addfunction, then look up the flow ID in thewm/flowslist. -
Check that sending is allowed. Make sure a manager has enabled lead sending through the API for you. It is usually off by default. If sending returns the
accesserror, access has not been opened yet. Your personal manager can confirm it. -
Send the lead. Pass the offer, the flow, the customer's phone number, and everything you know about the customer and the traffic source to
leads/add. The response contains theid, which is the lead's number in the network. -
Save the number. The
idis the key for checking the status. Also pass your own request number insubid. Even if you did not save theid, you can find the lead by this tag. -
Check the status. Query
leads/listfor the lead by itsid. The platform can also tell you about changes. Set up a postback for the flow, and the platform reports the new statuses of your leads on its own.
Agency: what is different#
-
Choose an offer. You need the offer ID to send a lead. Find it on the Offers page or ask your manager.
-
Send the lead. Pass the offer, the customer's phone number, the identifier and the source on your side, and everything you know about the customer and the traffic source to
leads/add. The response contains theid, which is the lead's number in the network. -
Save the number. The
idis the key for checking the status. Always pass your own request number inextu. Even if you did not save theid, you can find the lead by this tag. It is also best to send the identifier of the affiliate on your side in theextsfield. -
Check the status. Query
leads/listbyidor byextu. This is the best way to check statuses. If your tracker cannot export statuses through the API, you can use postbacks.
Life of a lead#
Right after sending, a lead gets the “Waiting” phase (wait), and the network starts processing the order. After that the phase changes depending on the offer and the processing speed. The lead can go on hold, be approved, or be declined. What each phase means and what decline reasons exist is written in the reference tables.
An order has one state, and the leads/list response records it in two ways. phase (and its text code stage) is the order's phase for the affiliate, and it decides whether the commission is credited. The crm field is the order's status in the CRM, a number from 1 to 12. The offer's CPA model sets which phase matches which status. Statuses are described in the status reference, phases in the phase reference. The decline reason is in the reason field (reasons). If the network shows a text status, it comes in the custom field.
Test lead#
The API has no separate test flag: a test lead is an ordinary lead. It goes through the same checks (duplicates, traffic filters, GEO), counts in your statistics, earns a commission, and fires the flow's postback. So:
- Tell the network manager that you are sending a test, and choose an offer and a flow you do not mind seeing in reports.
- Put a clear tag in
subidorutm_campaign, for exampletest-001. It makes the lead easy to find inleads/listand to tell apart in reports. - For repeated checks, use the service phone number
1234567890. The duplicate check skips it. - To send a test lead without code, use the cabinet: Send lead manually. The same page explains how to run tests back to back.
leads/addAdd a lead#
https://lk.dalead.pro/api/leads/add.json?id={token}Creates a lead (for a webmaster on one of their flows, for an agency directly on the offer). The lead is created if these conditions are met:
- Sending leads through the API is allowed for your account, otherwise the response is
access. - Affiliate only: the
flowparameter holds your own flow, otherwise the response isnofloworbadflow. - The offer is available to you and accepts leads through the API, otherwise the response is
no-apiortraffic. offerandphoneare passed.
You can pass the data in the query string, in a POST form, or in a JSON body with the Content-Type: application/json header. POST is recommended. If the JSON body is broken, the platform does not notice it and responds as if there were no data, usually with the noflow error. Parameters that are not in the table are ignored.
Field names are case-insensitive: Phone and phone are the same. Many fields are accepted under several names (the “Synonyms” column), so forms built for other systems connect without rewriting.
Repeating the request creates another lead unless the network turned on duplicate protection. If the connection broke while sending, do not repeat the request blindly. First look for the lead in leads/list by your subid.
Parameters
Parameters come in blocks: first the main ones, then tags, address, order contents and additional parameters. Offers with goods and cash on delivery need the address and the order contents.
| Parameter | Type | Req. | Description |
|---|---|---|---|
offer | int | yes | Offer ID. The offer must be available to you and accept leads through the API. Take the ID from offer/list. |
flow | int | yes | ID of your flow. The flow must belong to you. An agency and a company do not pass a flow. Flow IDs are in wm/flows. |
phone | string | yes | The customer's phone number in international format, for example 79001234567: 6 to 15 digits, leading zeros do not count. The + sign, spaces, parentheses and hyphens are allowed. The number is converted to the form used in the lead's country.Aliases: tel, telephone, phone2, fullphone, full_phone |
name | string | — | The customer's name. It is saved with capital letters. If it is not passed, a placeholder is used.Aliases: fio, firstname, first_name, f_name, fname, forename, first_last_name |
last | string | — | The customer's last name. It is saved in the additional fields of the order.Aliases: lastname, last_name, l_name, lname, surname, sirname, sname, s_name |
email | string | — | The customer's email address. It is needed if the offer requires it. Without it, you get the data error (bad holds email) or the email error. The platform only checks that an address is passed, not what it looks like. |
pass | string | — | The customer's password for the advertiser's CRM. Finance and gambling offers need it. It is saved in the additional fields of the order.Aliases: password |
lang | string | — | The customer's language. It is saved in the additional fields of the order.Aliases: language, isolang, langcode |
phonecc | string | — | The customer's phone country code. It is saved in the additional fields of the order.Aliases: phonecode, phone_code, countrydialcode |
country | string | — | The customer's two-letter country code, for example ru or kz. If it is not passed, the country is detected by the phone number, then by the IP address. If both fail, the lead gets the code zz. Prices, currency and the offer's GEO check depend on the country.Aliases: geo, countryiso, countryiso2 |
comment | string | — | A comment on the order. It shows in the comment field of leads/list in the phases where the network turned comments on.Aliases: comm, comments, question |
ip | string | — | The customer's IP address, IPv4 or IPv6. If traffic filtering is on for the offer, a lead without an IP address is not accepted. The value auto fills in a random address of the lead's country. Without an IP, the lead gets 0.0.0.0.Aliases: client_ip, clientip, ip_address, ipaddress, ip_addr, ipadd |
ua | string | — | The User-Agent of the customer's browser. If bot filtering is on for the offer, a lead without a User-Agent is not accepted. |
Tags. The traffic source and your own lead identifiers.
| Parameter | Type | Req. | Description |
|---|---|---|---|
utm_source | string | — | UTM tag of the traffic source. UTM tags, domain, customer, subid, uuid and clid are cut to 250 characters.Aliases: us, utms |
utm_campaign | string | — | UTM tag of the ad campaign.Aliases: uc, utmc, utm_campaing |
utm_content | string | — | UTM tag of the ad or creative.Aliases: un, utmn |
utm_term | string | — | UTM tag of the keyword.Aliases: ut, utmt |
utm_medium | string | — | UTM tag of the traffic type.Aliases: um, utmm |
domain | string | — | The domain the lead came from.Aliases: ud, utmd, utm_domain, host |
customer | string | — | Identifier of the ad customer.Aliases: uu, utmu, utm_user, utm_customer |
subid | string | — | Click SubID, a convenient place for your own request number.Aliases: x32, sub, sub_id |
sub1 … sub5 | string | — | Additional click tags. They are cut to 255 characters.Aliases: xm1…xm5, subid1…subid5, sub_id1…sub_id5, sid1…sid5 |
uuid | string | — | Unique click identifier on the side of the traffic source.Aliases: x64 |
adid | string | — | Ad click identifier. If you pass several of its names, one value goes into the order: first uid, then clid, then the other names in the order of the list on the right. Pass the name your ad system set. Here uid is the click identifier, not the agency's order identifier, as it is in the response and in the leads/list filter.Aliases: clid, uid, fbclid, gclid, gbraid, wbraid, adclid, adsclid, rb_clickid, ttclid, ttlid, twclid, msclkid, yclid, bbg, external_id, unique_id |
extu | string | — | Agency only: the order identifier on the agency side. Use Latin letters, digits, _, - and .. The value auto or an empty value issues a sequence number, which is returned in the uid field of the response. |
exts | string | — | Agency only: the identifier of the affiliate or another traffic source on the agency side. |
exto | string | — | Company only: the order identifier on the company side. If you already have such an identifier on this offer, the lead is not created (the exto error).Aliases: order |
Address. The customer's delivery address.
| Parameter | Type | Req. | Description |
|---|---|---|---|
index | string | — | Postal code of the delivery address, for example 127000. |
area | string | — | Delivery region, for example Moscow Oblast.Aliases: region |
city | string | — | Delivery city.Aliases: geo_city |
street | string | — | Street of the delivery address. |
addr | string | — | Delivery address: the full address without the postal code if you do not use the other address fields, otherwise only the house, building, apartment or office.Aliases: house, address, adress, addres, adres |
delivery | int | — | ID of the delivery method. If it is not passed, the default method is used. |
Order contents. Goods, prices and delivery cost.
| Parameter | Type | Req. | Description |
|---|---|---|---|
currency | string | — | Three-letter currency code of the order, for example rub. If no currency is passed but country is, the currency of that country is used, even if the offer sets another one for it. An unknown code is replaced the same way when country is passed. Without country, the offer's currency for the detected country is used, and if the offer has none, the currency of the customer's country.Aliases: cur, curr |
base | float | — | Price of one unit of goods in the order currency. |
count | int | — | Quantity of goods. 1 by default.Aliases: amount, qnt, quantity |
discount | int | — | Order discount in percent, from -99 to 99. A value outside these limits counts as zero. |
more | int | — | Order markup: a surcharge for rush delivery, packaging and the like. Zero and negative values are ignored. |
delpr | float | — | Delivery cost in the order currency. If it is not passed, it comes from the offer or network settings. |
total | float | — | The order total. The difference between it and the cost of the goods is recorded as the delivery cost for goods offers, and as the markup for all others. |
item | string | — | Variants of the goods, separated by commas, with the quantity separated by x: 1x2,3. Prices come from the offer and flow settings. |
items | list | — | Order contents: an array of goods. Variant IDs of the goods are in the offer/show response, goods field. If you pass it, item is ignored. |
items[].id | int | yes | ID of the goods variant. |
items[].count | int | — | Number of units. 1 by default. |
items[].price | float | — | Price of one unit. If it is not passed, the price comes from the offer or flow settings. |
items[].total | float | — | Price for all the units at once. You can pass it instead of price. |
items[].cost | float | — | Company only: cost price of one unit of goods. |
goods | int | — | ID of a ready-made set of goods of the offer. The set defines the order contents, quantities and prices. The network administrator tells you the set ID. |
Additional parameters. Placement, device, goal and custom order fields.
| Parameter | Type | Req. | Description |
|---|---|---|---|
site | int | — | ID of the landing the lead came from. The IDs of the offer's sites are in offer/sites. The lead shows the landing address through it. The platform does not check that such a landing exists. A nonexistent ID can pass without an error (sometimes traffic comes with info: site), and the lead is created with an empty landing address, so siteurl in leads/list is []. Take the ID only from offer/sites, and if the landing is unknown, do not pass site at all. |
from | int | — | ID of the prelanding the lead came from. In leads/list, from is the start date of the period. |
mobile | bool | — | 1 is a mobile device, 0 is a computer. If it is not passed, it is detected from ua. |
os | int | — | ID of the operating system in the platform reference. Usually not needed: if it is not passed, it is detected from ua. |
browser | int | — | ID of the browser in the platform reference. Usually not needed: if it is not passed, it is detected from ua. |
bad | bool | — | 1 means non-target traffic. The offer can have a separate rate for such a tag.Aliases: another |
src | string | — | Traffic source: the ID or text code from the network reference. The offer's goal can be chosen by it. If it is not passed, the flow's source is used (the src field in wm/flows). |
params | object | — | Custom order fields: the key is the field name, the value is its content. last, pass, lang and phonecc, if you pass them separately, also end up here. |
goal | string | — | Text code of the offer's goal. The codes are in the offer/show response, goal field. An unknown code is not an error: the lead gets the offer's default goal if the offer has goals. |
gid | int | — | Offer goal ID, preferred over goal. offer/show lists no goal IDs, so goal usually suffices. Another offer's goal ID gives the goal error. |
Request
https://lk.dalead.pro/api/leads/add.json?id={token}&offer=19&flow=63&phone=79001234567&name=Whiskers%20Pawson&email=whiskers%40meow.pro&country=ru&ip=203.0.113.42&ua=Mozilla%2F5.0%20%28iPhone%3B%20CPU%20iPhone%20OS%2017_5%20like%20Mac%20OS%20X%29&utm_source=facebook&utm_campaign=cathulhu-ru-01&subid=purr-42&comment=Call%20after%2018%3A00
curl 'https://lk.dalead.pro/api/leads/add.json?id={token}' \
--data-urlencode 'offer=19' \
--data-urlencode 'flow=63' \
--data-urlencode 'phone=79001234567' \
--data-urlencode 'name=Whiskers Pawson' \
--data-urlencode 'email=whiskers@meow.pro' \
--data-urlencode 'country=ru' \
--data-urlencode 'ip=203.0.113.42' \
--data-urlencode 'ua=Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X)' \
--data-urlencode 'utm_source=facebook' \
--data-urlencode 'utm_campaign=cathulhu-ru-01' \
--data-urlencode 'subid=purr-42' \
--data-urlencode 'comment=Call after 18:00'
// Lead from a landing form: customer and traffic data
$url = 'https://lk.dalead.pro/api/leads/add.json?id={token}';
$data = [
'offer' => 19,
'flow' => 63,
'phone' => $_POST['phone'],
'name' => $_POST['name'],
'email' => $_POST['email'],
'country' => 'ru',
'ip' => $_SERVER['REMOTE_ADDR'],
'ua' => $_SERVER['HTTP_USER_AGENT'],
'utm_source' => 'facebook',
'utm_campaign' => 'cathulhu-ru-01',
'subid' => 'purr-42',
'comment' => 'Call after 18:00',
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
curl 'https://lk.dalead.pro/api/leads/add.json?id={token}' \
-H 'Content-Type: application/json' \
--data-raw '{"offer": 31, "flow": 63, "phone": "79001234568", "name": "Mittens Fluffy", "country": "ru", "ip": "203.0.113.42", "index": "127000", "city": "Moscow", "addr": "Meow street, 7-1", "items": [{"id": 1, "count": 2, "price": 1990}, {"id": 3, "count": 1, "price": 990}], "subid": "purr-43"}'
// Lead with goods and address (JSON body)
$url = 'https://lk.dalead.pro/api/leads/add.json?id={token}';
$data = [
'offer' => 31,
'flow' => 63,
'phone' => '79001234568',
'name' => 'Mittens Fluffy',
'country' => 'ru',
'ip' => '203.0.113.42',
'index' => '127000',
'city' => 'Moscow',
'addr' => 'Meow street, 7-1',
'items' => [
[
'id' => 1,
'count' => 2,
'price' => 1990,
],
[
'id' => 3,
'count' => 1,
'price' => 990,
],
],
'subid' => 'purr-43',
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode( $data ),
CURLOPT_HTTPHEADER => [ 'Content-Type: application/json' ],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Response
A successful response means the platform recorded the lead. leads/list shows what happens to it next.
{
"status": "ok",
"id": 950084,
"pin": 892529
}
{
"status": "error",
"error": "data",
"bad": [
"phone"
]
}
{
"status": "error",
"error": "badflow"
}
{
"status": "error",
"error": "traffic",
"info": "offer"
}
| Field | Description |
|---|---|
status |
Result of the operation: ok on success, error on failure. |
error |
Error code for the error status (table below). |
id |
ID of the created lead. Use it to check the status in leads/list. |
pin |
The order's control code: a six-digit number issued at creation. You do not need it to check the status. |
uid |
Agency only: the order identifier on the agency side, which is the extu value or a number issued by the platform. Save it if you send leads with extu=auto, because you can use it to check statuses. |
autologin |
Autologin code. It comes if the network gives customers login links on its own domain. |
url |
Autologin link for the customer. It comes with offers where the advertiser's CRM gives the customer a login link. |
info |
Details of the error cause (table below). |
bad |
For the data error: an array of the names of the missing fields. |
message |
For the failed error: the error text from the advertiser's CRM. |
geo |
For the traffic and ban errors related to GEO: geolocation data for the IP address. |
Response fields.
Errors
Errors are listed in check order. The first ones come before the lead is created, the rest during creation.
| Code | What happened | What to do |
|---|---|---|
access | You are not allowed to send leads through the API. | Ask the network administrator to turn on “Can add orders via API”. |
noflow | The flow parameter is not passed. | Pass the ID of your flow. |
badflow | The flow does not exist or belongs to another user. | Take the flow ID from wm/flows. |
nophone | The customer's phone number is not passed. | Pass phone. |
nooffer | The offer ID is not passed, or the form has an offer field with arbitrary data. | Pass a valid offer. |
no-api | No offer has this ID, or it does not accept leads through the API. | Check the ID against the offer/list list. |
security | Agency only: the user the lead is recorded for is blocked. | Contact the network administrator. |
traffic | Traffic to the offer is not accepted, and the reason is in the info field (table below). | Remove the cause given in info. |
goal | The goal gid does not belong to the offer. | Pass goal with a code from offer/show. |
data | Data is missing. The names of the fields are in bad: they are phone, plus the fields the offer made required — name, last, pass, email, country, comment, goal, ip. A phone number shorter than 6 or longer than 15 digits (leading zeros do not count) also gives bad: ["phone"]. If info is trash, the advertiser's CRM rejected the lead as invalid. | Pass the missing fields. For trash, the data cannot be fixed. |
ban | The protection against non-target traffic rejected the lead, and the reason is in the info field (table below). | Work out the cause from info. |
phone | The number fails the check turned on in the offer settings. | Check the number and country. |
email | The offer requires an email address, and it is not passed or is empty. The platform does not check the form of the address. | Pass email. |
duplicate | The lead is recognized as a duplicate. If the response has no pin, no new lead was created: id is the ID of the original order, and autologin and url hold the login link if one was issued. If pin is present, id is a new lead that the advertiser rejected as a duplicate after it was recorded. | Do not send the lead again. |
inactive | The offer is turned off on the advertiser's side (info is offer). | Choose another offer. |
failed | The advertiser's CRM returned an error, and its text is in the message field. | Pass the error text to the network support. |
db | The lead could not be written to the database. | Repeat the request later. |
access-denied | Company only: the sender is not an administrator of their company, or adding orders is turned off in the company. | Contact the network administrator. |
no-comp | Company only: the sender's company is not found. | Contact the network administrator. |
no-ext | Agency only: the agency connection is not found. | Contact the network administrator. |
no-money | Company only: the company has used up its limits and does not accept orders. | Contact the network administrator. |
exto | Company only: an order with this exto already exists, and its ID is in the id field. | Do not send the lead again. |
An error does not always mean there is no lead. A duplicate caught before recording and the exto error return the id of the original order. Also, the advertiser can reject a lead right after it is recorded. Then an error comes (data with info: trash, duplicate, inactive, failed, and ban with GEO or language), but the response holds the id and pin of the new lead, and leads/list shows it with a decline phase (cancel or trash). If a response with an error has a pin, the id is a new lead. If there is no pin, the id (when there is one) is the original order.
The common errors key and ban (the token did not match, the account is blocked) come before the function. They are explained in the General API rules. It is easy to tell an account block from a refusal to accept a lead: a block has no info field, and a rejected lead always has it (table below).
info details
The info field gives details for the traffic and ban errors.
| Error | info |
What happened |
|---|---|---|
traffic |
offer |
You have no access to this offer (it is private, closed or blocked). |
traffic |
site |
You have no access to the landing given in site, or no such landing exists. |
traffic |
search |
Company only: the lead came without an affiliate, and the offer does not accept such traffic. |
traffic |
country |
The lead's country is not in the offer's GEO (soft GEO check). |
traffic |
no-cap |
The offer accepts leads only within a cap, and no free cap capacity is left. |
ban |
bot |
A bot sent the request. |
ban |
bad-ua |
No User-Agent is passed, and bot filtering is on. |
ban |
filter |
The traffic filter rejected the IP address. |
ban |
bad-ip |
No IP address is passed, and traffic filtering is on. |
ban |
phone |
The phone number is on the black list. |
ban |
ip |
The IP address is on the black list. |
ban |
flood |
Too many leads came from this IP address in a short time. |
ban |
geo |
The country by IP address is not in the offer's GEO. |
ban |
country |
The lead's country is not in the offer's GEO (hard GEO check). |
ban |
lang |
The advertiser's CRM rejected the lead because of a language barrier. |
info values.
leads/listCheck lead statuses#
https://lk.dalead.pro/api/leads/list.json?id={token}Returns your leads with their statuses. It returns all of them, not only those sent through the API, so it includes both the leads that came through flow URLs and the ones you sent from the cabinet. The request must contain at least one filter, otherwise the function responds with the no-param error.
The function is meant for spot checks, not for constant polling. To learn about a status change at once, set up postbacks, and the platform reports the change itself.
Parameters
All filters are combined with AND, so a lead must match every one. Every filter except the dates and the status accepts several values, and a lead matches if it has any of them. Pass them separated by commas (ids=1,2,3) or as an array (ids[]=1&ids[]=2). Text values are compared in full and case-sensitively, and a search by part of a value is not supported. Spaces at the edges are dropped. Unlike leads/add, parameter names here must be written exactly as in the table: UTM_SOURCE and the short utms do not count as a filter.
The output is not paged and does not accept limit and offset. The function returns all matching leads at once, but no more than 10,000 rows. If there may be more leads, split the selection by dates, for example one day at a time: from and to with the same date. The total field in the response is the number of rows in data, so a value of 10000 means the selection was cut off and you must narrow it.
| Parameter | Type | Req. | Description |
|---|---|---|---|
ids | list | — | IDs of leads in the network: the id values from the leads/add response. |
offer | list | — | Offer IDs. |
site | list | — | Landing IDs. |
space | list | — | Prelanding IDs. |
subid | list | — | Click SubID values. |
utm_source, utm_campaign, utm_content, utm_term, utm_medium | list | — | Values of the matching UTM tag. |
domain | list | — | Values of the tag with the domain the lead came from. |
customer | list | — | Values of the ad customer tag. |
from | date | — | Start of the period in YYYY-MM-DD format: leads created from 00:00:00 of that day count. The time of day in the value is ignored. Days are counted in the network's time zone. |
to | date | — | End of the period in YYYY-MM-DD format, inclusive, up to 23:59:59 of that day. |
status | string | — | Filter by phase: wait, hold, approve, cancel or trash. The numbers from 1 to 5 and the letters w, h, a, c, t are also accepted. Case does not matter. An unknown value is ignored and does not count as a filter. |
uid | list | — | Agency only: order identifiers on the agency side, the values that were passed in extu. |
src | list | — | Agency only: identifiers of traffic sources on the agency side, the values that were passed in exts. |
Write dates in full. A wrong date is not an error, but the period comes out wrong: for example, from=2026-10 instead of the start of the month gives the last day of the previous one. An empty value (ids=) also counts as a filter, not as the absence of one. In numeric filters it turns into 0, like a non-numeric value. ids= and offer= find nothing, while site= and space= find leads without a landing or prelanding. In text filters (subid, utm_*, domain, customer, uid, src) an empty value means an empty tag. It finds the leads where the tag is not filled in.
Request
https://lk.dalead.pro/api/leads/list.json?id={token}&ids=950084
curl 'https://lk.dalead.pro/api/leads/list.json?id={token}' \
--data-urlencode 'ids=950084'
// Lead by its number
$url = 'https://lk.dalead.pro/api/leads/list.json?id={token}';
$data = [
'ids' => 950084,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
https://lk.dalead.pro/api/leads/list.json?id={token}&subid=purr-42
curl 'https://lk.dalead.pro/api/leads/list.json?id={token}' \
--data-urlencode 'subid=purr-42'
// Leads by your own tag
$url = 'https://lk.dalead.pro/api/leads/list.json?id={token}';
$data = [
'subid' => 'purr-42',
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
https://lk.dalead.pro/api/leads/list.json?id={token}&from=2026-10-01&to=2026-10-31&status=approve
curl 'https://lk.dalead.pro/api/leads/list.json?id={token}' \
--data-urlencode 'from=2026-10-01' \
--data-urlencode 'to=2026-10-31' \
--data-urlencode 'status=approve'
// Approved leads for the month
$url = 'https://lk.dalead.pro/api/leads/list.json?id={token}';
$data = [
'from' => '2026-10-01',
'to' => '2026-10-31',
'status' => 'approve',
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Response
{
"status": "ok",
"total": 1,
"data": [
{
"id": 950084,
"time": 1793389833,
"status": {
"phase": 1,
"stage": "wait",
"hold": 0,
"goal": false,
"ftd": false,
"deposited": false,
"crm": 2,
"reason": 0
},
"payment": {
"amount": 550,
"currency": "rub",
"convert": 550
},
"offer": {
"id": 19,
"name": "Bed linen",
"flow": 63,
"site": 0,
"space": 0,
"siteurl": false,
"spaceurl": false
},
"tags": {
"source": "facebook",
"content": "",
"campaign": "cathulhu-ru-01",
"medium": "",
"term": "",
"domain": "",
"customer": "",
"adid": "",
"uuid": "",
"subid": "purr-42",
"sub1": "",
"sub2": "",
"sub3": "",
"sub4": "",
"sub5": "",
"click": "",
"extu": "",
"exts": ""
},
"info": {
"country": "ru",
"ip": "203.0.113.42",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X)",
"comment": ""
}
}
]
}
{
"status": "ok",
"total": 0,
"data": []
}
The response consists of the common fields (the result and the number of leads) and the data array of leads.
| Field | Description |
|---|---|
status |
Result of the operation: ok on success, error on failure. |
error |
Error code for the error status (see below). |
total |
Number of rows in data (no more than 10,000). |
data |
Array of leads. It is empty if nothing is found. |
Response fields.
A row in data:
| Field | Description |
|---|---|
id |
Lead ID in the network. |
time |
Lead creation time, Unix time (seconds). |
status |
The lead's state (object, below). |
payment |
The lead's commission (object). |
offer |
Offer, flow and placements (object). |
tags |
Tags of the traffic source (object). |
info |
Lead data (object). |
Lead row.
The status object:
| Field | Description |
|---|---|
phase |
The order phase for the affiliate as a number from 1 to 5. |
stage |
The same phase as a text code: wait, hold, approve, cancel, trash. |
hold |
The time the hold ends, Unix time. 0 means no hold is set. |
goal |
Text code of the offer's goal, or false if there is no goal. |
ftd |
true if the customer paid for the order. |
deposited |
Payment time, Unix time. The value is false until the order is paid. If the time is unknown, 0 comes. |
crm |
The order status in the CRM, a number from 1 to 12. It is the same state as the phase, seen from the CRM side. The offer's CPA model sets which status matches which phase. |
reason |
Code of the decline reason for cancelled and trash leads. 0 means no reason is given. |
custom |
Text status of the lead as your network shows it, for example New, Processing, Completed, Cancelled. It is text, not a code, and the network sets its values and language. It is an empty string if the network does not show a status. |
The status object, main fields.
The payment object:
| Field | Description |
|---|---|
amount |
The lead's commission in the commission currency. A whole sum comes as a number (550), a fractional one as a string ("3.70"), so accept both forms. |
currency |
Three-letter code of the commission currency. |
convert |
The same sum in the network's main currency, as a number or a string, like amount. |
The payment object.
The offer object:
| Field | Description |
|---|---|
id |
Offer ID. |
name |
Offer name. |
flow |
ID of the flow the lead is recorded on. |
site |
Landing ID. 0 means no landing is set. |
space |
Prelanding ID. 0 means no prelanding is set. |
siteurl |
Landing address without the scheme, or false if no landing is set. |
spaceurl |
Prelanding address without the scheme, or false if no prelanding is set. |
The offer object.
The tags object:
| Field | Description |
|---|---|
source |
The utm_source UTM tag. |
content |
The utm_content UTM tag. |
campaign |
The utm_campaign UTM tag. |
medium |
The utm_medium UTM tag. |
term |
The utm_term UTM tag. |
domain |
The domain the lead came from. |
customer |
Identifier of the ad customer. |
adid |
Ad click identifier, which is what was passed in clid. |
uuid |
Unique click identifier on the source side. |
subid |
Click SubID. |
sub1–sub5 |
Additional click tags. |
click |
The same value as in adid. |
extu |
The order identifier on the agency side. Empty for an affiliate. |
exts |
The traffic source identifier on the agency side. Empty for an affiliate. |
The tags object.
The info object:
| Field | Description |
|---|---|
country |
The customer's two-letter country code. zz means the country is not detected. |
ip |
The customer's IP address, or 0.0.0.0 if it was not passed. |
ua |
The customer's User-Agent. |
comment |
Comment on the lead: yours or an operator's note. |
The info object, main fields.
If the network connected you as an agency with extended statistics, the info object adds the customer data, the delivery address and the order contents to the four fields above:
| Field | Description |
|---|---|
name |
The customer's name. |
gender |
The customer's gender: 0 is not defined, 1 is male, 2 is female. |
phone |
The customer's phone number. |
index |
Postal code of the delivery address. |
area |
Delivery region. |
city |
Delivery city. |
street |
Street of the delivery address. |
addr |
Delivery address: the full address without the postal code if the other address fields were not used, otherwise only the house, building, apartment or office. |
delivery |
ID of the delivery method. |
discount |
Order discount in percent. |
currency |
Three-letter code of the order currency. The prices below are in it. The commission currency is in payment.currency. |
base |
Price of one unit of goods in the order currency. |
more |
Order markup in the order currency. |
delpr |
Delivery cost in the order currency. |
price |
The order total in the order currency: the goods with the discount, the markup and the delivery. |
track |
Parcel tracking number, or false if none is assigned yet. |
goods |
Order contents: an array of goods. It is an empty array if the contents are not set. |
meta |
Additional order fields (an object of key-value pairs): what was passed in params when the lead was created, and what the network added later. If there are no fields, an empty array [] comes. |
The info object, additional fields.
An item in goods:
| Field | Description |
|---|---|
id |
ID of the goods variant. |
name |
Name of the goods variant. |
count |
Number of units. |
price |
Price of one unit in the order currency. |
An element of the goods array.
Errors
| Code | What happened | What to do |
|---|---|---|
no-param | No filter is passed. | Pass at least one filter: ids, offer, a period or status. |
auth | Agency only, and accounts of an unsupported type: the agency connection is not found, or the function is not provided for this account type. | Contact the network administrator. |
access-denied | Agency and company only. Agency: the account has no agency connection. Company: the sender is not an administrator of their company, or adding orders is turned off in the company. | Contact the network administrator. |
no-comp | Company only: the sender's company is not found. | Contact the network administrator. |
no-money | Company only: the company has used up its limits. | Contact the network administrator. |
The token errors (key, ban) come before the function: see the General errors.