TrueValidate API

REST endpoints for creating, reading and updating TrueValidate projects using JSON payloads.

Base URL
https://tvapi.survalidate.com
Method
All endpoints use POST
Content-Type
application/json
Authentication
Send your key as apikey in the JSON body of every request.
The {{ID}} placeholder. Anywhere a URL contains {{ID}}, TrueValidate substitutes the respondent's ID. Add it to your redirect URLs to receive the ID back.

Endpoint summary

EndpointPurposeRequired fields
/listprojectsList the last 100 projectsapikey
/createprojectCreate a project with your company defaultsapikey, project_id
/getprojectGet a project's full configurationapikey, project_id
/editprojectUpdate any or all project settingsapikey, project_id
/getrecordGet a panelist's record for a projectapikey, project_id, paid

1. List all projects

Retrieves a list of the last 100 projects.

POSThttps://tvapi.survalidate.com/listprojects

Request

JSON
{
  "apikey": "<API_KEY>"
}

Response

200 OK
{
  "success": "1",
  "data": [
    {
      "project_id": "1245",
      "tvlink": "https://tv.survalidate.com/s/wdhfiwdbfdiwfbdwicbdwic/{{ID}}",
      "status": "Active"
    },
    {
      "project_id": "1246",
      "tvlink": "https://tv.survalidate.com/s/wdhfiwdbfdiwfbdwicb234/{{ID}}",
      "status": "Active"
    }
  ]
}

2. Create project

Creates a new project using your company's default setup.

POSThttps://tvapi.survalidate.com/createproject

Body parameters

ParameterRequirementFormat
apikeyRequiredYour API key
project_idRequiredUnique. Alphanumeric, max 20 characters.

All other inputs are optional and accept the same values as Edit project. Any setting you don't send follows the configuration on your company default page.

Request examples

Every other setting uses your company defaults.

JSON
{
  "apikey": "<API_KEY>",
  "project_id": "7181"
}

Response

201 Created
{
  "success": "1",
  "message": "Project Inserted Successfully",
  "project_id": "7181",
  "tvlink": "https://tv.survalidate.com/s/wdhfiwdbfdiwfbdwicbdwic/{{ID}}"
}

3. Get project info by ID

Retrieves the full configuration for a specific project ID.

POSThttps://tvapi.survalidate.com/getproject

Body parameters

ParameterRequirementFormat
apikeyRequiredYour API key
project_idRequiredString

Request

JSON
{
  "apikey": "<API_KEY>",
  "project_id": "ProjectNameHere"
}

Response

200 OK
{
  "project_id": "ProjectNameHere",
  "tvlink": "https://tv.survalidate.com/s/NmQ4MDhmMzVhYVJha23432432/{{ID}}",
  "project_label": "",
  "status": "Active",
  "forcevalidate": "ON",
  "prepage": {
    "prepage": "OFF"
  },
  "redirect_urls": {
    "validated_url": "https://bizpinion.com/truevalidate/{{ID}}-VALID",
    "failed_validation_url": "https://bizpinion.com/truevalidate/{{ID}}-FAILED",
    "bypassed_url": "https://bizpinion.com/truevalidate/{{ID}}-BYPASSED"
  },
  "digital_fingerprinting": {
    "digital_fingerprinting": "ON",
    "sv_mode": 3,
    "thresholds": {
      "sv_score": 0,
      "dupe_score": 95,
      "fraud_score": 50
    },
    "country_check": {
      "accepted_countries": [],
      "rejected_countries": []
    }
  },
  "steps": {
    "step1": {
      "step1": "linkedin",
      "honeypot": "ON"
    },
    "step2": "imagepuzzle"
  },
  "modifiedby": "Demo",
  "modified": "2026-09-14 10:39:40"
}
A step that uses linkedin is returned as an object that also carries the honeypot setting. All other steps are returned as plain strings.

4. Edit project

Updates any or all of an existing project's settings. Parameters you omit stay unchanged unless a rule below says otherwise.

POSThttps://tvapi.survalidate.com/editproject

Project parameters

ParameterRequirementAccepted valuesDescription & rules
apikeyRequiredStringYour API authentication key.
project_idRequiredID / StringThe target project identifier.
project_labelOptionalString / blank
  • Omitted: the existing label stays.
  • Sent blank: the existing label is cleared.
statusOptionalActive, InactiveSets the project status.
forcevalidateOptionalOn, OffToggles force validation. Requires the respondent to pass all tasks.
prepageOptionalOn, OffToggles the pre-page, which shows the respondent which tasks they'll complete and the optional amount.
amountConditionalprepage = OnNumericIncentive amount shown on the pre-page.
currencyConditionalprepage = On3-letter code: USD, EUR, GBP, INR, JPY, AUD, CADCurrency for amount.
validated_urlOptionalValid redirect URLUsed when the respondent passes. Add {{ID}} to receive your ID back.
failed_validation_urlOptionalValid redirect URLUsed when the respondent fails. Add {{ID}} to receive your ID back.
bypassed_urlOptionalValid redirect URLUsed when the respondent bypasses. Add {{ID}} to receive your ID back. Not used when forcevalidate is On.
step1
step2
step3
Optionallinkedin, imagepuzzle, audioverify
  • No step data sent: steps are unchanged.
  • Each step must have a unique value.
  • step1 must be set before step2, and step2 before step3.
  • Sending only step1 erases step2 and step3.
honeypotConditionala step = linkedinOn, OffOnly takes effect when at least one configured step is linkedin.

SV block parameters

Every parameter in this table requires digital_fingerprinting = On.
ParameterRequirementAccepted valuesDescription & rules
digital_fingerprintingOptionalmaster switchOn, OffMaster switch for the SV block. Setting it to On without any other SV values resets all SV settings to their defaults.
accepted_countriesConditional2-letter country codes, comma-separatedDefault: blank. Example: US,IN,PH. Cleared if no data is passed. A country can't appear in both lists.
rejected_countriesConditional2-letter country codes, comma-separatedDefault: blank. Example: CA,GB,DE. Cleared if no data is passed. A country can't appear in both lists.
sv_modeConditional1, 2, 3Default: 3.
  • 1: Custom. Lets you set the score thresholds below.
  • 2: Default settings.
  • 3: Check only. Records activity without blocking users on this page.
sv_scoreConditionalsv_mode = 10 to 100Default: 0. Custom SV score threshold.
dupe_scoreConditionalsv_mode = 10 to 100Default: 95. Custom duplicate score threshold.
fraud_scoreConditionalsv_mode = 10 to 100Default: 50. Custom fraud score threshold.

Request examples

Send only the fields you want to change. Pick a common task:

Only the label changes. Everything you leave out stays as it is.

JSON
{
  "apikey": "<API_KEY>",
  "project_id": "aK8mP2vX9z",
  "project_label": "changinglabel"
}

Response

Every edit returns the project's full configuration after the change. The updated array lists only the fields that changed. This example is the response to Change label.

200 OK
{
  "project_id": "aK8mP2vX9z",
  "tvlink": "https://tv.survalidate.com/s/NmQ4MDhmMzVhYWFLOG1Q2343243/{{ID}}",
  "project_label": "changinglabel",
  "status": "Active",
  "forcevalidate": "ON",
  "prepage": {
    "prepage": "ON",
    "amount": "500.00",
    "currency": "INR"
  },
  "redirect_urls": {
    "validated_url": "https://bizpinion.com/ok/{{ID}}",
    "failed_validation_url": "https://bizpinion.com/fail/{{ID}}",
    "bypassed_url": "https://bizpinion.com/by/{{ID}}"
  },
  "digital_fingerprinting": {
    "digital_fingerprinting": "ON",
    "sv_mode": 1,
    "thresholds": {
      "sv_score": 0,
      "dupe_score": 7,
      "fraud_score": 50
    },
    "country_check": {
      "accepted_countries": [],
      "rejected_countries": []
    }
  },
  "steps": {
    "step1": "imagepuzzle",
    "step2": "audioverify",
    "step3": {
      "step3": "linkedin",
      "honeypot": "ON"
    }
  },
  "updated": [
    "project_label"
  ]
}

5. Get panelist info by ID

Retrieves a panelist's validation record for a project.

POSThttps://tvapi.survalidate.com/getrecord

Body parameters

ParameterRequirementFormat
apikeyRequiredYour API key
project_idRequiredString
paidRequiredString. The panelist ID you passed in place of {{ID}} on the TrueValidate link.

Request

JSON
{
  "apikey": "<API_KEY>",
  "project_id": "prj138",
  "paid": "89798"
}

Response

200 OK
{
  "success": 1,
  "data": [
    {
      "project_id": "prj138",
      "paid": "89798",
      "created": "2026-09-14 10:39:44",
      "status": "Refused",
      "last_point": "LinkedIn",
      "linkedin_verification": "-",
      "audio_verification": "",
      "image_puzzle": "Pending",
      "country_mobile": "US",
      "is_mobile": "N",
      "dfp_score": "8*",
      "dfp_dupe_score": 0,
      "dfp_fraud_score": 15
    }
  ]
}

Response fields

FieldTypeDescription
project_idStringThe project the record belongs to.
paidStringThe panelist ID you requested.
createdDatetimeWhen the panelist entered TrueValidate.
statusStringThe panelist's overall validation status, e.g. Refused.
last_pointStringThe last check the panelist reached.
linkedin_verificationStringResult of the LinkedIn step.
audio_verificationStringResult of the audio verification step.
image_puzzleStringResult of the image puzzle step, e.g. Pending.
country_mobileString2-letter country code detected for the panelist.
is_mobileStringY if the panelist used a mobile device, N if not.
dfp_scoreStringSV (digital fingerprinting) score. Returned as text and may include a trailing *.
dfp_dupe_scoreNumberDuplicate score.
dfp_fraud_scoreNumberFraud score.

Standard error responses

These error messages apply to every endpoint when a request fails.

Project / identity

TriggerMessage
apikey missing or invalidWrong API Key error (401)
Missing project_idproject_id not given (400)
Unknown or invalid project_idWrong project_id (400)
Missing paid (/getrecord)Paid is not given
project_label too long or badly formattedGiven project label is too long or in wrong format

Core settings

TriggerMessage
Invalid statusGiven Status is in wrong format
Invalid forcevalidateGiven forcevalidate is in wrong format
Invalid prepageGiven prepage is in wrong format

Pre-page amount / currency

TriggerMessage
amount or currency sent without prepage = OnYou need prepage variable on to set currency or amount
prepage = On but amount or currency invalid or blankIf Prepage is On we need currency and amount in valid format

Digital fingerprinting

TriggerMessage
Invalid digital_fingerprintingGiven digital_fingerprinting is in wrong format
Invalid sv_modeGiven sv_mode is in wrong format
Threshold out of rangeGiven thresholds are in wrong format

Country check

TriggerMessage
Invalid accepted_countriesGiven accepted_countries is in wrong format
Invalid rejected_countriesGiven rejected_countries is in wrong format
Same code in both listsDuplicate country codes found in accepted_countries and rejected_countries

Verification steps

TriggerMessage
step2 set without step1Step 2 cannot be filled unless Step 1 is filled.
step3 set without step1 and step2Step 3 cannot be filled unless both Step 1 and Step 2 are filled.
Invalid value in a stepStep1 is in wrong format / Step2 is in wrong format / Step3 is in wrong format
Same value in multiple stepsDuplicate value found: <value> cannot be used in multiple steps.

Redirect URLs

TriggerMessage
Invalid validated_urlvalidated_url is in wrong format
Invalid failed_validation_urlfailed_validation_url is in wrong format

TrueValidate API Reference