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

AdvertiserViaSMS
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": -358.51408450704,
        "y": 228.49295774648
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "ping",
          "beType": "integration"
        }
      }
    },
    {
      "id": "2-1",
      "type": "startNode",
      "position": {
        "x": -481.5,
        "y": -28.5
      },
      "data": {
        "formData": {
          "active": true,
          "title": "",
          "subtitle": "",
          "flow": "post",
          "beType": "integration"
        }
      }
    },
    {
      "id": "1-2",
      "type": "modifyFieldNode",
      "position": {
        "x": -192.5,
        "y": 155.5
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Transform data",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{data_nin}",
              "fields": [
                {
                  "source": "{data_nin}",
                  "operator": "always",
                  "value": "",
                  "value2": "",
                  "modification": "regex_replace",
                  "pattern": "(\\d{6})(\\d{3,4})",
                  "output": "$1/$2"
                }
              ]
            },
            {
              "fieldName": "{data_income_type}",
              "fields": [
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "full-time",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "EMPLOYMENT"
                },
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "self-employed",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "SELF_EMPLOYMENT"
                },
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "parental",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "SOCIAL_OR_PARENTAL_SUPPORT"
                },
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "pension",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "PENSION"
                },
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "other",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "OTHER"
                },
                {
                  "source": "{data_income_type}",
                  "operator": "equals",
                  "value": "unemployed",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "OTHER"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "1-3",
      "type": "httpNode",
      "position": {
        "x": -59.5,
        "y": 267.5
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Ping",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}/api/public/partners/{partner_id}/requests",
          "timeout": 30,
          "format": null,
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "X-Api-Key",
              "value": "{token}"
            },
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "last_name",
              "value": "{data_last_name}"
            },
            {
              "key": "first_name",
              "value": "{data_first_name}"
            },
            {
              "key": "national_id",
              "value": "{data_nin}"
            },
            {
              "key": "mobile_phone",
              "value": "{data_cell_phone}"
            },
            {
              "key": "income_source",
              "value": "{data_income_type}"
            },
            {
              "key": "living_expenses",
              "value": "{data_expenses}"
            },
            {
              "key": "net_monthly_income",
              "value": "{data_monthly_income}"
            },
            {
              "key": "requested_principal",
              "value": "{data_requested_amount}"
            },
            {
              "key": "expenses_on_existing_loans",
              "value": "0"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "1-4",
      "type": "setNode",
      "position": {
        "x": 97.5,
        "y": 131.8125
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{external_id}",
              "value": "{parsedBody.request_uuid}"
            }
          ]
        }
      }
    },
    {
      "id": "1-7",
      "type": "endNode",
      "position": {
        "x": 293.50431757158,
        "y": 173.63153106718
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "2-4",
      "type": "httpNode",
      "position": {
        "x": -244.38893078905,
        "y": -287.39736298286
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Status",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}/api/public/partners/{partner_id}/requests/{external_id}",
          "timeout": 30,
          "format": null,
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "X-Api-Key",
              "value": "{token}"
            },
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "last_name",
              "value": "{data_last_name}"
            },
            {
              "key": "first_name",
              "value": "{data_first_name}"
            },
            {
              "key": "national_id",
              "value": "{data_identity_card_number}"
            },
            {
              "key": "mobile_phone",
              "value": "{data_cell_phone}"
            },
            {
              "key": "income_source",
              "value": "{data_income_type}"
            },
            {
              "key": "living_expenses",
              "value": "{data_expenses}"
            },
            {
              "key": "net_monthly_income",
              "value": "{data_monthly_income}"
            },
            {
              "key": "requested_principal",
              "value": "{data_requested_amount}"
            },
            {
              "key": "expenses_on_existing_loans",
              "value": "0"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "2-10",
      "type": "setNode",
      "position": {
        "x": 302.53878619553,
        "y": -133.90663788756
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Store response",
          "subtitle": "",
          "fields": [
            {
              "key": "{redirect_url}",
              "value": "{parsedBody.redirect_url}"
            }
          ]
        }
      }
    },
    {
      "id": "2-2",
      "type": "waitNode",
      "position": {
        "x": -280.83943177874,
        "y": 25.651915559501
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 3s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 3,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "2-5",
      "type": "httpNode",
      "position": {
        "x": -77.788471532623,
        "y": -139.3085673168
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Post",
          "subtitle": "",
          "method": "POST",
          "endpoint": "{endpoint}/api/public/partners/{partner_id}/requests/{external_id}/accept",
          "timeout": 40,
          "format": "application/json",
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "X-Api-Key",
              "value": "{token}"
            },
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [],
          "body": [],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "2-9",
      "type": "httpNode",
      "position": {
        "x": 139.80261398431,
        "y": -31.44990073426
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Status after accept",
          "subtitle": "",
          "method": "GET",
          "endpoint": "{endpoint}/api/public/partners/{partner_id}/requests/{external_id}",
          "timeout": 30,
          "format": null,
          "parser": "json",
          "notsend": null,
          "convert_data": null,
          "headers": [
            {
              "key": "X-Api-Key",
              "value": "{token}"
            },
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "query": [],
          "body": [
            {
              "key": "email",
              "value": "{data_email}"
            },
            {
              "key": "last_name",
              "value": "{data_last_name}"
            },
            {
              "key": "first_name",
              "value": "{data_first_name}"
            },
            {
              "key": "national_id",
              "value": "{data_identity_card_number}"
            },
            {
              "key": "mobile_phone",
              "value": "{data_cell_phone}"
            },
            {
              "key": "income_source",
              "value": "{data_income_type}"
            },
            {
              "key": "living_expenses",
              "value": "{data_expenses}"
            },
            {
              "key": "net_monthly_income",
              "value": "{data_monthly_income}"
            },
            {
              "key": "requested_principal",
              "value": "{data_requested_amount}"
            },
            {
              "key": "expenses_on_existing_loans",
              "value": "0"
            }
          ],
          "signature": null,
          "insecure": null
        }
      }
    },
    {
      "id": "2-7",
      "type": "waitNode",
      "position": {
        "x": 79.57147619086,
        "y": -201.75762736685
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Wait 3s",
          "subtitle": "",
          "type": "delay",
          "delayValue": 3,
          "delayUnit": "seconds",
          "untilDate": null
        }
      }
    },
    {
      "id": "2-12",
      "type": "endNode",
      "position": {
        "x": 513.8223081858,
        "y": -153.93392562595
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Success",
          "subtitle": "",
          "success": "success"
        }
      }
    },
    {
      "id": "1-5",
      "type": "modifyFieldNode",
      "position": {
        "x": 91.082862387772,
        "y": 276.93279633276
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Invalid field",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.field_errors.0.field_name}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Product Mismatch"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.field_errors.0.field_name}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.field_errors.0.field_name}: {parsedBody.field_errors.0.error_message}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-6",
      "type": "modifyFieldNode",
      "position": {
        "x": -69.819893455799,
        "y": -298.07445834702
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Status",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "INVALID",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Not Eligible"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "FAILED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "CANCELLED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Cancelled by Advertiser"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "EXPIRED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Expired"
                },
                {
                  "source": "{parsedBody.errors.0.error_code}",
                  "operator": "equals",
                  "value": "OPEN_LOAN_APPLICATION",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.status}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-3",
      "type": "breakerNode",
      "position": {
        "x": -400.09804338708,
        "y": -249.6716260295
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Breaker 4x",
          "subtitle": "",
          "maxRepetition": "4"
        }
      }
    },
    {
      "id": "1-8",
      "type": "endNode",
      "position": {
        "x": 270.14518454561,
        "y": 292.76661025696
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "2-8",
      "type": "endNode",
      "position": {
        "x": 189.97184058348,
        "y": -308.75155371118
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Status",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "2-11",
      "type": "modifyFieldNode",
      "position": {
        "x": 300.31941250167,
        "y": 23.662015292937
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Status after accept",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "INVALID",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Not Eligible"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "FAILED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Unspecified"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "CANCELLED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Cancelled by Advertiser"
                },
                {
                  "source": "{parsedBody.status}",
                  "operator": "equals",
                  "value": "EXPIRED",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Expired"
                },
                {
                  "source": "{parsedBody.errors.0.error_code}",
                  "operator": "equals",
                  "value": "OPEN_LOAN_APPLICATION",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.status}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.status}"
                }
              ]
            }
          ]
        }
      }
    },
    {
      "id": "2-13",
      "type": "endNode",
      "position": {
        "x": 497.03336978445,
        "y": 49.052374722548
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Rejected · Status after accept",
          "subtitle": "",
          "success": "failed"
        }
      }
    },
    {
      "id": "1-6",
      "type": "modifyFieldNode",
      "position": {
        "x": 63.881191692614,
        "y": 406.18286898936
      },
      "data": {
        "formData": {
          "active": true,
          "title": "Reject reason · Business error",
          "subtitle": "",
          "data": [
            {
              "fieldName": "{reason}",
              "fields": [
                {
                  "source": "{parsedBody.errors.0.error_code}",
                  "operator": "equals",
                  "value": "OPEN_LOAN_APPLICATION",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "Existing Customer"
                }
              ]
            },
            {
              "fieldName": "{reason_detail}",
              "fields": [
                {
                  "source": "{parsedBody.errors.0.error_code}",
                  "operator": "is_not_empty",
                  "value": "",
                  "value2": "",
                  "modification": "replace",
                  "pattern": "",
                  "output": "{parsedBody.errors.0.error_message}"
                }
              ]
            }
          ]
        }
      }
    }
  ],
  "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": "200",
            "output2": ""
          },
          {
            "value": "{parsedBody.errors.0.error_code}",
            "operator": "is_empty",
            "output": "",
            "output2": ""
          },
          {
            "value": "{parsedBody.field_errors.0.field_name}",
            "operator": "is_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-3-1-5",
      "source": "1-3",
      "target": "1-5",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.field_errors.0.field_name}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-3-1-6",
      "source": "1-3",
      "target": "1-6",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.errors.0.error_code}",
            "operator": "is_not_empty",
            "output": "",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-4-1-7",
      "source": "1-4",
      "target": "1-7",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-3-2-4",
      "source": "2-3",
      "target": "2-4",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-4-2-2",
      "source": "2-4",
      "target": "2-2",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "NEW",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-4-2-5",
      "source": "2-4",
      "target": "2-5",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.status}",
            "operator": "equals",
            "output": "LOAN_OFFER_GENERATED",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-4-2-6",
      "source": "2-4",
      "target": "2-6",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{2-4.parsedBody.status}",
            "operator": "regex_match",
            "output": "INVALID|CANCELLED|FAILED|EXPIRED",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-9-2-10",
      "source": "2-9",
      "target": "2-10",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{parsedBody.status}",
            "operator": "regex_match",
            "output": "ACCEPTED|COMPLETED|LOAN_ISSUED",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-2-10-2-12",
      "source": "2-10",
      "target": "2-12",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-2-2-3",
      "source": "2-2",
      "target": "2-3",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-5-2-7",
      "source": "2-5",
      "target": "2-7",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-7-2-9",
      "source": "2-7",
      "target": "2-9",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-9-2-11",
      "source": "2-9",
      "target": "2-11",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": [
          {
            "value": "{2-9.parsedBody.status}",
            "operator": "regex_match",
            "output": "INVALID|CANCELLED|FAILED|EXPIRED",
            "output2": ""
          }
        ]
      }
    },
    {
      "id": "edge-1-5-1-8",
      "source": "1-5",
      "target": "1-8",
      "type": "customEdge",
      "data": {
        "active": true,
        "title": "",
        "subtitle": "",
        "conditions": []
      }
    },
    {
      "id": "edge-2-6-2-8",
      "source": "2-6",
      "target": "2-8",
      "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-2-11-2-13",
      "source": "2-11",
      "target": "2-13",
      "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

An asynchronous, state-machine API. The application request returns immediately with status: NEW; the offer is generated a few seconds later. Nothing is decided in the first response, so the integration has to poll.

Two things shape every decision here: HTTP 200 does not mean accepted, and an application left open blocks the next lead from the same person.

What will be needed from advertiser

KeyPurpose
endpointBase API URL.
tokenAPI key sent in X-Api-Key.
partner_idPartner ID used in the request path.

Flows

Ping, POST /requests. Submits the application. Returns request_uuid and status: NEW, or a rejection in the body under 200.

Post, polls GET /requests/{request_uuid} until the status is terminal, then POST /requests/{request_uuid}/accept, then polls again.

The request_uuid from the ping is what the post addresses, so the ping must store it in {external_id} before anything else.

The state machine

NEW → LOAN_OFFER_GENERATED → ACCEPTED → COMPLETED → LOAN_ISSUED
StatusMeaningTerminal
NEWSubmitted, offer not yet generatedno, keep polling
LOAN_OFFER_GENERATEDOffer ready, accept or cancel itno, accept
ACCEPTEDThe client accepted the offeryes, success
COMPLETEDProcessing has startedyes, success
LOAN_ISSUEDLoan paid outyes, success
INVALIDFailed validationyes, rejection
CANCELLEDFailed rule checks, or the client declinedyes, rejection
FAILEDProcessing ended in an erroryes, rejection
EXPIREDDid not finish in timeyes, rejection

Every one of these needs a branch, including the terminal ones you do not expect to see. A status missing from the loop conditions is a Dead End waiting to happen, and this API has nine of them.

Cancel the offers you do not take

POST /requests/{request_uuid}/cancel closes an offer that will not be accepted.

If it is never called, ViaSMS keeps the application open. The next lead from the same person then comes back with error_code: OPEN_LOAN_APPLICATION, a rejection the integration caused itself. An integration that polls, gives up on the Breaker and walks away without cancelling manufactures its own duplicates.

Calls

POST {endpoint}/api/public/partners/{partner_id}/requests
GET  {endpoint}/api/public/partners/{partner_id}/requests/{external_id}
POST {endpoint}/api/public/partners/{partner_id}/requests/{external_id}/accept
POST {endpoint}/api/public/partners/{partner_id}/requests/{external_id}/cancel

X-Api-Key: {token}
Content-Type: application/json
format: application/json

Set format: application/json on every node that sends a JSON body. It is not inherited from another node, and a request without it is refused with 400.

The GET calls take no body. Guard them: when {external_id} is empty the URL collapses to a trailing slash and the advertiser answers 404, which reads as a broken endpoint rather than as a missing identifier.

The advertiser restricts access by IP address, so the addresses the calls originate from have to be registered with them before anything works.

Request fields

FieldRequiredValue
first_nameyes{g_name_first}
last_nameyes{g_name_last}
national_idyes{g_id_national_number} with the slash
emailyes{g_email}
mobile_phoneyes{g_phone}
income_sourceyes{g_fin_type}, see enums
net_monthly_incomeyes{g_fin_income}
living_expensesyes{g_fin_expenses}
expenses_on_existing_loansyes{g_fin_expenses_credit}
requested_principalyes{g_amount}

national_id goes in the Czech written form with the slash:

{g_id_national_number}   always   regex_replace   (\d{6})(\d{3,4}) → $1/$2

expenses_on_existing_loans is required. Send 0 rather than leaving it empty, an empty required field is refused.

Enums

income_source: EMPLOYMENT, SELF_EMPLOYMENT, SOCIAL_OR_PARENTAL_SUPPORT, PENSION, OTHER. Unemployed has no option; map it to OTHER.

Outcomes

errors and field_errors are present on every response and empty on success, which is what makes them usable as conditions. But only with an index. {parsedBody.errors.0.error_code} resolves; {parsedBody.errors.error_code} comes back as literal text, and literal text is never empty, so an “is not empty” test on it fires on every single response. A flow built that way labels every lead with the same rejection and never reaches its own success branch.

Recognised byHTTPMeaningReject reasonFrequency
status: NEW, no errors200Submitted, poll for the offer,common
status: LOAN_OFFER_GENERATED200Offer ready, accept it,common
status ~ `ACCEPTEDCOMPLETEDLOAN_ISSUED`200Converted
errors.0.error_code: OPEN_LOAN_APPLICATION200An application is already openExisting Customercommon
field_errors.0.field_name present200A field failed validationProduct Mismatchoccasional
status: INVALID200Failed validationNot Eligibleoccasional
status: CANCELLED200Failed rule checks or client declinedCancelled by Advertiseroccasional
status: FAILED200Processing errorUnspecifiedrare
status: EXPIRED200Not finished in timeExpiredrare
Cloudflare error page530Advertiser unreachable, (technical)rare

field_errors names the field, so {reason_detail} should carry both parts: {parsedBody.field_errors.0.field_name}: {parsedBody.field_errors.0.error_message}.

OPEN_LOAN_APPLICATION is worth watching rather than accepting. Some of it is genuine repeat traffic; some of it is applications this integration opened and never cancelled.

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

Branching

Ping, submitted, both error arrays checked, with the index:

{status}                                  equals         200
{parsedBody.errors.0.error_code}          is empty
{parsedBody.field_errors.0.field_name}    is empty

Ping, field validation failed:

{parsedBody.field_errors.0.field_name}    is not empty

Ping, business error:

{parsedBody.errors.0.error_code}          is not empty

Status poll, keep waiting:

{parsedBody.status}    equals    NEW

Status poll, accept the offer:

{parsedBody.status}    equals    LOAN_OFFER_GENERATED

Status poll, converted:

{parsedBody.status}    regex match    ACCEPTED|COMPLETED|LOAN_ISSUED

Status poll, refused:

{parsedBody.status}    regex match    INVALID|CANCELLED|FAILED|EXPIRED

The polling loop needs a Breaker with its count in the title. Watch the synchronous limit while setting it, the applicant is on a loading screen for the whole loop.

Stored values

ParameterSource
{external_id}{parsedBody.request_uuid} from the ping
{redirect_url}{parsedBody.redirect_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.