Sell leads to Duofin (CZ)

Maximize revenue from your leads by connecting this advertiser to your PalDock workspace. The integration is prebuilt, so you can go live in a few clicks, no developer needed.

AdvertiserDuofin
CountryCZ
SegmentFinance
ProductLoan
Integration typeLead generation
FlowsPing → Post

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": -760,
        "y": 40
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "post",
          "beType": "integration"
        }
      }
    },
    {
      "id": "2-1",
      "type": "startNode",
      "position": {
        "x": -760,
        "y": 400
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "ping",
          "beType": "integration"
        }
      }
    },
    {
      "id": "1-2",
      "type": "modifyFieldNode",
      "position": {
        "x": -550,
        "y": 40
      },
      "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_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"
                }
              ]
            },
            {
              "fieldName": "{same_address}",
              "fields": [
                {
                  "source": "{data_different_contact_address}",
                  "operator": "equals",
                  "value": "true",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "0"
                },
                {
                  "source": "{data_different_contact_address}",
                  "operator": "equals",
                  "value": "false",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "1"
                }
              ]
            },
            {
              "fieldName": "{data_employed_time}",
              "fields": [
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "3-month",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "1"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "1-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "3"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "1-2-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "4"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "2-5-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "5"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "5-year-plus",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "8"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-3",
      "type": "httpNode",
      "position": {
        "x": -310,
        "y": 40
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Post",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}/fe/leadSignUp",
          "timeout": 30,
          "format": null,
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [],
          "query": [
            {
              "key": "zip",
              "value": "{data_zip}"
            },
            {
              "key": "auth",
              "value": "{token}"
            },
            {
              "key": "city",
              "value": "{data_city}"
            },
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "period",
              "value": "toInt({data_period})"
            },
            {
              "key": "street",
              "value": "{data_street}"
            },
            {
              "key": "employer",
              "value": "{data_employer}"
            },
            {
              "key": "bank_code",
              "value": "{data_bank_code}"
            },
            {
              "key": "job_title",
              "value": "{data_job_title}"
            },
            {
              "key": "last_name",
              "value": "{data_last_name}"
            },
            {
              "key": "cell_phone",
              "value": "{data_cell_phone}"
            },
            {
              "key": "first_name",
              "value": "{data_first_name}"
            },
            {
              "key": "ip_address",
              "value": "{ip_address}"
            },
            {
              "key": "contact_zip",
              "value": "{data_contact_zip}"
            },
            {
              "key": "home_status",
              "value": "{data_home_status}"
            },
            {
              "key": "income_type",
              "value": "{data_income_type}"
            },
            {
              "key": "birth_number",
              "value": "{data_nin}"
            },
            {
              "key": "contact_city",
              "value": "{data_contact_city}"
            },
            {
              "key": "house_number",
              "value": "{data_house_number}"
            },
            {
              "key": "same_address",
              "value": "toBool({same_address})"
            },
            {
              "key": "employed_time",
              "value": "toInt({data_employed_time})"
            },
            {
              "key": "source_detail",
              "value": "{eid}"
            },
            {
              "key": "company_number",
              "value": "{data_company_number_imported}"
            },
            {
              "key": "contact_street",
              "value": "{data_contact_street}"
            },
            {
              "key": "employer_phone",
              "value": "{data_employer_phone}"
            },
            {
              "key": "monthly_income",
              "value": "toInt({data_monthly_income})"
            },
            {
              "key": "employer_address",
              "value": "{data_employer_address}"
            },
            {
              "key": "monthly_expenses",
              "value": "toInt({data_expenses})"
            },
            {
              "key": "requested_amount",
              "value": "toFloat({data_requested_amount})"
            },
            {
              "key": "bank_account_number",
              "value": "{data_account_number}"
            },
            {
              "key": "contact_house_number",
              "value": "{data_contact_house_number}"
            },
            {
              "key": "identity_card_number",
              "value": "{data_identity_card_number}"
            }
          ],
          "body": [],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-4",
      "type": "setNode",
      "position": {
        "x": -40,
        "y": -20
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{external_id}",
              "value": "{parsedBody.refno}"
            },
            {
              "key": "{redirect_url}",
              "value": "{parsedBody.url}"
            }
          ]
        }
      }
    },
    {
      "id": "1-6",
      "type": "endNode",
      "position": {
        "x": 210,
        "y": -20
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "1-5",
      "type": "modifyFieldNode",
      "position": {
        "x": -40,
        "y": 140
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "DuoFinance status {parsedBody.status}"
                },
                {
                  "source": "{parsedBody.refno}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "DuoFinance status {parsedBody.status}, refno={parsedBody.refno}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-7",
      "type": "endNode",
      "position": {
        "x": 210,
        "y": 140
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "2-2",
      "type": "modifyFieldNode",
      "position": {
        "x": -550,
        "y": 400
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Transform data",
          "subtitle": "",
          "data": [
            {
              "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": "family",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "CO_OWNED"
                },
                {
                  "source": "{data_home_status}",
                  "operator": "equals",
                  "value": "employ-benefits",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "EMPLOYEE_BENEFIT"
                }
              ]
            },
            {
              "fieldName": "{data_period}",
              "fields": [
                {
                  "source": "{data_period}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "30"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-3",
      "type": "httpNode",
      "position": {
        "x": -310,
        "y": 400
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Ping",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}/fe/leadFindPerson",
          "timeout": 30,
          "format": null,
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [],
          "query": [
            {
              "key": "zip",
              "value": "{data_zip}"
            },
            {
              "key": "auth",
              "value": "{token}"
            },
            {
              "key": "city",
              "value": "{data_city}"
            },
            {
              "key": "period",
              "value": "toInt({data_period})"
            },
            {
              "key": "street",
              "value": "{data_street}"
            },
            {
              "key": "last_name",
              "value": "{data_last_name}"
            },
            {
              "key": "first_name",
              "value": "{data_first_name}"
            },
            {
              "key": "ip_address",
              "value": "{ip_address}"
            },
            {
              "key": "home_status",
              "value": "{data_home_status}"
            },
            {
              "key": "birth_number",
              "value": "{data_nin}"
            },
            {
              "key": "house_number",
              "value": "{data_house_number}"
            },
            {
              "key": "source_detail",
              "value": "{eid}"
            },
            {
              "key": "requested_amount",
              "value": "toFloat({data_requested_amount})"
            }
          ],
          "body": [],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "2-4",
      "type": "endNode",
      "position": {
        "x": -40,
        "y": 340
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "2-5",
      "type": "modifyFieldNode",
      "position": {
        "x": -40,
        "y": 500
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "DuoFinance status {parsedBody.status}"
                },
                {
                  "source": "{parsedBody.refno}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "DuoFinance status {parsedBody.status}, refno={parsedBody.refno}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-6",
      "type": "endNode",
      "position": {
        "x": 210,
        "y": 500
      },
      "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": "Accepted",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "404",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "404",
            "output2": ""
          },
          {
            "value": "{parsedBody.url}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-3-1-5",
      "source": "1-3",
      "target": "1-5",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "Rejected",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "200",
            "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": []
      }
    },
    {
      "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": "404",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "404",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-3-2-5",
      "source": "2-3",
      "target": "2-5",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "Rejected",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-5-2-6",
      "source": "2-5",
      "target": "2-6",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    }
  ]
}

How it works

  1. 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.
  2. Enter your credentials – Paste the secrets you received from advertiser and set your Pingtree
  3. 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

Everything travels in the query string on GET requests, and the status codes are inverted relative to every other integration in this library:

HTTPMeaning
404The advertiser wants the lead
200The advertiser is not interested
500Mixed: sometimes a real failure, sometimes a validation message

404 means “person not found”, which is exactly the answer that makes a lead worth having. An integration that treats 404 as a failure and 200 as a success sells nothing and reports every good lead as an error.

What will be needed from advertiser

KeyPurpose
endpointBase API URL.
tokenValue for the auth query parameter.

Flows

Ping, GET /fe/leadFindPerson. Identifying fields only. 404 means proceed.

Post, GET /fe/leadSignUp. Full payload. 404 with a url means accepted.

Calls

GET {endpoint}/fe/leadFindPerson?auth={token}&…
GET {endpoint}/fe/leadSignUp?auth={token}&…

Auth is the auth query parameter. There are no headers and no body.

Request fields

All as query parameters.

Ping
FieldRequiredValue
authyes{token}
first_nameyes{g_name_first}
last_nameyes{g_name_last}
birth_numberyes{g_id_national_number}
streetyes{g_address_street}
house_numberyes{g_address_street_number}
cityyes{g_address_city}
zipyes{g_address_zip}
home_statusyes{g_home_type}, see enums
requested_amountyestoFloat({g_amount})
periodyestoInt({g_period})
ip_addressyes{ip_address}
source_detailyes{send_id}
Post

Everything above, plus:

FieldRequiredValue
emailyes{g_email}
cell_phoneyes{g_phone}
identity_card_numberyes{g_id_card_number}
income_typeyes{g_fin_type}, see enums
monthly_incomeyestoInt({g_fin_income})
monthly_expensesyestoInt({g_fin_expenses})
employerno{g_employer_name}
employer_phoneno{g_employer_phone}
employer_addressno{g_employer_address}
job_titleno{g_employ_position}
employed_timeno{g_employ_time}, see enums
company_numberself-employed{g_company_registration}
bank_account_numberyes{g_bank_account_number}
bank_codeyes{g_bank_account_code}
contact_streetno{g_address_contact_street}
contact_zipno{g_address_contact_zip}
contact_cityno{g_address_contact_city}
same_addressyestoBool(...), inverse of {g_address_contact_status}
marital_statusno{g_marital_status}, see enums

same_address is inverted relative to a “contact address differs” checkbox.

Numeric fields are typed. Convert inline with toInt(...) and toFloat(...) in the HTTP node, one conversion, never nested.

Enums

income_type: EMPLOYED, SELF_EMPLOYED, MATERNITY_LEAVE, PENSION, UNEMPLOYED, OTHER.

home_status: HOME_OWNER, TENANT, DORMITORY, HOSTEL, MINISTRY, EMPLOYEE_BENEFIT, CO_OWNED.

marital_status: SINGLE, MARRIED, PARTNERSHIP, DIVORCED, WIDOWED, SEPARATED.

employed_time is a bucket count: 1 under three months, 3 under a year, 4 one to two years, 5 two to five years, 8 over five years. Where the form’s bucket falls between two of the advertiser’s, choose the one that presents the lead as qualifying.

Outcomes

The body carries its own status field and it does not agree with the HTTP status code. Neither one alone is reliable at the post: the signal that the lead was taken is the presence of url.

Recognised byHTTPMeaningReject reasonFrequency
status: 404404Person not known, proceed,common
url present404Accepted,common
status: 200200Not interested, no reason givenUnspecifiedcommon
,500Internal error, (technical)rare

The vocabulary is this small. There is no reason code and no message beyond Person not found, so every refusal is Unspecified.

Reject reasons come from the standard list. See Reject reason for what each one means and when to use it.

Branching

Ping, proceed:

{status}                  equals   404
{parsedBody.status}       equals   404

The ping also returns 404 with refno and url already filled in for a person the advertiser recognises. Both are still “wanted”; the post is what records the lead.

Ping, not interested:

{status}                  equals   200
{parsedBody.status}       equals   200

Post, accepted:

{status}                  equals         404
{parsedBody.status}       equals         404
{parsedBody.url}          is not empty

Post, refused:

{status}                  equals   200
{parsedBody.status}       equals   200

500 gets a branch only for the validation cases, and only because the body names a field:

{status}    equals        500
{body}      regex match   Kontrolni cifra|Invalid email address

leadgenia: disabled and the database errors get no branch. They Dead End, which is what makes them visible.

Stored values

ParameterSource
{external_id}{parsedBody.refno}
{redirect_url}{parsedBody.url}

Author

Affiliate and lead generation expert with 15+ years as partner, advertiser and network, including end to end product design from concept to rollout of an affiliate tracking platform. Background in lending, telco, gambling and other verticals with a focus on tracking, affiliate management, fraud prevention, integrations and lead generation.

The Affiliate Platform Guide

Everything you need to choose the right affiliate platform in one place. Download the complete guide and keep it as your handy reference.