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

AdvertiserHyperia
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": -120
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "post",
          "beType": "integration"
        }
      }
    },
    {
      "id": "2-1",
      "type": "startNode",
      "position": {
        "x": -760,
        "y": 310
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "ping",
          "beType": "integration"
        }
      }
    },
    {
      "id": "1-2",
      "type": "modifyFieldNode",
      "position": {
        "x": -570,
        "y": -120
      },
      "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"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-3",
      "type": "httpNode",
      "position": {
        "x": -350,
        "y": -120
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Post",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}/v2/lead/create",
          "timeout": 30,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [
            {
              "key": "lmc",
              "value": "{partner_id}"
            },
            {
              "key": "access-token",
              "value": "{token}"
            },
            {
              "key": "version_hash",
              "value": "{custom_version_hash}"
            }
          ],
          "body": [
            {
              "key": "ssn",
              "value": "{data_nin}"
            },
            {
              "key": "zip",
              "value": "{data_zip}"
            },
            {
              "key": "city",
              "value": "{data_city}"
            },
            {
              "key": "name",
              "value": "{data_first_name}"
            },
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "phone",
              "value": "{data_cell_phone}"
            },
            {
              "key": "amount",
              "value": "{data_requested_amount}"
            },
            {
              "key": "number",
              "value": "{data_house_number}"
            },
            {
              "key": "street",
              "value": "{data_street}"
            },
            {
              "key": "surname",
              "value": "{data_last_name}"
            },
            {
              "key": "bankCode",
              "value": "{data_bank_code}"
            },
            {
              "key": "employer",
              "value": "{data_employer}"
            },
            {
              "key": "loanTerm",
              "value": "{data_period}"
            },
            {
              "key": "homeStatus",
              "value": "{data_home_status}"
            },
            {
              "key": "incomeType",
              "value": "{data_income_type}"
            },
            {
              "key": "employedTime",
              "value": "{data_employed_time}"
            },
            {
              "key": "monthlyIncome",
              "value": "{data_monthly_income}"
            },
            {
              "key": "monthlyExpenses",
              "value": "{data_expenses}"
            },
            {
              "key": "bankAccountNumber",
              "value": "{data_account_number}"
            },
            {
              "key": "identityCardNumber",
              "value": "{data_identity_card_number}"
            },
            {
              "key": "lmSubParams.lmsub1",
              "value": "{eid}"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-4",
      "type": "setNode",
      "position": {
        "x": -110,
        "y": -220
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{external_id}",
              "value": "{parsedBody.data.process_id}"
            }
          ]
        }
      }
    },
    {
      "id": "1-6",
      "type": "waitNode",
      "position": {
        "x": 80,
        "y": -220
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 20s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 20,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "1-8",
      "type": "httpNode",
      "position": {
        "x": 280,
        "y": -220
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Status",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}/v2/lead/process-check-result/",
          "timeout": 30,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [
            {
              "key": "lmc",
              "value": "{partner_id}"
            },
            {
              "key": "process_id",
              "value": "{external_id}"
            },
            {
              "key": "access-token",
              "value": "{token}"
            },
            {
              "key": "version_hash",
              "value": "{custom_version_hash}"
            }
          ],
          "body": [],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-9",
      "type": "setNode",
      "position": {
        "x": 520,
        "y": -300
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{redirect_url}",
              "value": "{parsedBody.data.result.url}"
            }
          ]
        }
      }
    },
    {
      "id": "1-11",
      "type": "endNode",
      "position": {
        "x": 740,
        "y": -300
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "1-10",
      "type": "waitNode",
      "position": {
        "x": 500,
        "y": -90
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 5s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 5,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "1-12",
      "type": "breakerNode",
      "position": {
        "x": 300,
        "y": 20
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Breaker 4x",
          "subtitle": "",
          "maxRepetition": "4"
        }
      }
    },
    {
      "id": "1-5",
      "type": "modifyFieldNode",
      "position": {
        "x": -90,
        "y": 60
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Create",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.data.name}",
                  "operator": "equals",
                  "value": "Validation failed",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{body}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{body}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-7",
      "type": "endNode",
      "position": {
        "x": 140,
        "y": 80
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Create",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "2-2",
      "type": "httpNode",
      "position": {
        "x": -540,
        "y": 310
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Ping",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}/v2/duplicity/check",
          "timeout": 30,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [
            {
              "key": "access-token",
              "value": "{token}"
            },
            {
              "key": "version_hash",
              "value": "{custom_version_hash}"
            }
          ],
          "body": [
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "phone",
              "value": "{data_cell_phone}"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "2-3",
      "type": "endNode",
      "position": {
        "x": -250,
        "y": 220
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "2-4",
      "type": "modifyFieldNode",
      "position": {
        "x": -260,
        "y": 400
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.data.duplicate}",
                  "operator": "equals",
                  "value": "YES",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Duplicate"
                },
                {
                  "source": "{parsedBody.data.result}",
                  "operator": "equals",
                  "value": "Validation failed",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Invalid Data"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{body}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{body}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-5",
      "type": "endNode",
      "position": {
        "x": 20,
        "y": 400
      },
      "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": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "201",
            "output2": ""
          },
          {
            "value": "{parsedBody.success}",
            "operator": "equals",
            "output": "true",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.process_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": "422",
            "output2": ""
          },
          {
            "value": "{parsedBody.success}",
            "operator": "equals",
            "output": "false",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.name}",
            "operator": "equals",
            "output": "Validation failed",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-4-1-6",
      "source": "1-4",
      "target": "1-6",
      "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-12-1-8",
      "source": "1-12",
      "target": "1-8",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-8-1-9",
      "source": "1-8",
      "target": "1-9",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.success}",
            "operator": "equals",
            "output": "true",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.result.type}",
            "operator": "equals",
            "output": "2",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.result.url}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-8-1-10",
      "source": "1-8",
      "target": "1-10",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.success}",
            "operator": "equals",
            "output": "true",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.result.type}",
            "operator": "equals",
            "output": "0",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-9-1-11",
      "source": "1-9",
      "target": "1-11",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-1-10-1-12",
      "source": "1-10",
      "target": "1-12",
      "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": [
          {
            "value": "{status}",
            "operator": "equals",
            "output": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.success}",
            "operator": "equals",
            "output": "true",
            "output2": ""
          },
          {
            "value": "{parsedBody.data.duplicate}",
            "operator": "equals",
            "output": "NO",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-2-2-4",
      "source": "2-2",
      "target": "2-4",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{status}",
            "operator": "regex_match",
            "output": "^(200|422)$",
            "output2": ""
          },
          {
            "value": "{body}",
            "operator": "regex_match",
            "output": "\\\"duplicate\\\"\\s*:\\s*\\\"YES\\\"|\\\"result\\\"\\s*:\\s*\\\"Validation failed\\\"",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-4-2-5",
      "source": "2-4",
      "target": "2-5",
      "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: the create call starts an asynchronous process and the answer arrives later from a separate status endpoint. The redirect URL only exists once the process has finished.

Two things shape the build. The decision is data.result.type, a number, not a string. And the process is genuinely slow, so the loop is the integration.

What will be needed from advertiser

KeyPurpose
endpointBase API URL for the selected environment.
tokenValue for the access-token query parameter.
partner_idPartner code sent as lmc.
custom_version_hashForm version hash sent as version_hash.

Flows

Ping, POST /v2/duplicity/check. E-mail and phone only. Answers duplicate: YES or NO.

Post, POST /v2/lead/create starts the process and returns a process_id, then GET /v2/lead/process-check-result is polled until it resolves.

Calls

POST {endpoint}/v2/duplicity/check
POST {endpoint}/v2/lead/create
GET  {endpoint}/v2/lead/process-check-result/
Content-Type: application/json
format: application/json

Credentials travel as query parameters on every call: access-token, lmc for the partner code, and version_hash identifying the form version in use.

The advertiser also exposes /test-v2/... twins of each endpoint. Point {endpoint} at whichever environment the integration is running in rather than hardcoding the path.

GET /v2/lead/get-inputs returns the fields the current form version requires, which is worth calling once when the version hash changes rather than per lead.

Request fields

Ping
FieldRequiredValue
emailyes{g_email}
phoneyes{g_phone}
Post
FieldRequiredValue
nameyes{g_name_first}
surnameyes{g_name_last}
ssnyes{g_id_national_number}
identityCardNumberyes{g_id_card_number}
emailyes{g_email}
phoneyes{g_phone}
streetyes{g_address_street}
numberyes{g_address_street_number}
cityyes{g_address_city}
zipyes{g_address_zip}
homeStatusyes{g_home_type}
incomeTypeyes{g_fin_type}, see enums
monthlyIncomeyes{g_fin_income}
monthlyExpensesyes{g_fin_expenses}
employerno{g_employer_name}
employedTimeno{g_employ_time}
bankAccountNumberyes{g_bank_account_number}
bankCodeyes{g_bank_account_code}
amountyes{g_amount}
loanTermyes{g_period}
lmSubParams.lmsub1yes{send_id}

lmSubParams.lmsub1 is the reference Hyperia echoes back in postbacks, so it has to be a value you can match on later.

Enums

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

The accepted set for homeStatus, employedTime and bankCode depends on the form version, which is what version_hash identifies. Take them from get-inputs for the version in use rather than from a fixed list.

Outcomes

Every response is wrapped in success plus a data object. success describes the call, not the decision, so it is a precondition rather than a branch.

At the status endpoint the decision is data.result.type, a number:

typeMeaning
0Still processing, ask again
2Finished, data.result.url holds the redirect
Recognised byHTTPMeaningReject reasonFrequency
data.duplicate: NO200Not on file, proceedcommon
data.name: Processed + process_id201Process startedoccasional
data.result.type: 2 + url200Acceptedcommon
data.result.type: 0200Still processing(loop)occasional
data.duplicate: YES200Already on fileDuplicatedocumented only
data.result: Validation failed at the ping422Payload refused, field namedInvalid Datarare
data.name: Validation failed at the create422Payload refused, field namedInvalid Datarare

The 422 body carries data.errors keyed by field name, for example {"email": ["Zadaný e-mail neexistuje"]} and {"zip": ["PSČ nemá správný formát"]}. Pass the whole body through in {reason_detail}; a run of the same field name means the form needs fixing rather than the blueprint.

Note that a validation failure at the ping and at the create put their message in different places, data.result and data.name respectively. Both are Validation failed.

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

Branching

Ping, not on file:

{status}                        equals   200
{parsedBody.success}            equals   true
{parsedBody.data.duplicate}     equals   NO

Ping, refused, matched against {body} so both the duplicate and the validation shape are covered by one condition:

{status}   regex match   ^(200|422)$
{body}     regex match   "duplicate"\s*:\s*"YES"|"result"\s*:\s*"Validation failed"

Create, started:

{status}                        equals         201
{parsedBody.success}            equals         true
{parsedBody.data.process_id}    is not empty

Status, finished:

{status}                          equals         200
{parsedBody.success}              equals         true
{parsedBody.data.result.type}     equals         2
{parsedBody.data.result.url}      is not empty

Status, still processing, back through Wait and Breaker:

{parsedBody.data.result.type}     equals         0

The first wait is long, because the process takes tens of seconds to resolve. Watch the synchronous limit: the applicant is on a loading screen for the whole loop, and the wait plus the Breaker’s repetitions have to fit inside it.

Every loop carries a Breaker with its count in the title.

Stored values

ParameterSource
{external_id}{parsedBody.data.process_id} from the create
{redirect_url}{parsedBody.data.result.url} from the status call

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.