| Advertiser | Švýcarská půjčka |
| Country | CZ |
| Segment | Finance |
| Product | Loan |
| Integration type | Lead generation |
| Flows | Ping → Post |
Use global fields and skip mapping entirely
Every prebuilt integration is already mapped to PalDock’s global fields. Populate them once in your lead structure, whether leads arrive through the API or form, and the same fields feed every integration you run.
Integration overview
This prebuilt PalDock integration connects your lead flow directly to the advertiser. It handles field mapping, request delivery and response processing, so you can start sending leads without building the integration from scratch.
The integration uses PalDock’s global fields and returns standardized outcomes for reporting and routing, while preserving advertiser response details for troubleshooting.
Blueprint

{
"nodes": [
{
"id": "1-1",
"type": "startNode",
"position": {
"x": -700,
"y": 120
},
"data": {
"formData": {
"active": true,
"title": "",
"subtitle": "",
"flow": "ping",
"beType": "integration"
}
}
},
{
"id": "2-1",
"type": "startNode",
"position": {
"x": -641.67311225916,
"y": 557.38834831011
},
"data": {
"formData": {
"active": true,
"title": "",
"subtitle": "",
"flow": "post",
"beType": "integration"
}
}
},
{
"id": "1-2",
"type": "setNode",
"position": {
"x": -540,
"y": 60
},
"data": {
"formData": {
"active": true,
"title": "Auth",
"subtitle": "",
"fields": [
{
"key": "{auth0}",
"value": "{username}:{password}"
}
]
}
}
},
{
"id": "1-3",
"type": "modifyFieldNode",
"position": {
"x": -380,
"y": 120
},
"data": {
"formData": {
"active": true,
"title": "Transform data",
"subtitle": "",
"data": [
{
"fieldName": "{auth}",
"fields": [
{
"source": "{auth0}",
"operator": "always",
"value": "",
"value2": "",
"modification": "to_base64",
"pattern": "",
"output": ""
}
]
},
{
"fieldName": "{data_company_number_imported}",
"fields": [
{
"source": "{data_company_number_imported}",
"operator": "regex_match",
"value": "^(?!\\d{8}$).*$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": " "
}
]
}
]
}
}
},
{
"id": "1-4",
"type": "httpNode",
"position": {
"x": -200,
"y": 120
},
"data": {
"formData": {
"active": true,
"title": "Ping",
"subtitle": "",
"method": "GET",
"endpoint": "{endpoint}/api/lead/pre-check",
"timeout": 15,
"format": null,
"parser": "json",
"notsend": null,
"convert_data": null,
"headers": [
{
"key": "Authorization",
"value": "Basic {auth}"
}
],
"query": [
{
"key": "birthNumber",
"value": "{data_nin}"
}
],
"body": [],
"signature": null,
"insecure": null
}
}
},
{
"id": "1-5",
"type": "endNode",
"position": {
"x": 60,
"y": 40
},
"data": {
"formData": {
"active": true,
"title": "Success",
"subtitle": "",
"success": "success"
}
}
},
{
"id": "1-6",
"type": "modifyFieldNode",
"position": {
"x": 20,
"y": 160
},
"data": {
"formData": {
"active": true,
"title": "Reject reason · No interest",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.state}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Unspecified"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{parsedBody.state}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "pre-check: {parsedBody.state}"
}
]
}
]
}
}
},
{
"id": "1-7",
"type": "modifyFieldNode",
"position": {
"x": 20,
"y": 300
},
"data": {
"formData": {
"active": true,
"title": "Reject reason · Invalid input",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{status}",
"operator": "equals",
"value": "400",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.message}",
"operator": "contains",
"value": "18 let",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Age"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{status}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "http {status}"
},
{
"source": "{parsedBody.message}",
"operator": "is_not_empty",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "http {status}: {parsedBody.message}"
}
]
}
]
}
}
},
{
"id": "1-8",
"type": "endNode",
"position": {
"x": 280,
"y": 230
},
"data": {
"formData": {
"active": true,
"title": "Rejected",
"subtitle": "",
"success": "failed"
}
}
},
{
"id": "2-2",
"type": "modifyFieldNode",
"position": {
"x": -282.05173015128,
"y": 542.58898873408
},
"data": {
"formData": {
"active": true,
"title": "Transform data",
"subtitle": "",
"data": [
{
"fieldName": "{data_income_type}",
"fields": [
{
"source": "{data_income_type}",
"operator": "equals",
"value": "full-time",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "employed"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "self-employed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "self-employed"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "parental",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "maternity"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "pension",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "pensioner"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "unemployed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "unemployed"
},
{
"source": "{data_income_type}",
"operator": "regex_not_match",
"value": "^(full-time|self-employed|parental|pension|unemployed)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "other"
}
]
},
{
"fieldName": "{data_requested_amount}",
"fields": [
{
"source": "{data_requested_amount}",
"operator": "is_greater_than",
"value": "20000",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "20000"
}
]
}
]
}
}
},
{
"id": "2-3",
"type": "httpNode",
"position": {
"x": -20,
"y": 560
},
"data": {
"formData": {
"active": true,
"title": "Post",
"subtitle": "",
"method": "POST",
"endpoint": "{endpoint}/api/lead",
"timeout": 30,
"format": "application/json",
"parser": "json",
"notsend": null,
"convert_data": null,
"headers": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Basic {auth}"
}
],
"query": [],
"body": [
{
"key": "sourceId",
"value": "{eid}"
},
{
"key": "client.mail",
"value": "{data_email}"
},
{
"key": "client.phone",
"value": "{data_cell_phone}"
},
{
"key": "client.lastName",
"value": "{data_last_name}"
},
{
"key": "client.firstName",
"value": "{data_first_name}"
},
{
"key": "client.work.type",
"value": "{data_income_type}"
},
{
"key": "loanRequest.days",
"value": "{data_period}"
},
{
"key": "client.address.zip",
"value": "{data_zip}"
},
{
"key": "client.birthNumber",
"value": "{data_nin}"
},
{
"key": "loanRequest.amount",
"value": "{data_requested_amount}"
},
{
"key": "client.address.city",
"value": "{data_city}"
},
{
"key": "client.work.employer",
"value": "{data_employer}"
},
{
"key": "loanRequest.currency",
"value": "CZK"
},
{
"key": "client.address.number",
"value": "{data_house_number}"
},
{
"key": "client.address.street",
"value": "{data_street}"
},
{
"key": "client.identityNumber",
"value": "{data_identity_card_number}"
},
{
"key": "client.work.businessId",
"value": "{data_company_number_imported}"
},
{
"key": "client.cashFlows.income",
"value": "{data_monthly_income}"
},
{
"key": "client.work.additionInfo",
"value": "{data_job_title}"
},
{
"key": "client.cashFlows.expenses",
"value": "{data_expenses}"
},
{
"key": "client.cashFlows.repaymentsLongLoans",
"value": "0"
}
],
"signature": null,
"insecure": null
}
}
},
{
"id": "2-4",
"type": "setNode",
"position": {
"x": 240,
"y": 460
},
"data": {
"formData": {
"active": true,
"title": "Store response",
"subtitle": "",
"fields": [
{
"key": "{external_id}",
"value": "{parsedBody.leadId}"
},
{
"key": "{redirect_url}",
"value": "{parsedBody.loanCreateUrl}"
}
]
}
}
},
{
"id": "2-7",
"type": "endNode",
"position": {
"x": 470,
"y": 460
},
"data": {
"formData": {
"active": true,
"title": "Success",
"subtitle": "",
"success": "success"
}
}
},
{
"id": "2-5",
"type": "modifyFieldNode",
"position": {
"x": 240,
"y": 600
},
"data": {
"formData": {
"active": true,
"title": "Reject reason · No offer",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.state}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Unspecified"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{parsedBody.state}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "state: {parsedBody.state}, no loanCreateUrl"
}
]
}
]
}
}
},
{
"id": "2-6",
"type": "modifyFieldNode",
"position": {
"x": 240,
"y": 750
},
"data": {
"formData": {
"active": true,
"title": "Reject reason · Bad request",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.message}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.message}",
"operator": "contains",
"value": "18 let",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Age"
},
{
"source": "{parsedBody.message}",
"operator": "contains",
"value": "duplic",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Duplicate"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{parsedBody.message}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "http {status}: {parsedBody.message}"
}
]
}
]
}
}
},
{
"id": "2-8",
"type": "endNode",
"position": {
"x": 520,
"y": 750
},
"data": {
"formData": {
"active": true,
"title": "Rejected",
"subtitle": "",
"success": "failed"
}
}
}
],
"edges": [
{
"id": "edge-1-1-1-2",
"source": "1-1",
"target": "1-2",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-1-2-2",
"source": "2-1",
"target": "2-2",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-1-2-1-3",
"source": "1-2",
"target": "1-3",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-1-3-1-4",
"source": "1-3",
"target": "1-4",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-1-4-1-5",
"source": "1-4",
"target": "1-5",
"type": "customEdge",
"data": {
"active": true,
"title": "lead",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.state}",
"operator": "equals",
"output": "lead",
"output2": ""
}
]
}
},
{
"id": "edge-1-4-1-6",
"source": "1-4",
"target": "1-6",
"type": "customEdge",
"data": {
"active": true,
"title": "no-interest",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.state}",
"operator": "regex_not_match",
"output": "^lead$",
"output2": ""
}
]
}
},
{
"id": "edge-1-4-1-7",
"source": "1-4",
"target": "1-7",
"type": "customEdge",
"data": {
"active": true,
"title": "http error",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "regex_not_match",
"output": "^200$",
"output2": ""
}
]
}
},
{
"id": "edge-1-6-1-8",
"source": "1-6",
"target": "1-8",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-1-7-1-8",
"source": "1-7",
"target": "1-8",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-2-2-3",
"source": "2-2",
"target": "2-3",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-3-2-4",
"source": "2-3",
"target": "2-4",
"type": "customEdge",
"data": {
"active": true,
"title": "accepted",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.loanCreateUrl}",
"operator": "is_not_empty",
"output": "",
"output2": ""
}
]
}
},
{
"id": "edge-2-3-2-5",
"source": "2-3",
"target": "2-5",
"type": "customEdge",
"data": {
"active": true,
"title": "no-interest",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.loanCreateUrl}",
"operator": "is_empty",
"output": "",
"output2": ""
}
]
}
},
{
"id": "edge-2-3-2-6",
"source": "2-3",
"target": "2-6",
"type": "customEdge",
"data": {
"active": true,
"title": "400 bad request",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "400",
"output2": ""
}
]
}
},
{
"id": "edge-2-4-2-7",
"source": "2-4",
"target": "2-7",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-5-2-8",
"source": "2-5",
"target": "2-8",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-6-2-8",
"source": "2-6",
"target": "2-8",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
}
]
}How it works
- Copy the blueprint and paste it in your PalDock workspace– Create a new integration in your workspace and paste the blueprint. Every field arrives prefilled.
- Enter your credentials – Paste the secrets you received from advertiser and set your Pingtree
- Send a test lead – Verify the response, then switch the channel live.
FAQ
Do I need my own contract with this advertiser?
Yes. PalDock delivers leads on your behalf, so the commercial agreement and API credentials come from the advertiser directly.
What happens to rejected leads?
The advertiser returns its decision in the delivery response. PalDock reads it and moves rejected leads to the next buyer in your pingtree automatically, so a rejection does not need to end the lead’s journey.
Can I change the field mapping?
Yes, but we do not recommend it. Blueprints are already mapped to PalDock’s global fields. If you use local fields, you need to remap each integration separately.
How long does setup take?
Few clicks, if you already have credentials. The blueprint arrives prefilled and mapped to PalDock’s global fields, so if your lead structure uses them, there is nothing to map. If you use local fields, you map them once.
What the integration does
Start sending leads in 3 clicks
Copy the prebuilt blueprint, add your credentials and start sending leads. No coding, no integration work.
Real-time lead delivery
Send leads to the advertiser instantly as they arrive, without exports, batches or manual processing.
No field mapping headache
PalDock global fields work across all prebuilt integrations. Map your lead data once and reuse it everywhere.
Know exactly why leads fail
Get standardized rejection reasons for reporting and advertiser’s response for the full context and troubleshooting.
API & integration details
Short-term loans. The ping is a genuine pre-check that stores nothing, which makes it
cheap to call and honest to trust: if it says no, the post will say no too.
Expect most leads to be refused at the ping, almost always with the same flatno-interest and no reason attached.
Flows
Ping, GET /api/lead/pre-check?birthNumber=…. Nothing is stored on the advertiser’s
side. Returns state: lead or state: no-interest.
Post, POST /api/lead with the full payload. Returns leadId, state andloanCreateUrl. The URL is present only when the advertiser is interested, and the
post can still come back no-interest even after the ping said lead, the pre-check
runs on fewer data.
Calls
Ping
GET {endpoint}/api/lead/pre-check?birthNumber={g_id_national_number}
Authorization: Basic base64({username}:{password})
Post
POST {endpoint}/api/lead
Authorization: Basic base64({username}:{password})
Content-Type: application/json
format: application/json
Basic auth is built in the blueprint from the two halves. Store {username} and {password} separately and encode at run time:
Set {auth0} = {username}:{password}
Modify {auth} ← {auth0}, to_base64
HTTP Authorization: Basic {auth}
Never store a pre-encoded blob in {token}, it cannot be rotated one half at a time and nobody can read it six months later.
Request fields
The body uses dotted paths for nesting.
| Field | Required | Value |
|---|---|---|
sourceId | yes | {send_id} |
client.firstName | yes | {g_name_first} |
client.lastName | yes | {g_name_last} |
client.birthNumber | yes | {g_id_national_number} |
client.identityNumber | yes | {g_id_card_number} |
client.mail | yes | {g_email} |
client.phone | yes | {g_phone} |
client.address.street | yes | {g_address_street} |
client.address.number | yes | {g_address_street_number} |
client.address.city | yes | {g_address_city} |
client.address.zip | yes | {g_address_zip} |
client.work.type | yes | {g_fin_type}, see enums |
client.work.employer | no | {g_employer_name} |
client.work.businessId | self-employed | {g_company_registration} |
client.work.additionInfo | no | {g_employ_position} |
client.cashFlows.income | yes | {g_fin_income} |
client.cashFlows.expenses | yes | {g_fin_expenses} |
client.cashFlows.repaymentsLongLoans | yes | {g_fin_expenses_credit} |
loanRequest.amount | yes | {g_amount}, capped at 20 000 |
loanRequest.days | yes | {g_period} |
loanRequest.currency | yes | CZK |
client.identityNumber is validated hard: it must be at most ten characters and pass a
checksum. It is the single most common 400.
client.work.businessId must be exactly eight digits or absent. Anything else is
rejected, so blank it when it does not match rather than passing a partial value through.
On capping the amount
Where a request exceeds the advertiser’s maximum, send the maximum rather than the
requested figure, but agree it with them first. Translating a higher request down is right
only when they would otherwise reject the lead outright. Where they would have made a
smaller offer on their own, send what the applicant actually asked for and let them answer.
This is the one place the general rule bends: amount, term and product are the request
itself, so they are normally passed through untouched.
Enums
client.work.type: employed, self-employed, maternity, pensioner, unemployed,other. Map anything unrecognised to other.
Outcomes
loanCreateUrl is nullable and it is the real signal. A 200 carrying state: rejected
or state: no-interest with a null URL is a rejection, whatever the status code says.
| Recognised by | HTTP | Meaning | Reject reason | Frequency |
|---|---|---|---|---|
state: lead | 200 | Interested, proceed | , | common |
loanCreateUrl not empty | 200 | Accepted | , | common |
state: no-interest | 200 | Not interested, no reason given | Unspecified | common |
state: rejected, null URL | 200 | Refused after full data | Unspecified | occasional |
message ~ číslo občanského průkazu | 400 | Invalid ID card number | Invalid Data | occasional |
message ~ rodné číslo | 400 | Invalid national ID | Invalid Data | rare |
message ~ nedovršil věk 18 let | 400 | Under eighteen | Age | rare |
The 400 body is {"code": …, "message": "(Tělo požadavku) client.identityNumber: …"}.
The message names the field that failed and is worth passing through whole in{reason_detail}.
no-interest is the largest single bucket and it says nothing. It is Unspecified, not
Not Eligible, the advertiser has refused without naming a condition, and keeping it as
Unspecified is what lets you go back and ask for reason codes.
Reject reasons come from the standard list. See Reject reason for what each one
means and when to use it.
Branching
Ping, interested:
{status} equals 200
{parsedBody.state} equals lead
Ping, not interested, scoped to the body, not to the status code:
{status} equals 200
{parsedBody.state} regex not match ^lead$
Post, accepted:
{status} equals 200
{parsedBody.loanCreateUrl} is not empty
Post, refused:
{status} equals 200
{parsedBody.loanCreateUrl} is empty
Post, bad request:
{status} equals 400
The 400 carries a documented business result naming the failed field, which is why it
gets a branch. Other status codes do not.
Stored values
| Parameter | Source |
|---|---|
{external_id} | {parsedBody.leadId} from the post |
{redirect_url} | {parsedBody.loanCreateUrl} from the post |
Advertiser APIs change without warning
When they do, leads stop being delivered, often before anyone notices. PalDock gives you delivery logs and alerts so you can catch it early. With Managed Integrations, we watch the connection and fix it for you.
