Sell leads to Volsor (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.

AdvertiserVolsor
CountryCZ
SegmentFinance
ProductLoan
Integration typeLead generation
Flows→ 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": -700,
        "y": 0
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "post",
          "beType": "integration"
        }
      }
    },
    {
      "id": "1-2",
      "type": "modifyFieldNode",
      "position": {
        "x": -470,
        "y": 0
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Transform data",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{data_requested_amount}",
              "fields": [
                {
                  "source": "{data_requested_amount}",
                  "operator": "is_greater_than",
                  "value": "20000",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "20000"
                }
              ]
            },
            {
              "fieldName": "{data_employed_time}",
              "fields": [
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "3-month",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "3"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "1-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "10"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "1-2-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "24"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "2-5-year",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "48"
                },
                {
                  "source": "{data_employed_time}",
                  "operator": "equals",
                  "value": "5-year-plus",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "66"
                }
              ]
            },
            {
              "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": "rent",
                  "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_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": "{data_company_number_imported}",
              "fields": [
                {
                  "source": "{data_company_number_imported}",
                  "operator": "is_empty",
                  "value": "",
                  "value2": "",
                  "modification": "do_not_send",
                  "pattern": "",
                  "output": ""
                },
                {
                  "source": "{data_company_number_imported}",
                  "operator": "regex_not_match",
                  "value": "^\\d{8}$",
                  "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": "1-3",
      "type": "httpNode",
      "position": {
        "x": -220,
        "y": 0
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Post",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}/leads/",
          "timeout": 30,
          "format": "application/json",
          "parser": "json",
          "notsend": "null",
          "convert_data": null,
          "headers": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "Authorization",
              "value": "Token {token}"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "zip",
              "value": "{data_zip}"
            },
            {
              "key": "city",
              "value": "{data_city}"
            },
            {
              "key": "agree",
              "value": "1"
            },
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "period",
              "value": "{data_period}"
            },
            {
              "key": "street",
              "value": "{data_street}"
            },
            {
              "key": "country",
              "value": "CZ"
            },
            {
              "key": "product",
              "value": "payday"
            },
            {
              "key": "employer",
              "value": "{data_employer}"
            },
            {
              "key": "expenses",
              "value": "{data_expenses}"
            },
            {
              "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": "employed_time",
              "value": "{data_employed_time}"
            },
            {
              "key": "account_number",
              "value": "{data_account_number}"
            },
            {
              "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": "{data_monthly_income}"
            },
            {
              "key": "employer_address",
              "value": "{data_employer_address}"
            },
            {
              "key": "requested_amount",
              "value": "{data_requested_amount}"
            },
            {
              "key": "remarketing_agree",
              "value": "0"
            },
            {
              "key": "third_party_agree",
              "value": "0"
            },
            {
              "key": "contact_house_number",
              "value": "{data_contact_house_number}"
            },
            {
              "key": "identity_card_number",
              "value": "{data_identity_card_number}"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-4",
      "type": "setNode",
      "position": {
        "x": 40,
        "y": -110
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{redirect_url}",
              "value": "{parsedBody.redirect_url}"
            },
            {
              "key": "{external_id}",
              "value": "{parsedBody.id}"
            }
          ]
        }
      }
    },
    {
      "id": "1-6",
      "type": "endNode",
      "position": {
        "x": 300,
        "y": -110
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "1-5",
      "type": "modifyFieldNode",
      "position": {
        "x": 40,
        "y": 150
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "FAIL",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                },
                {
                  "source": "{parsedBody.errors.period.0}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Product Mismatch"
                },
                {
                  "source": "{parsedBody.errors.requested_amount.0}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Product Mismatch"
                },
                {
                  "source": "{parsedBody.errors.birth_number.0}",
                  "operator": "contains",
                  "value": "Neplatný věk",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Age"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{body}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{body}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-7",
      "type": "endNode",
      "position": {
        "x": 300,
        "y": 150
      },
      "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": "201",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "OK",
            "output2": ""
          },
          {
            "value": "{parsedBody.redirect_url}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          },
          {
            "value": "{parsedBody.id}",
            "operator": "is_not_empty",
            "output": "",
            "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": "400",
            "output2": ""
          },
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "FAIL",
            "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

  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

A lead broker rather than a lender. One call, and an unusually clean answer: 201 with a redirect_url when accepted, 400 with a per-field error map when not.

One field dominates this integration and it is not a credit decision. company_number is validated as a Czech IČO, and anything that is not exactly eight digits passing the checksum is refused. Sent unguarded, it accounts for more than half of all rejections.

Drop it rather than repairing it. A value that is empty, or that does not match ^\d{8}$, goes out of the request with do-not-send. Sending a placeholder or a trimmed version turns a missing field into an invalid one, which is worse.

Volsor also asks for exclusivity: a lead they accept is not to be sent anywhere else.

What will be needed from advertiser

KeyPurpose
endpointBase API URL.
tokenAPI token used in Authorization: Token ….

Flows

Post, POST /leads/. Creates the lead and decides.

Calls

POST {endpoint}/leads/
Authorization: Token {token}
Content-Type: application/json
format: application/json
notsend: null

Request fields

FieldRequiredValue
first_nameyes{g_name_first}
last_nameyes{g_name_last}
birth_numberyes{g_id_national_number}
identity_card_numberyes{g_id_card_number}
emailyes{g_email}
cell_phoneyes{g_phone}
streetyes{g_address_street}
house_numberyes{g_address_street_number}
cityyes{g_address_city}
zipyes{g_address_zip}
contact_streetno{g_address_contact_street}
contact_house_numberno{g_address_contact_street_number}
contact_cityno{g_address_contact_city}
contact_zipno{g_address_contact_zip}
home_statusyes{g_home_type}, see enums
contact_home_statusno{g_home_type}, see enums
income_typeyes{g_fin_type}, see enums
monthly_incomeyes{g_fin_income}
expensesyes{g_fin_expenses}
employerno{g_employer_name}
employer_addressno{g_employer_address}
employer_phoneno{g_employer_phone}
job_titleno{g_employ_position}
employed_timeno{g_employ_time}, see enums
company_numberself-employed{g_company_registration}, exactly eight digits
account_numberyes{g_bank_account_number}
bank_codeyes{g_bank_account_code}, see enums
requested_amountyes{g_amount}, 500 to 20 000
periodyes{g_period}, 1 to 30 days
productyespayday
countryyesCZ
ip_addressyes{ip_address}
agreeyes1
remarketing_agreeno{g_consent_marketing}
third_party_agreeno0

company_number must be exactly eight digits and pass the Czech IČO checksum. Two do-not-send rows cover it: one on is_empty, one on regex_not_match ^\d{8}$. Without them this is the single largest source of rejections in the whole integration.

bank_code and home_status are closed sets. A value outside them is refused with the value quoted back, so an unmapped bucket shows up plainly in the reject detail.

On capping the amount

Where a request exceeds 20 000, send 20 000 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.

Enums

income_type: EMPLOYED, PART_TIME_EMPLOYMENT, SELF_EMPLOYED, PENSION, MATERNITY_LEAVE, BENEFITS, SAVINGS, STUDENT, UNEMPLOYED, OTHER.

home_status: HOME_OWNER, TENANT, DORMITORY, HOSTEL, MINISTRY, EMPLOYEE_BENEFIT, CO_OWNED. Note that rent is not a value; it is TENANT.

employed_time is a number of months: 0, 3 for one to three, 5 for four to seven, 10 for seven to twelve, 24, 36, 48, 60, and 66 for more than five years. Where the form’s bucket falls between two of these, choose the one that presents the lead as qualifying.

bank_code is the Czech bank code, but only from Volsor’s own list. Codes such as 0005 and 0231 are refused.

Outcomes

The rejection body is {"status": "FAIL", "errors": {...}}, where errors is keyed by field name and each value is a list of messages. One response can name several fields at once, so the reject reason should be read from the field that matters most rather than from the first key.

Recognised byHTTPMeaningReject reasonFrequency
status: OK + redirect_url + id201Acceptedcommon
errors.company_number[] ~ Neplatná hodnota400Invalid or missing IČOInvalid Datacommon when unguarded
errors.account_number[] ~ Nesprávné Číslo účtu400Invalid account numberInvalid Dataoccasional
errors.house_number[] ~ neodpovídá požadovanému formátu400Malformed house numberInvalid Dataoccasional
errors.zip[] ~ neodpovídá požadovanému formátu400Malformed postcodeInvalid Datarare
errors.cell_phone[] ~ Nesprávný formát400Malformed phoneInvalid Datarare
errors.home_status[] ~ není platnou možností400Housing value outside the setInvalid Datarare
errors.bank_code[] ~ není platnou možností400Bank code outside the setInvalid Datarare
errors.birth_number[] ~ Neplatný věk400Outside the age rangeAgerare
errors.period[] present400Term outside 1 to 30 daysProduct Mismatchdocumented only
errors.requested_amount[] present400Amount outside 500 to 20 000Product Mismatchdocumented only
HTML error page500Advertiser-side failurerare

Almost every rejection here is a payload problem rather than a credit decision. That is worth naming: a run of Invalid Data on one field means either the field should be dropped when it cannot be valid, or the form should validate it. Neither is a repair regex in this blueprint.

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

Branching

Accepted:

{status}                     equals         201
{parsedBody.status}          equals         OK
{parsedBody.id}              is not empty
{parsedBody.redirect_url}    is not empty

Refused:

{status}                     equals         400
{parsedBody.status}          equals         FAIL

500 returns an HTML page and gets no branch.

Stored values

ParameterSource
{external_id}{parsedBody.id}
{redirect_url}{parsedBody.redirect_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.