| Advertiser | PůjčkaPlus |
| Country | CZ |
| Segment | Finance |
| Product | Loan |
| Integration type | Lead generation |
| Flows | Ping → Post |
| Platform | CreditOnline |
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": -560,
"y": -180
},
"data": {
"formData": {
"active": true,
"title": "",
"subtitle": "",
"flow": "ping",
"beType": "integration"
}
}
},
{
"id": "2-1",
"type": "startNode",
"position": {
"x": -560,
"y": 200
},
"data": {
"formData": {
"active": true,
"title": "",
"subtitle": "",
"flow": "post",
"beType": "integration"
}
}
},
{
"id": "1-2",
"type": "httpNode",
"position": {
"x": -400,
"y": -180
},
"data": {
"formData": {
"active": true,
"title": "Ping",
"subtitle": "",
"method": "POST",
"endpoint": "{endpoint}/?RPC=agents.checkPersonalData",
"timeout": 30,
"format": "login-data-pass",
"parser": "json",
"notsend": null,
"convert_data": null,
"headers": [
{
"key": "Content-type",
"value": "application/x-www-form-urlencoded; charset=UTF-8"
}
],
"query": [],
"body": [
{
"key": "pass",
"value": "{password}"
},
{
"key": "login",
"value": "{username}"
},
{
"key": "data.city",
"value": "{data_city}"
},
{
"key": "data.email",
"value": "{data_email}"
},
{
"key": "data.house",
"value": "{data_house_number}"
},
{
"key": "data.address",
"value": "{data_street}"
},
{
"key": "data.surname",
"value": "{data_last_name}"
},
{
"key": "data.zipcode",
"value": "{data_zip}"
},
{
"key": "data.realname",
"value": "{data_first_name}"
},
{
"key": "data.id_number",
"value": "{data_identity_card_number}"
},
{
"key": "data.mob_phone",
"value": "{data_cell_phone}"
},
{
"key": "data.person_code",
"value": "{data_nin}"
}
],
"signature": null,
"insecure": null
}
}
},
{
"id": "1-3",
"type": "endNode",
"position": {
"x": -80,
"y": -240
},
"data": {
"formData": {
"active": true,
"title": "Success",
"subtitle": "",
"success": "success"
}
}
},
{
"id": "1-4",
"type": "modifyFieldNode",
"position": {
"x": -80,
"y": -100
},
"data": {
"formData": {
"active": true,
"title": "Reject reason",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.personalData.person_code}",
"operator": "equals",
"value": "declined",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Unspecified"
},
{
"source": "{parsedBody.personalData.person_code}",
"operator": "regex_match",
"value": "^(registered|Registered)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Existing Customer"
},
{
"source": "{parsedBody.personalData.email}",
"operator": "regex_match",
"value": "^(registered|Registered)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Existing Customer"
},
{
"source": "{parsedBody.personalData.mob_phone}",
"operator": "regex_match",
"value": "^(registered|Registered)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Existing Customer"
},
{
"source": "{parsedBody.personalData.id_number}",
"operator": "regex_match",
"value": "^(registered|Registered)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Existing Customer"
},
{
"source": "{parsedBody.personalData.person_code}",
"operator": "equals",
"value": "age_check_failed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Age"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{body}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "{body}"
}
]
}
]
}
}
},
{
"id": "1-5",
"type": "endNode",
"position": {
"x": 80,
"y": -100
},
"data": {
"formData": {
"active": true,
"title": "Rejected",
"subtitle": "",
"success": "failed"
}
}
},
{
"id": "2-2",
"type": "modifyFieldNode",
"position": {
"x": -400,
"y": 200
},
"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": "Zaměstnanec - plný pracovní úvazek"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "self-employed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "OSVČ/Podnikatel"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "parental",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Mateřská/Rodičovská"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "pension",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Starobní/Invalidní důchodce"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "unemployed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Nezaměstnaný"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "other",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Zaměstnanec - zkrácený pracovní úvazek"
}
]
},
{
"fieldName": "{data_different_contact_address}",
"fields": [
{
"source": "{data_different_contact_address}",
"operator": "regex_match",
"value": "^(1|true|True|TRUE|yes|Yes|YES|on|On|ON)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "0"
},
{
"source": "{data_different_contact_address}",
"operator": "regex_match",
"value": "^(0|false|False|FALSE|no|No|NO|off|Off|OFF)$",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "1"
},
{
"source": "{data_different_contact_address}",
"operator": "is_empty",
"value": "",
"value2": "",
"modification": "do_not_send",
"pattern": "",
"output": ""
}
]
},
{
"fieldName": "{data_contact_city}",
"fields": [
{
"source": "{data_contact_city}",
"operator": "is_empty",
"value": "",
"value2": "",
"modification": "do_not_send",
"pattern": "",
"output": ""
}
]
},
{
"fieldName": "{data_contact_house_number}",
"fields": [
{
"source": "{data_contact_house_number}",
"operator": "is_empty",
"value": "",
"value2": "",
"modification": "do_not_send",
"pattern": "",
"output": ""
}
]
},
{
"fieldName": "{data_contact_street}",
"fields": [
{
"source": "{data_contact_street}",
"operator": "is_empty",
"value": "",
"value2": "",
"modification": "do_not_send",
"pattern": "",
"output": ""
}
]
},
{
"fieldName": "{data_contact_zip}",
"fields": [
{
"source": "{data_contact_zip}",
"operator": "is_empty",
"value": "",
"value2": "",
"modification": "do_not_send",
"pattern": "",
"output": ""
}
]
}
]
}
}
},
{
"id": "2-3",
"type": "httpNode",
"position": {
"x": -240,
"y": 200
},
"data": {
"formData": {
"active": true,
"title": "Post",
"subtitle": "",
"method": "POST",
"endpoint": "{endpoint}/?RPC=agents.registerClient",
"timeout": 30,
"format": "login-data-pass",
"parser": "json",
"notsend": null,
"convert_data": null,
"headers": [
{
"key": "Content-type",
"value": "application/x-www-form-urlencoded; charset=UTF-8"
}
],
"query": [],
"body": [
{
"key": "pass",
"value": "{password}"
},
{
"key": "login",
"value": "{username}"
},
{
"key": "data.ip",
"value": "{ip_address}"
},
{
"key": "data.ref",
"value": "{username}"
},
{
"key": "data.city",
"value": "{data_city}"
},
{
"key": "data.city2",
"value": "{data_contact_city}"
},
{
"key": "data.costs",
"value": "{data_expenses}"
},
{
"key": "data.email",
"value": "{data_email}"
},
{
"key": "data.house",
"value": "{data_house_number}"
},
{
"key": "data.house2",
"value": "{data_contact_house_number}"
},
{
"key": "data.income",
"value": "{data_monthly_income}"
},
{
"key": "data.address",
"value": "{data_street}"
},
{
"key": "data.surname",
"value": "{data_last_name}"
},
{
"key": "data.zipcode",
"value": "{data_zip}"
},
{
"key": "data.address2",
"value": "{data_contact_street}"
},
{
"key": "data.realname",
"value": "{data_first_name}"
},
{
"key": "data.zipcode2",
"value": "{data_contact_zip}"
},
{
"key": "data.id_number",
"value": "{data_identity_card_number}"
},
{
"key": "data.marketing",
"value": "0"
},
{
"key": "data.mob_phone",
"value": "{data_cell_phone}"
},
{
"key": "data.workplace",
"value": "{data_employer}"
},
{
"key": "data.contract_c",
"value": "1"
},
{
"key": "data.person_code",
"value": "{data_nin}"
},
{
"key": "data.other_income",
"value": "{data_income_type}"
},
{
"key": "data.chk9_formular",
"value": " "
},
{
"key": "data.create_credit",
"value": "{data_requested_amount}-{data_period}"
},
{
"key": "data.account_number",
"value": "{data_account_number}/{data_bank_code}"
},
{
"key": "data.address_different",
"value": "{data_different_contact_address}"
},
{
"key": "data.chk10_vop_smlouva",
"value": "Potvrzuji, že jsem si přečetl(a) a souhlasím s VOP a podmínkami smlouvy o úvěru"
},
{
"key": "data.workplace_position",
"value": "{data_job_title}"
},
{
"key": "data.chk11_politicky_ex_osoba",
"value": "Prohlašuji, že nejsem politicky exponovanou osobou a mnou uvedené informace jsou pravdivé"
},
{
"key": "data.chk12_osobni_udaje_registry",
"value": "Souhlasím se zpracováním mých osobních údajů pro úvěrové registry"
}
],
"signature": null,
"insecure": null
}
}
},
{
"id": "2-4",
"type": "setNode",
"position": {
"x": -80,
"y": 140
},
"data": {
"formData": {
"active": true,
"title": "Store response",
"subtitle": "",
"fields": [
{
"key": "{redirect_url}",
"value": "{parsedBody.url}"
},
{
"key": "{external_id}",
"value": "{parsedBody.credit_id}"
}
]
}
}
},
{
"id": "2-6",
"type": "endNode",
"position": {
"x": 80,
"y": 140
},
"data": {
"formData": {
"active": true,
"title": "Success",
"subtitle": "",
"success": "success"
}
}
},
{
"id": "2-5",
"type": "modifyFieldNode",
"position": {
"x": -80,
"y": 280
},
"data": {
"formData": {
"active": true,
"title": "Reject reason",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.err}",
"operator": "contains",
"value": "Already registered",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Existing Customer"
},
{
"source": "{parsedBody.err}",
"operator": "contains",
"value": "Age check failed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Age"
},
{
"source": "{parsedBody.err}",
"operator": "contains",
"value": "Nespráv",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.err}",
"operator": "contains",
"value": "Price does not exist",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Product Mismatch"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{body}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "{body}"
}
]
}
]
}
}
},
{
"id": "2-7",
"type": "endNode",
"position": {
"x": 80,
"y": 280
},
"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": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.ok}",
"operator": "equals",
"output": "1",
"output2": ""
},
{
"value": "{parsedBody.personalData.person_code}",
"operator": "equals",
"output": "notFound",
"output2": ""
},
{
"value": "{parsedBody.personalData.email}",
"operator": "equals",
"output": "notFound",
"output2": ""
},
{
"value": "{parsedBody.personalData.mob_phone}",
"operator": "equals",
"output": "notFound",
"output2": ""
},
{
"value": "{parsedBody.personalData.id_number}",
"operator": "equals",
"output": "notFound",
"output2": ""
}
]
}
},
{
"id": "edge-1-2-1-4",
"source": "1-2",
"target": "1-4",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.ok}",
"operator": "equals",
"output": "1",
"output2": ""
},
{
"value": "{parsedBody.personalData}",
"operator": "is_not_empty",
"output": "",
"output2": ""
},
{
"value": "{body}",
"operator": "regex_not_match",
"output": "(?=.*\"ok\"\\s*:\\s*1)(?=.*\"person_code\"\\s*:\\s*\"notFound\")(?=.*\"email\"\\s*:\\s*\"notFound\")(?=.*\"mob_phone\"\\s*:\\s*\"notFound\")(?=.*\"id_number\"\\s*:\\s*\"notFound\")",
"output2": ""
},
{
"value": "{body}",
"operator": "regex_match",
"output": "(?:\"person_code\"\\s*:\\s*\"(?:declined|age_check_failed|registered|Registered)\"|\"(?:email|mob_phone|id_number)\"\\s*:\\s*\"(?:registered|Registered)\")",
"output2": ""
}
]
}
},
{
"id": "edge-1-4-1-5",
"source": "1-4",
"target": "1-5",
"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": "",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.ok}",
"operator": "equals",
"output": "1",
"output2": ""
},
{
"value": "{parsedBody.customer_id}",
"operator": "is_not_empty",
"output": "",
"output2": ""
},
{
"value": "{parsedBody.credit_id}",
"operator": "is_not_empty",
"output": "",
"output2": ""
},
{
"value": "{parsedBody.url}",
"operator": "is_not_empty",
"output": "",
"output2": ""
}
]
}
},
{
"id": "edge-2-3-2-5",
"source": "2-3",
"target": "2-5",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{body}",
"operator": "regex_not_match",
"output": "(?=.*\"ok\"\\s*:\\s*1)(?=.*\"customer_id\"\\s*:\\s*(?:\"[^\"]+\"|\\d+))(?=.*\"credit_id\"\\s*:\\s*(?:\"[^\"]+\"|\\d+))",
"output2": ""
},
{
"value": "{body}",
"operator": "regex_match",
"output": "(?:Already registered|Age check failed|Nespráv|Price does not exist)",
"output2": ""
}
]
}
},
{
"id": "edge-2-4-2-6",
"source": "2-4",
"target": "2-6",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-2-5-2-7",
"source": "2-5",
"target": "2-7",
"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
PůjčkaPlus uses the CreditOnline RPC backend and currently has only the new clients flow. Ping checks whether the person is new; Post calls registerClient, and that same RPC request also creates the credit through create_credit. There is no separate /application call in the current blueprint.
What will be needed from advertiser
| Key | Purpose |
|---|---|
endpoint | CreditOnline tenant API base URL. |
username | RPC login. |
password | RPC password. |
Flows
New clients — Ping, POST /?RPC=agents.checkPersonalData. The client may continue only when all four checked identity fields are notFound.
New clients — Post, POST /?RPC=agents.registerClient. Registers the client and creates the requested credit in one call. Success returns both credit_id and url.
Calls
POST {endpoint}/?RPC=agents.checkPersonalData
POST {endpoint}/?RPC=agents.registerClient
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
format: login-data-pass
The form body has exactly three top-level keys: login, pass and data. login is {username}, pass is {password}, and the actual advertiser payload is written as data.* fields. Do not construct the form envelope manually.
Response model
checkPersonalData uses HTTP 200 for both accepted and refused business outcomes. The Ping decision therefore comes from ok and personalData, not from HTTP status alone. The current PůjčkaPlus blueprint cares about the four identity states person_code, email, mob_phone and id_number: all four must be notFound for a new client to continue. A registered state means the person is already known.
The RPC backend can also return an authentication error as HTTP 200 with an err payload and without a usable ok/personalData. Treat that as a technical credentials failure, not as a business rejection or Ping success.
Unlike the usual CreditOnline three-step pattern, PůjčkaPlus does not call a separate application endpoint. Its registerClient request includes create_credit, so one successful RPC response contains the registration and conversion result together. The current Post only succeeds when ok: 1, customer_id, credit_id and url are all present. Registration/business failures are returned through err; only the concrete texts listed under Outcomes are mapped to reject reasons.
Request fields
Ping
| Field | Required | Value |
|---|---|---|
person_code | yes | {g_id_national_number} |
mob_phone | yes | {g_phone} |
email | yes | {g_email} |
surname | yes | {g_name_last} |
realname | yes | {g_name_first} |
id_number | yes | {g_id_card_number} |
address | yes | {g_address_street} |
house | yes | {g_address_street_number} |
city | yes | {g_address_city} |
zipcode | yes | {g_address_zip} |
Post
The registration request repeats the identity/address fields and adds:
| Field | Required | Value |
|---|---|---|
ip | yes | {ip_address} |
ref | yes | source identifier used by the blueprint |
income | yes | {g_fin_income} |
costs | no | {g_fin_expenses} |
other_income | yes | mapped income type |
workplace | no | {g_employer_name} |
workplace_position | no | {g_employ_position} |
account_number | yes | {g_bank_account_number}/{g_bank_account_code} |
address2, house2, city2, zipcode2 | when different | contact address fields |
address_different | conditionally | inverted “contact address differs” flag |
create_credit | yes | {g_amount}-{g_period} |
contract_c | yes | 1 |
marketing | yes | 0 in the current blueprint |
chk9_formular, chk10_vop_smlouva, chk11_politicky_ex_osoba, chk12_osobni_udaje_registry | yes | advertiser consent/declaration values from the blueprint |
Empty optional contact-address fields are omitted.
Transforms
Income types are translated to the advertiser labels: full-time → Zaměstnanec - plný pracovní úvazek, self-employed → OSVČ/Podnikatel, parental → Mateřská/Rodičovská, pension → Starobní/Invalidní důchodce, unemployed → Nezaměstnaný, other → Zaměstnanec - zkrácený pracovní úvazek.
The contact-address flag is inverted: a value meaning “different address” becomes 0, a value meaning “same address” becomes 1. If the source flag is empty it is omitted rather than guessed.
Outcomes
| Recognised by | HTTP | Meaning | Reject reason |
|---|---|---|---|
Ping: ok: 1 and all four identity fields notFound | 200 | New client, proceed | |
Ping: any identity field registered / Registered | 200 | Already known | Existing Customer |
Ping: person_code: age_check_failed | 200 | Age check failed | Age |
Ping: explicit declined | 200 | Refused without a more specific reason | Unspecified |
Post: ok: 1 + non-empty customer_id, credit_id, url | 200 | Registered and credit created | |
err contains Already registered | 200 | Already known | Existing Customer |
err contains Age check failed | 200 | Age check failed | Age |
err contains Nespráv | 200 | Invalid input | Invalid Data |
err contains Price does not exist | 200 | Requested combination is unavailable | Product Mismatch |
{reason_detail} is the raw {body}. Technical responses outside the recognised HTTP-200 business shapes are left as errors rather than re-labelled as business rejections.
Branching
Ping accepted:
{status} equals 200
{parsedBody.ok} equals 1
{parsedBody.personalData.person_code} equals notFound
{parsedBody.personalData.email} equals notFound
{parsedBody.personalData.mob_phone} equals notFound
{parsedBody.personalData.id_number} equals notFound
Post accepted:
{status} equals 200
{parsedBody.ok} equals 1
{parsedBody.customer_id} is not empty
{parsedBody.credit_id} is not empty
{parsedBody.url} is not empty
Stored values
| Parameter | Source |
|---|---|
{external_id} | {parsedBody.credit_id} |
{redirect_url} | {parsedBody.url} |
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.
