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

AdvertiserFerratum
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": -341.23002826097,
        "y": -23.971689380365
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "post",
          "beType": "integration"
        }
      }
    },
    {
      "id": "1-2",
      "type": "setNode",
      "position": {
        "x": -283.46312459377,
        "y": -222.41073759441
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Auth credentials",
          "subtitle": "",
          "fields": [
            {
              "key": "{auth0}",
              "value": "{sign_keyid}:{token}"
            }
          ]
        }
      }
    },
    {
      "id": "1-3",
      "type": "modifyFieldNode",
      "position": {
        "x": -152.70369826911,
        "y": -132.96895032007
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Auth header",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{auth}",
              "fields": [
                {
                  "source": "{auth0}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "to_base64",
                  "pattern": "",
                  "output": ""
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-4",
      "type": "httpNode",
      "position": {
        "x": -91.161714805027,
        "y": 32.295557575104
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Auth",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint_auth}oauth/token",
          "timeout": 30,
          "format": "application/x-www-form-urlencoded",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Content-Type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "key": "Authorization",
              "value": "Basic {auth}"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "grant_type",
              "value": "client_credentials"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-5",
      "type": "setNode",
      "position": {
        "x": 17,
        "y": -100
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{access_token}",
              "value": "{parsedBody.access_token}"
            }
          ]
        }
      }
    },
    {
      "id": "1-7",
      "type": "modifyFieldNode",
      "position": {
        "x": 148.5,
        "y": 30.5
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Transform data",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{birth_date}",
              "fields": [
                {
                  "source": "{data_nin}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "cz_nin_to_birthdate",
                  "pattern": "",
                  "output": ""
                }
              ]
            },
            {
              "fieldName": "{data_cell_phone}",
              "fields": [
                {
                  "source": "{data_cell_phone}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "prefix",
                  "pattern": "",
                  "output": "+420"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-9",
      "type": "httpNode",
      "position": {
        "x": 254.00375602962,
        "y": -126.27723037408
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Post",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}api/v1/loan-applications",
          "timeout": 30,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Host",
              "value": "{custom_host}"
            },
            {
              "key": "Digest",
              "value": "{digest}"
            },
            {
              "key": "Signature",
              "value": "{signature}"
            },
            {
              "key": "X-Request-Id",
              "value": "{step_run_id}"
            },
            {
              "key": "Authorization",
              "value": "Bearer {access_token}"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "country",
              "value": "CZ"
            },
            {
              "key": "language",
              "value": "cs"
            },
            {
              "key": "debtors.0.role",
              "value": "1"
            },
            {
              "key": "debtors.0.type",
              "value": "NATURAL_PERSON"
            },
            {
              "key": "applyForLoan.loanType",
              "value": "CREDIT_LIMIT"
            },
            {
              "key": "applyForLoan.term.term",
              "value": "6"
            },
            {
              "key": "applyForLoan.amount.amount",
              "value": "{data_requested_amount}"
            },
            {
              "key": "applyForLoan.term.termUnit",
              "value": "MONTH"
            },
            {
              "key": "applyForLoan.partnerPurpose",
              "value": "OTHER"
            },
            {
              "key": "applyForLoan.amount.currency",
              "value": "CZK"
            },
            {
              "key": "debtors.0.person.formattedName",
              "value": "{data_first_name} {data_last_name}"
            },
            {
              "key": "debtors.0.person.emails.0.value",
              "value": "{data_email}"
            },
            {
              "key": "debtors.0.person.addresses.0.type",
              "value": "RESIDENCE"
            },
            {
              "key": "debtors.0.person.emails.0.primary",
              "value": "true"
            },
            {
              "key": "debtors.0.person.identities.0.type",
              "value": "SSN"
            },
            {
              "key": "debtors.0.person.identities.0.value",
              "value": "{data_nin}"
            },
            {
              "key": "debtors.0.person.addresses.0.country",
              "value": "CZ"
            },
            {
              "key": "debtors.0.person.addresses.0.primary",
              "value": "true"
            },
            {
              "key": "debtors.0.person.phoneNumbers.0.type",
              "value": "MOBILE"
            },
            {
              "key": "debtors.0.person.identities.0.primary",
              "value": "true"
            },
            {
              "key": "debtors.0.person.phoneNumbers.0.value",
              "value": "{data_cell_phone}"
            },
            {
              "key": "applyForLoan.preferences.affiliateMode",
              "value": "HAND_OVER"
            },
            {
              "key": "applyForLoan.preferences.exactMatchOnly",
              "value": "false"
            },
            {
              "key": "debtors.0.person.phoneNumbers.0.primary",
              "value": "true"
            },
            {
              "key": "applyForLoan.preferences.contractRequired",
              "value": "false"
            },
            {
              "key": "applyForLoan.preferences.oneOfferRequired",
              "value": "true"
            },
            {
              "key": "debtors.0.person.naturalPerson.birth.date",
              "value": "{birth_date}"
            },
            {
              "key": "debtors.0.person.addresses.0.components.0.type",
              "value": "CITY"
            },
            {
              "key": "debtors.0.person.addresses.0.components.1.type",
              "value": "ZIP_CODE"
            },
            {
              "key": "debtors.0.person.addresses.0.components.2.type",
              "value": "ADDRESS_LINE_1"
            },
            {
              "key": "debtors.0.person.naturalPerson.names.0.primary",
              "value": "true"
            },
            {
              "key": "debtors.0.person.addresses.0.components.0.value",
              "value": "{data_city}"
            },
            {
              "key": "debtors.0.person.addresses.0.components.1.value",
              "value": "{data_zip}"
            },
            {
              "key": "debtors.0.person.addresses.0.components.2.value",
              "value": "{data_street}"
            },
            {
              "key": "debtors.0.person.naturalPerson.names.0.lastName",
              "value": "{data_last_name}"
            },
            {
              "key": "debtors.0.person.naturalPerson.names.0.firstName",
              "value": "{data_first_name}"
            },
            {
              "key": "debtors.0.person.naturalPerson.employments.0.primary",
              "value": "true"
            },
            {
              "key": "debtors.0.person.naturalPerson.employments.0.partnerType",
              "value": "{data_income_type}"
            },
            {
              "key": "debtors.0.person.naturalPerson.employments.0.employer.name",
              "value": "{data_employer}"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.incomes.0.key",
              "value": "GROSS_INCOME"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.expenses.0.key",
              "value": "LIVING_COSTS"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.incomes.0.period",
              "value": "MONTH"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.expenses.0.period",
              "value": "MONTH"
            },
            {
              "key": "debtors.0.person.naturalPerson.otherFacts.partnerMaritalStatus",
              "value": "SINGLE"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.incomes.0.value.amount",
              "value": "{data_monthly_income}"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.expenses.0.value.amount",
              "value": "{data_expenses}"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.incomes.0.value.currency",
              "value": "CZK"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.expenses.0.value.currency",
              "value": "CZK"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.otherLoans.0.amount.amount",
              "value": "0"
            },
            {
              "key": "debtors.0.person.naturalPerson.financialData.otherLoans.0.amount.currency",
              "value": "CZK"
            }
          ],
          "signature": {
            "type": "digest_keyid_hmac",
            "sha": "256",
            "delimiter": "&"
          },
          "insecure": null
        }
      }
    },
    {
      "id": "1-10",
      "type": "setNode",
      "position": {
        "x": 405.20498262388,
        "y": -13.25146146664
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{external_id}",
              "value": "{parsedBody.applicationId}"
            }
          ]
        }
      }
    },
    {
      "id": "1-12",
      "type": "webhookNode",
      "position": {
        "x": 513.41897676778,
        "y": 65.756733488738
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Status webhook",
          "subtitle": "",
          "wait": true,
          "timeout": 20,
          "token": "1"
        }
      }
    },
    {
      "id": "1-14",
      "type": "httpNode",
      "position": {
        "x": 728.00900866109,
        "y": -99.270543507305
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Offer",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}api/v1/applications/{external_id}/offers",
          "timeout": 40,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Host",
              "value": "{custom_host}"
            },
            {
              "key": "Signature",
              "value": "{signature}"
            },
            {
              "key": "Timestamp",
              "value": "{timestamp}"
            },
            {
              "key": "X-Request-Id",
              "value": "{step_run_id}"
            },
            {
              "key": "Authorization",
              "value": "Bearer {access_token}"
            }
          ],
          "query": [],
          "body": [],
          "signature": {
            "type": "digest_keyid_hmac",
            "sha": "256",
            "delimiter": "&"
          },
          "insecure": null
        }
      }
    },
    {
      "id": "1-15",
      "type": "waitNode",
      "position": {
        "x": 492.33880260633,
        "y": 258.16023970723
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 1s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 1,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "1-16",
      "type": "httpNode",
      "position": {
        "x": 442.26481761024,
        "y": -165.75462475225
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Status",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}api/v1/applications/{external_id}/status",
          "timeout": 40,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Host",
              "value": "{custom_host}"
            },
            {
              "key": "Signature",
              "value": "{signature}"
            },
            {
              "key": "Timestamp",
              "value": "{timestamp}"
            },
            {
              "key": "X-Request-Id",
              "value": "{step_run_id}"
            },
            {
              "key": "Authorization",
              "value": "Bearer {access_token}"
            }
          ],
          "query": [],
          "body": [],
          "signature": {
            "type": "digest_keyid_hmac",
            "sha": "256",
            "delimiter": "&"
          },
          "insecure": null
        }
      }
    },
    {
      "id": "1-17",
      "type": "setNode",
      "position": {
        "x": 929.85193259436,
        "y": 32.551911181055
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{redirect_url}",
              "value": "{parsedBody.offers.0.offerUrl}"
            },
            {
              "key": "{external_id}",
              "value": "{parsedBody.offers.0.offerId}"
            }
          ]
        }
      }
    },
    {
      "id": "1-18",
      "type": "waitNode",
      "position": {
        "x": 752.07850487013,
        "y": 172.91327217542
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 2s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 2,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "1-19",
      "type": "breakerNode",
      "position": {
        "x": 617.33848069845,
        "y": 270.05632074515
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Breaker 3x",
          "subtitle": "",
          "maxRepetition": "3"
        }
      }
    },
    {
      "id": "1-21",
      "type": "endNode",
      "position": {
        "x": 1092.1663804927,
        "y": -178.77534002409
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "1-22",
      "type": "breakerNode",
      "position": {
        "x": 882.13768907333,
        "y": 218.54131718867
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Breaker 2x",
          "subtitle": "",
          "maxRepetition": "2"
        }
      }
    },
    {
      "id": "1-6",
      "type": "modifyFieldNode",
      "position": {
        "x": 17,
        "y": 220
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Auth",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.access_token}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "ERROR"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{status}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "auth failed, http {status}"
                },
                {
                  "source": "{parsedBody.error_description}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.error_description}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-8",
      "type": "endNode",
      "position": {
        "x": 195.03505083052,
        "y": 182.76288122891
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Auth",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "1-11",
      "type": "modifyFieldNode",
      "position": {
        "x": 280.25376185867,
        "y": 290.89759318929
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Post",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.applicationId}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "ERROR"
                },
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "contains",
                  "value": "LENDING_0115",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                },
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "contains",
                  "value": "LENDING_0327",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                },
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "contains",
                  "value": "LENDING_0328",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                },
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "contains",
                  "value": "LENDING_0329",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                },
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "contains",
                  "value": "LENDING_0330",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.errors.0.code}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.errors.0.code}: {parsedBody.errors.0.detail}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-13",
      "type": "endNode",
      "position": {
        "x": 572.4123729237,
        "y": 381.9216612964
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Post",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "1-20",
      "type": "modifyFieldNode",
      "position": {
        "x": 600,
        "y": -340
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Status",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.applicationStatus}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                },
                {
                  "source": "{parsedBody.closingType}",
                  "operator": "equals",
                  "value": "EXPIRED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Expired"
                },
                {
                  "source": "{parsedBody.closingType}",
                  "operator": "equals",
                  "value": "CANCELLED_BY_USER",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Cancelled by Customer"
                },
                {
                  "source": "{parsedBody.closingType}",
                  "operator": "equals",
                  "value": "CANCELLED_BY_PARTNER",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Cancelled by Advertiser"
                },
                {
                  "source": "{parsedBody.closingType}",
                  "operator": "equals",
                  "value": "CANCELLED_BY_SYSTEM",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Cancelled by Advertiser"
                },
                {
                  "source": "{parsedBody.closingType}",
                  "operator": "equals",
                  "value": "DENIED_BY_SCORING",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Poor Credit"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_001",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Age"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_002",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Age"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_003",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Poor Credit"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_004",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Fraud"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_005",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Not Eligible"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_007",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_008",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_010",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Low Income"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_013",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Verification Failed"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_020",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Low Income"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_021",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Too Much Debt"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_023",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Poor Credit"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_025",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "ERROR"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_026",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "ERROR"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_103",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "contains",
                  "value": "LENDING_DENY_999",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.applicationStatus}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.applicationStatus} / {parsedBody.closingType}"
                },
                {
                  "source": "{parsedBody.closingReasons.0.code}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.closingType} / {parsedBody.closingReasons.0.code}: {parsedBody.closingReasons.0.description}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-23",
      "type": "endNode",
      "position": {
        "x": 860,
        "y": -340
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Status",
          "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": []
      }
    },
    {
      "id": "edge-1-4-1-5",
      "source": "1-4",
      "target": "1-5",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.access_token}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-4-1-6",
      "source": "1-4",
      "target": "1-6",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "auth failed",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.access_token}",
            "operator": "is_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-5-1-7",
      "source": "1-5",
      "target": "1-7",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-7-1-9",
      "source": "1-7",
      "target": "1-9",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-9-1-10",
      "source": "1-9",
      "target": "1-10",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "accepted",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.applicationId}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-9-1-11",
      "source": "1-9",
      "target": "1-11",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "no applicationId",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.applicationId}",
            "operator": "is_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-10-1-12",
      "source": "1-10",
      "target": "1-12",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-19-1-12",
      "source": "1-19",
      "target": "1-12",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{operationStatus}",
            "operator": "not_equals",
            "output": "COMPLETED",
            "output2": ""
          },
          {
            "value": "{actionType}",
            "operator": "not_equals",
            "output": "status-update",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-16-1-12",
      "source": "1-16",
      "target": "1-12",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "not DEN|CAN",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.applicationStatus}",
            "operator": "regex_not_match",
            "output": "DEN|CAN",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-12-1-14",
      "source": "1-12",
      "target": "1-14",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "offers-ready",
        "subtitle": "",
        "conditions": [
          {
            "value": "{operationStatus}",
            "operator": "equals",
            "output": "COMPLETED",
            "output2": ""
          },
          {
            "value": "{actionType}",
            "operator": "equals",
            "output": "offers-ready",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-12-1-15",
      "source": "1-12",
      "target": "1-15",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "Not status-update",
        "subtitle": "",
        "conditions": [
          {
            "value": "{operationStatus}",
            "operator": "not_equals",
            "output": "COMPLETED",
            "output2": ""
          },
          {
            "value": "{actionType}",
            "operator": "not_equals",
            "output": "status-update",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-12-1-16",
      "source": "1-12",
      "target": "1-16",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "status-update",
        "subtitle": "",
        "conditions": [
          {
            "value": "{operationStatus}",
            "operator": "equals",
            "output": "COMPLETED",
            "output2": ""
          },
          {
            "value": "{actionType}",
            "operator": "equals",
            "output": "status-update",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-22-1-14",
      "source": "1-22",
      "target": "1-14",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-14-1-17",
      "source": "1-14",
      "target": "1-17",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "APPROVED",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.offers.0.offerUrl}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-14-1-18",
      "source": "1-14",
      "target": "1-18",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.offers.0.offerUrl}",
            "operator": "is_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-15-1-19",
      "source": "1-15",
      "target": "1-19",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-16-1-20",
      "source": "1-16",
      "target": "1-20",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "DEN|CAN",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.applicationStatus}",
            "operator": "regex_match",
            "output": "DEN|CAN",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-17-1-21",
      "source": "1-17",
      "target": "1-21",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-18-1-22",
      "source": "1-18",
      "target": "1-22",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-6-1-8",
      "source": "1-6",
      "target": "1-8",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-11-1-13",
      "source": "1-11",
      "target": "1-13",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-20-1-23",
      "source": "1-20",
      "target": "1-23",
      "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

OAuth2 for a bearer token, a signed request body on top of it, an asynchronous decision delivered by webhook, and a separate call to fetch the offer once it exists.

Four things have to go right in order: authenticate, submit, wait for the decision, fetch the offer. Each is a separate step and each can fail on its own.

What will be needed from advertiser

KeyPurpose
endpointBase API URL for application, status and offer calls.
tokenOAuth client secret.
endpoint_authBase URL for OAuth authentication.
sign_keyidOAuth client ID and signing key ID.
sign_secretHMAC signing secret.
custom_hostHost value used in signed requests.

Flows

Post, as one flow:

Auth -> Post -> webhook (offers-ready | status-update) -> Offer -> Success
                    |                                       |
                    +-- timeout -> Wait -> Breaker ---------+
                    |
                    +-- status-update -> Status -> DENIED|CANCELLED -> Rejected

Authentication runs once. The token stays valid for everything that follows, so a second Auth node before each request is duplication rather than safety.

Calls

Auth
POST {endpoint_auth}oauth/token
Authorization: Basic base64({sign_keyid}:{token})
Content-Type: application/x-www-form-urlencoded
format: application/x-www-form-urlencoded

grant_type=client_credentials

The client ID and secret are the two halves of Basic auth. Build the header at run time from {sign_keyid} and {token} rather than storing an encoded blob.

Post, Status and Offer
POST {endpoint}api/v1/loan-applications
GET  {endpoint}api/v1/applications/{external_id}/status
GET  {endpoint}api/v1/applications/{external_id}/offers

Authorization: Bearer {custom_access_token}
Host: {custom_host}
Digest: {digest}
Signature: {signature}
X-Request-Id: {step_run_id}
Content-Type: application/json
format: application/json

Signing uses the digest_keyid_hmac algorithm with SHA-256 and & as the delimiter. The node computes {digest} and {signature}; the secret itself lives in sign_secret and never travels. sign_keyid is the public key identifier the advertiser uses to pick which secret to verify against, which is why it also serves as the OAuth client ID.

Host has to be set explicitly because the signature covers it.

Request fields

Dotted paths, deeply nested, and the applicant sits inside a debtors array. Every field under it is prefixed debtors.0..

FieldRequiredValue
countryyesCZ
languageyescs
debtors.0.roleyes1
debtors.0.typeyesNATURAL_PERSON
debtors.0.person.formattedNameyes{g_name_first} {g_name_last}
debtors.0.person.naturalPerson.names.0.firstNameyes{g_name_first}
debtors.0.person.naturalPerson.names.0.lastNameyes{g_name_last}
debtors.0.person.naturalPerson.names.0.primaryyestrue
debtors.0.person.naturalPerson.birth.dateyes{g_birth_date}, or derived, see below
debtors.0.person.identities.0.typeyesSSN
debtors.0.person.identities.0.valueyes{g_id_national_number}
debtors.0.person.identities.0.primaryyestrue
debtors.0.person.emails.0.valueyes{g_email}
debtors.0.person.emails.0.primaryyestrue
debtors.0.person.phoneNumbers.0.typeyesMOBILE
debtors.0.person.phoneNumbers.0.valueyes{g_phone} with +420
debtors.0.person.phoneNumbers.0.primaryyestrue
debtors.0.person.addresses.0.typeyesRESIDENCE
debtors.0.person.addresses.0.countryyesCZ
debtors.0.person.addresses.0.primaryyestrue
debtors.0.person.addresses.0.components.0yestype: CITY, value: {g_address_city}
debtors.0.person.addresses.0.components.1yestype: ZIP_CODE, value: {g_address_zip}
debtors.0.person.addresses.0.components.2yestype: ADDRESS_LINE_1, value: {g_address_street}
...employments.0.partnerTypeyes{g_fin_type}, see enums
...employments.0.employer.nameyes{g_employer_name}
...employments.0.primaryyestrue
...financialData.incomes.0.keyyesGROSS_INCOME
...financialData.incomes.0.value.amountyes{g_fin_income}
...financialData.incomes.0.value.currencyyesCZK
...financialData.incomes.0.periodyesMONTH
...financialData.expenses.0.keyyesLIVING_COSTS
...financialData.expenses.0.value.amountyes{g_fin_expenses}
...financialData.otherLoans.0.amount.amountyes{g_fin_expenses_credit}
...otherFacts.partnerMaritalStatusyes{g_marital_status}, see enums
applyForLoan.loanTypeyesCREDIT_LIMIT
applyForLoan.amount.amountyes{g_amount}
applyForLoan.amount.currencyyesCZK
applyForLoan.term.termyes{g_period}
applyForLoan.term.termUnityesMONTH
applyForLoan.partnerPurposeyes{g_purpose}
applyForLoan.preferences.affiliateModeyesHAND_OVER
applyForLoan.preferences.oneOfferRequiredyestrue
applyForLoan.preferences.exactMatchOnlyyesfalse
applyForLoan.preferences.contractRequiredyesfalse

Date of birth comes from {g_birth_date} where the form collects it. Where it does not, derive it from the national ID with the built-in conversion rather than a hand-written regex:

{custom_birth_date}   source {g_id_national_number}   always   cz_nin_to_birthdate

Phone numbers need the +420 prefix. Add it with the prefix modification.

preferences.oneOfferRequired: true and affiliateMode: HAND_OVER are what make the flow usable: one offer is produced and the applicant is handed over to Ferratum to complete it.

Enums

partnerType on employment, partnerMaritalStatus and partnerPurpose all take Ferratum’s own vocabularies. They are agreed per partner rather than published, so take them from the current contract rather than assuming.

The webhook

Ferratum does not answer synchronously. The application returns an applicationId and the decision arrives later on the callback endpoint, carrying two fields:

actionTypeWith operationStatus: COMPLETEDWhat to do
offers-readyThe offer existsFetch it from the offers endpoint
status-updateThe application changed stateFetch the status and read it

A webhook that times out is not a rejection. Loop back through a Wait and a Breaker and ask the status endpoint directly. Both Breakers need their counts in their titles, and the synchronous limit applies for the whole time the applicant is on a loading screen.

Outcomes

The application call answers with an applicationId when it was accepted, and with an errors array when it was not. The decision itself arrives later, in applicationStatus and closingType from the status endpoint.

Recognised byMeaningReject reasonFrequency
applicationId presentApplication accepted, wait for the offercommon
offers.0.offerUrl presentOffer ready, this is the conversionoccasional
applicationStatus not matching `DENCAN`Still running
errors.0.code: LENDING_0115Payload refusedInvalid Dataoccasional
errors.0.code: LENDING_0327 to LENDING_0330Payload refusedInvalid Dataoccasional
closingType: DENIED_BY_SCORINGRefused by scoringPoor Creditoccasional
closingType: EXPIREDOffer never openedExpiredoccasional
closingType: CANCELLED_BY_USERThe applicant walked awayCancelled by Customeroccasional
closingType: CANCELLED_BY_PARTNERFerratum cancelled itCancelled by Advertiserrare
closingType: CANCELLED_BY_SYSTEMCancelled automaticallyCancelled by Advertiserrare
closingReasons.0.code: LENDING_DENY_001Applicant underageAgeoccasional
LENDING_DENY_002Applicant over the age limitAgeoccasional
LENDING_DENY_003Too high riskPoor Creditcommon
LENDING_DENY_004Fraud suspectedFraudrare
LENDING_DENY_005Employment history too shortNot Eligibleoccasional
LENDING_DENY_008Existing loanExisting Customeroccasional
LENDING_DENY_010Monthly income too lowLow Incomeoccasional
LENDING_DENY_013Identification failedVerification Failedoccasional
LENDING_DENY_021Affordability checkToo Much Debtoccasional
LENDING_DENY_023Credit rating too lowPoor Creditcommon
LENDING_DENY_025Internal system errortechnical
LENDING_DENY_026Third-party errortechnical
LENDING_DENY_103Another offer already takenExisting Customeroccasional
LENDING_DENY_999Refused, no reason givenUnspecifiedoccasional

LENDING_DENY_025 and _026 are Ferratum’s own failures wearing a rejection code. They are not the lead’s fault and should not be reported as a rejection reason. Leave them uncovered rather than mapping them.

An Auth call that returns no access_token is a broken integration, not a rejected lead. It gets its own End node and no reject reason.

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

Branching

Auth succeeded:

{parsedBody.access_token}    is not empty

Application accepted:

{parsedBody.applicationId}   is not empty

Webhook, offer ready:

{operationStatus}   equals   COMPLETED
{actionType}        equals   offers-ready

Webhook, status changed:

{operationStatus}   equals   COMPLETED
{actionType}        equals   status-update

Status, terminal rejection:

{parsedBody.applicationStatus}   regex match       DEN|CAN

Status, still running, back to the webhook:

{parsedBody.applicationStatus}   regex not match   DEN|CAN

Offer ready:

{parsedBody.offers.0.offerUrl}   is not empty

The offers array needs its index. {parsedBody.offers.offerUrl} resolves to literal text, which is never empty, so the branch fires on every response including the ones with no offer at all.

Stored values

ParameterSource
{custom_access_token}{parsedBody.access_token} from Auth
{external_id}{parsedBody.applicationId} from the application, then {parsedBody.offers.0.offerId} once the offer exists
{redirect_url}{parsedBody.offers.0.offerUrl}

The application ID identifies the request; the offer ID identifies what was sold. Overwrite {external_id} with the offer ID at the end so the report reconciles against what Ferratum actually issued.

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.