| Advertiser | 7finance |
| 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": -420,
"y": 0
},
"data": {
"formData": {
"active": true,
"title": "",
"subtitle": "",
"flow": "post",
"beType": "integration"
}
}
},
{
"id": "1-2",
"type": "modifyFieldNode",
"position": {
"x": -210,
"y": 0
},
"data": {
"formData": {
"active": true,
"title": "Transform data",
"subtitle": "",
"data": [
{
"fieldName": "{data_insolvency}",
"fields": [
{
"source": "{data_insolvency}",
"operator": "equals",
"value": "no",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "NO"
},
{
"source": "{data_insolvency}",
"operator": "equals",
"value": "yes",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "YES"
}
]
},
{
"fieldName": "{data_distraint}",
"fields": [
{
"source": "{data_distraint}",
"operator": "equals",
"value": "no",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "NO"
},
{
"source": "{data_distraint}",
"operator": "equals",
"value": "yes",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "YES"
}
]
},
{
"fieldName": "{data_home_status}",
"fields": [
{
"source": "{data_home_status}",
"operator": "equals",
"value": "owner",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "HOME_OWNER"
},
{
"source": "{data_home_status}",
"operator": "equals",
"value": "tenant",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "TENANT"
},
{
"source": "{data_home_status}",
"operator": "equals",
"value": "employ-benefits",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "EMPLOYEE_BENEFIT"
},
{
"source": "{data_home_status}",
"operator": "equals",
"value": "family",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "TENANT"
}
]
},
{
"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_LEAVE"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "pension",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "PENSION"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "unemployed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "UNEMPLOYED"
},
{
"source": "{data_income_type}",
"operator": "equals",
"value": "other",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "OTHER"
}
]
}
]
}
}
},
{
"id": "1-3",
"type": "httpNode",
"position": {
"x": 20,
"y": 0
},
"data": {
"formData": {
"active": true,
"title": "Post",
"subtitle": "",
"method": "POST",
"endpoint": "{endpoint}/partners-v1/basic-lead",
"timeout": 30,
"format": "application/json",
"parser": "json",
"notsend": null,
"convert_data": null,
"headers": [
{
"key": "X-Token",
"value": "{token}"
},
{
"key": "Content-Type",
"value": "application/json"
}
],
"query": [],
"body": [
{
"key": "city",
"value": "{data_city}"
},
{
"key": "uuid",
"value": "{eid}"
},
{
"key": "email",
"value": "{data_email}"
},
{
"key": "state",
"value": "CZ"
},
{
"key": "amount",
"value": "{data_requested_amount}"
},
{
"key": "mobile",
"value": "{data_cell_phone}"
},
{
"key": "period",
"value": "{data_period}"
},
{
"key": "street",
"value": "{data_street}"
},
{
"key": "expenses",
"value": "{data_expenses}"
},
{
"key": "postcode",
"value": "{data_zip}"
},
{
"key": "agreement",
"value": "true"
},
{
"key": "distraint",
"value": "NO"
},
{
"key": "last_name",
"value": "{data_last_name}"
},
{
"key": "marketing",
"value": "true"
},
{
"key": "first_name",
"value": "{data_first_name}"
},
{
"key": "insolvency",
"value": "NO"
},
{
"key": "home_status",
"value": "{data_home_status}"
},
{
"key": "income_type",
"value": "{data_income_type}"
},
{
"key": "birth_number",
"value": "{data_nin}"
},
{
"key": "house_number",
"value": "{data_house_number}"
},
{
"key": "monthly_income",
"value": "{data_monthly_income}"
}
],
"signature": null,
"insecure": null
}
}
},
{
"id": "1-4",
"type": "setNode",
"position": {
"x": 270,
"y": -100
},
"data": {
"formData": {
"active": true,
"title": "Store response",
"subtitle": "",
"fields": [
{
"key": "{external_id}",
"value": "{parsedBody.id}"
}
]
}
}
},
{
"id": "1-6",
"type": "endNode",
"position": {
"x": 520,
"y": -100
},
"data": {
"formData": {
"active": true,
"title": "Success",
"subtitle": "",
"success": "success"
}
}
},
{
"id": "1-5",
"type": "modifyFieldNode",
"position": {
"x": 270,
"y": 130
},
"data": {
"formData": {
"active": true,
"title": "Reject reason",
"subtitle": "",
"data": [
{
"fieldName": "{reason}",
"fields": [
{
"source": "{parsedBody.status}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Unspecified"
},
{
"source": "{parsedBody.reason}",
"operator": "equals",
"value": "Empty body",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "ERROR"
},
{
"source": "{parsedBody.reason.city.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.city.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.uuid.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.uuid.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.email.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.email.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.state.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.state.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.amount.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.amount.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.mobile.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.mobile.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.period.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.period.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.street.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.street.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.expenses.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.expenses.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.postcode.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.postcode.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.agreement.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.agreement.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.last_name.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.last_name.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.marketing.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.marketing.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.first_name.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.first_name.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.insolvency.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.insolvency.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.home_status.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.home_status.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.income_type.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.income_type.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.birth_number.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.birth_number.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.house_number.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.house_number.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.monthly_income.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.monthly_income.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.distraint.0}",
"operator": "equals",
"value": "Field missing",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason.distraint.0}",
"operator": "equals",
"value": "Field invalid",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Invalid Data"
},
{
"source": "{parsedBody.reason}",
"operator": "equals",
"value": "Current time period blocked",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Outside Hours"
},
{
"source": "{body}",
"operator": "contains",
"value": "Lead insolvent",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Not Eligible"
},
{
"source": "{body}",
"operator": "contains",
"value": "Income type not allowed",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Not Eligible"
},
{
"source": "{body}",
"operator": "regex_match",
"value": "(duplicate|Duplicate|duplicity|Duplicity)",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "Duplicate"
}
]
},
{
"fieldName": "{reason_detail}",
"fields": [
{
"source": "{body}",
"operator": "always",
"value": "",
"value2": "",
"modification": "replace",
"pattern": "",
"output": "{body}"
}
]
}
]
}
}
},
{
"id": "1-7",
"type": "endNode",
"position": {
"x": 520,
"y": 130
},
"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-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": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.status}",
"operator": "regex_match",
"output": "^(OK|OK - CPS)$",
"output2": ""
}
]
}
},
{
"id": "edge-1-3-1-5",
"source": "1-3",
"target": "1-5",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": [
{
"value": "{status}",
"operator": "equals",
"output": "200",
"output2": ""
},
{
"value": "{parsedBody.status}",
"operator": "regex_not_match",
"output": "^(OK|OK - CPS)$",
"output2": ""
}
]
}
},
{
"id": "edge-1-4-1-6",
"source": "1-4",
"target": "1-6",
"type": "customEdge",
"data": {
"active": true,
"title": "",
"subtitle": "",
"conditions": []
}
},
{
"id": "edge-1-5-1-7",
"source": "1-5",
"target": "1-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
Two endpoints with an identical payload: a check that decides, and a sell that records the lead. Both answer HTTP 200 whatever they think, so nothing may branch on the status code.
The decision is status, and the vocabulary is small: OK, OK - CPS, or FAIL.
Expect the great majority of leads to come back FAIL with the single word Not acceptable, which says nothing beyond no.
What will be needed from advertiser
| Key | Purpose |
|---|---|
endpoint | Base API URL. |
token | API token sent in X-Token. |
Flows
Ping, POST /partners-v1/basic-lead-check. Decides. Nothing is recorded.
Post, POST /partners-v1/basic-lead. Same payload plus contact details. Returns the advertiser’s id.
Calls
POST {endpoint}/partners-v1/basic-lead-check
POST {endpoint}/partners-v1/basic-lead
X-Token: {token}
Content-Type: application/json
format: application/json
Request fields
The ping and the post take the same body. Phone and e-mail are optional at the ping and required at the post.
| Field | Required | Value |
|---|---|---|
uuid | at post | {send_id} |
amount | yes | {g_amount} |
period | yes | {g_period} |
monthly_income | yes | {g_fin_income} |
expenses | yes | {g_fin_expenses} |
insolvency | yes | {g_status}, YES or NO |
distraint | yes | {g_status}, YES or NO |
house_guarantee | no | {g_asset_status}, YES or NO |
first_name | yes | {g_name_first} |
last_name | yes | {g_name_last} |
birth_number | yes | {g_id_national_number}, no slash |
street | yes | {g_address_street} |
house_number | yes | {g_address_street_number} |
city | yes | {g_address_city} |
postcode | yes | {g_address_zip} |
state | yes | CZ, the only accepted value |
home_status | yes | {g_home_type}, see enums |
income_type | yes | {g_fin_type}, see enums |
mobile | at post | {g_phone}, at most nine characters |
email | at post | {g_email} |
agreement | yes | true, must be true |
marketing | no | {g_consent_marketing} |
mobile is capped at nine characters, so a number carrying +420 is refused. Send the national part only.
insolvency and distraint are knockout questions the form has to ask; there is no sensible default for either, and guessing NO invents an answer the applicant never gave.
Enums
income_type: EMPLOYED, PART_TIME_EMPLOYMENT, SELF_EMPLOYED, PENSION, MATERNITY_LEAVE, BENEFITS, SAVINGS, STUDENT, UNEMPLOYED, OTHER.
home_status: HOME_OWNER, CO_OWNED, TENANT, DORMITORY, HOSTEL, MINISTRY, EMPLOYEE_BENEFIT. Living with parents maps to TENANT.
Outcomes
| Recognised by | HTTP | Meaning | Reject reason | Frequency |
|---|---|---|---|---|
status: OK + id | 200 | Accepted | occasional | |
status: OK - CPS | 200 | Accepted for CPS only | documented only | |
status: FAIL, reason: Not acceptable | 200 | Refused, no reason given | Unspecified | common |
reason.mobile[] ~ nanejvýš 9 znaků | 200 | Phone too long | Invalid Data | rare |
reason.mobile[] ~ Neplatný formát | 200 | Malformed phone | Invalid Data | rare |
reason.email[] ~ není platná | 200 | Malformed e-mail | Invalid Data | rare |
name: Internal Server Error | 500 | Advertiser-side failure | rare |
reason has two shapes. On a business refusal it is the string Not acceptable. On a validation failure it is an object keyed by field name, each holding a list of messages, so the useful text is at {parsedBody.reason.mobile.0} with the index.
Distinguish the two by matching "reason"\s*:\s*\{ against {body}. That works on both shapes because {body} is raw text; a regex against {parsedBody} matches nothing, because a parsed object is not a string.
Not acceptable names no condition and is Unspecified, not Not Eligible. It is the bulk of the traffic and the thing to take back to the advertiser.
Reject reasons come from the standard list. See Reject reason for what each one means and when to use it.
Branching
Accepted:
{status} equals 200
{parsedBody.status} regex match ^(OK|OK - CPS)$
Refused, a catch-all scoped to the business field:
{status} equals 200
{parsedBody.status} regex not match ^(OK|OK - CPS)$
500 carries no business result and gets no branch.
Stored values
| Parameter | Source |
|---|---|
{external_id} | {parsedBody.id} from the post |
There is no redirect URL. The applicant continues on your side.
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.
