curl --request POST \ --url https://cert.trustedform.com/{cert_id} \ --header 'Content-type: <content-type>' \ --data '{ "email_1": "user@example.com", "forbidden_scan_terms": "I do not agree to the terms of service", "phone_1": "999-999-0909", "reference": "1128238382829", "required_scan_terms": "I agree to the terms of service", "vendor": "Acme Co.", "campaign_id": "summer_promo_2021"}'
import requests
url = "https://cert.trustedform.com/{cert_id}"
payload = {
"email_1": "user@example.com",
"forbidden_scan_terms": "I do not agree to the terms of service",
"phone_1": "999-999-0909",
"reference": "1128238382829",
"required_scan_terms": "I agree to the terms of service",
"vendor": "Acme Co.",
"campaign_id": "summer_promo_2021"
}
headers = {"Content-type": "<content-type>"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {'Content-type': '<content-type>'},
body: JSON.stringify({
email_1: 'user@example.com',
forbidden_scan_terms: 'I do not agree to the terms of service',
phone_1: '999-999-0909',
reference: '1128238382829',
required_scan_terms: 'I agree to the terms of service',
vendor: 'Acme Co.',
campaign_id: 'summer_promo_2021'
})
};
fetch('https://cert.trustedform.com/{cert_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cert.trustedform.com/{cert_id}"
payload := strings.NewReader("{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://cert.trustedform.com/{cert_id}")
.header("Content-type", "<content-type>")
.body("{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://cert.trustedform.com/{cert_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-type"] = '<content-type>'
request.body = "{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}"
response = http.request(request)
puts response.read_body
{
"errors": {
"detail": "Account is inactive"
},
"message": "Account is inactive",
"outcome": "error",
"reason": "Account is inactive"
}
{
"outcome": "error",
"reason": "TrustedForm certificate has expired or could not be found"
}
{
"outcome": "error",
"reason": "Certificate is not claimable"
}
{
"outcome": "error",
"reason": "Certificate has been claimed too many times"
}
Claiming Certificates
Claiming a Certificate
TrustedForm account holders who are receiving certified leads can use the
TrustedForm API to claim the certificate provided with each lead. Doing so
Verifies the legitimacy of the certificate
Stores the certificate for future reference and
Provides programmatic access to the information shown on the certificate
To claim a certificate using the TrustedForm API, send an HTTP POST request
to the certificate URL sent by your publisher.
Do not make a request unless the URL starts with
https://cert.trustedform.com, otherwise you may expose your TrustedForm
credentials to someone else
Use a POST request — any other type of request will not claim the
certificate
Use the Accept: application/json request header
Use the Content-Type: application/json or Content-Type:
application/x-www-form-urlencoded header, and encode the request body
accordingly.
In the Authorization header, use the API key provided on the “Settings”
tab in the TrustedForm Application and the username ‘API’.
Page Scanning
As part of the claiming process, it’s often required that certain language
either exists or doesn’t exist on the page. For example, you may want to
ensure certain consent language exists. As another example, you may want
to ensure other language does not exist, such as “free iPhone”.
Page Scanning Params
You can use the required_scan_terms and forbidden_scan_terms
parameters.
required_scan_terms: Use this parameter to scan for language you want to ensure exist
on the page.
forbidden_scan_terms: Use this parameter to scan for language you want to ensure does
not exist on the page.
Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways:
Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[]
Use wildcards in the consent language.
Use templates.
You can use a mixture of all three.
Wildcards
Use {{*}} in the consent language you wish to scan for as a wildcard.
For Example, passing “on behalf of {{*}} at the telephone number” will
match “on behalf of Mortgage Acme at the telephone number”.
Like using exact language, scans using wildcards can be sent in as
an array.
Templating
Templating is different than other versions of page scanning in that you
must 1) send it as JSON (i.e. Content-type of application/json); 2)
provide a list of key/values to use in the template.
If we were to use the example from above, we might use the following
templates:
When using wildcards in page scans and page scan templates, the default
method is to surround the wildcard or template key with “handlebar” braces
({{}}). If that conflicts with your system, you can provide your own
delimiter to use. Currently, TrustedForm only allows homogeneous delimiters
(i.e. the beginning and end are the same character(s)) such as **, |, or
even +++.
Sandboxed Certificates
Certificates created with the sandbox flag set to true cannot be
claimed.
POST
/
{cert_id}
Claiming a Certificate
curl --request POST \ --url https://cert.trustedform.com/{cert_id} \ --header 'Content-type: <content-type>' \ --data '{ "email_1": "user@example.com", "forbidden_scan_terms": "I do not agree to the terms of service", "phone_1": "999-999-0909", "reference": "1128238382829", "required_scan_terms": "I agree to the terms of service", "vendor": "Acme Co.", "campaign_id": "summer_promo_2021"}'
import requests
url = "https://cert.trustedform.com/{cert_id}"
payload = {
"email_1": "user@example.com",
"forbidden_scan_terms": "I do not agree to the terms of service",
"phone_1": "999-999-0909",
"reference": "1128238382829",
"required_scan_terms": "I agree to the terms of service",
"vendor": "Acme Co.",
"campaign_id": "summer_promo_2021"
}
headers = {"Content-type": "<content-type>"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {'Content-type': '<content-type>'},
body: JSON.stringify({
email_1: 'user@example.com',
forbidden_scan_terms: 'I do not agree to the terms of service',
phone_1: '999-999-0909',
reference: '1128238382829',
required_scan_terms: 'I agree to the terms of service',
vendor: 'Acme Co.',
campaign_id: 'summer_promo_2021'
})
};
fetch('https://cert.trustedform.com/{cert_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cert.trustedform.com/{cert_id}"
payload := strings.NewReader("{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://cert.trustedform.com/{cert_id}")
.header("Content-type", "<content-type>")
.body("{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://cert.trustedform.com/{cert_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-type"] = '<content-type>'
request.body = "{\n \"email_1\": \"user@example.com\",\n \"forbidden_scan_terms\": \"I do not agree to the terms of service\",\n \"phone_1\": \"999-999-0909\",\n \"reference\": \"1128238382829\",\n \"required_scan_terms\": \"I agree to the terms of service\",\n \"vendor\": \"Acme Co.\",\n \"campaign_id\": \"summer_promo_2021\"\n}"
response = http.request(request)
puts response.read_body
An optional identifier for the campaign associated with the lead. Use this to track which campaign generated the lead without relying on the vendor field. TrustedForm will record this value on the certificate stored in your account and include it in reporting.
When claiming a certificate, you can pass an optional email (or email_1, email_2, etc)
parameter. TrustedForm will extract the email value and perform fingerprinting
against the available data.
When you claim a certificate you can calculate lead fingerprint values
using the email and phone number you received in the lead data
accompanying the certificate. Each fingerprint value is an SHA1 hash of
an email or phone value. Each fingerprint value should be provided in a
fingerprint parameter.
If none of the fingerprints you provide match a fingerprint collected on the
certificate you will receive the "none of the provided fingerprints match"
message in the claim warnings field. This indicates that the lead data
collected on the form does not match the lead data that you received.
Use this parameter to perform a scan of the page for text that must not
be present. TrustedForm will then perform a case and whitespace
insensitive search for the string. If the string is not found in the
HTML document, then "string found in snapshot" will be included in
the warnings key of the claim response.
When claiming a certificate, you can pass an optional phone (or phone_1, phone_2, etc)
parameter. TrustedForm will extract the phone number value and perform fingerprinting
against the available data.
When you claim a certificate, you can include an optional parameter
reference We will store this value in the certificate's claim record. A
use case for the reference parameter is to add your unique lead
identifier to the claim record, which will provide a reference point
from the claim to the certified lead that you received.
This will indicate which lead a certificate belongs to just by
examining the certificate data. In the case that your publisher has
passed you two leads with the same Certificate URL, this reference
parameter will allow you to determine which lead it was originally
passed with.
Use this parameter to perform a scan of the page for required text.
TrustedForm will then perform a case and whitespace insensitive search
for the string. If the string is not found in the HTML document, then
"string not found in snapshot" will be included in the warnings key of
the claim response.
You can provide your own delimiter to use when wrapping wildcards or
tempate variablies. Your choice of delimiter must be homogeneous (i.e.
the beginning and end are the same character(s)), such as
|, ==, or |||.
When claiming a certificate, you can pass the optional vendor
parameter. This is intended for tracking the name of the company
that provided the lead associated with the certificate. We will
store this value in the certificate’s claim record. When you use
TrustedForm reporting, you can easily filter or group by a vendor.
The result of the attempt to verify consent. Success indicates that the certificate was
claimed and did not generate any warnings related to consent verification. Failure indicates
that the certificate was claimed but generated warnings because no fingerprints matched,
forbidden scan terms were found or required scan terms were missing. Error indicates that
the certificate was not claimed and the request should be reviewed and potentially retried.
An array of strings indicating possible issues with the certificate
none of the provided fingerprints match: No fingerprints matched.
snapshot scan failed: The snapshot was unable to be scanned.
string not found in snapshot: A required page scan text was not found.
string found in snapshot: A forbidden page scan text was found.
Available options:
none of the provided fingerprints match,
snapshot scan failed,
string not found in snapshot,
string found in snapshot
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ActiveProspect Developer Documentation","colors":{"primary":"#22a7f0","light":"#79caf6","dark":"#22a7f0"},"logo":{"light":"https://mintcdn.com/activeprospectinc/ttzTIJYOTNQPAJMy/logo/activeprospect_logo.svg?fit=max\u0026auto=format\u0026n=ttzTIJYOTNQPAJMy\u0026q=85\u0026s=9c7503c7631642aa1f7288ae35cc02cc","dark":"https://mintcdn.com/activeprospectinc/ttzTIJYOTNQPAJMy/logo/activeprospect_whiteblue.svg?fit=max\u0026auto=format\u0026n=ttzTIJYOTNQPAJMy\u0026q=85\u0026s=3df29616a4d6781de4873141e49ca8e0"},"favicon":"https://mintcdn.com/activeprospectinc/ybHg7UeILJeU2Jw-/favicon.png?fit=max\u0026auto=format\u0026n=ybHg7UeILJeU2Jw-\u0026q=85\u0026s=95060b05f4b73bb5ad4a373e19c17430","navbar":{"links":[{"href":"https://support.activeprospect.com/hc/en-us","label":"Support"}],"primary":{"type":"button","label":"Sign in to ActiveProspect","href":"https://account.activeprospect.com"}},"footer":{"socials":{"facebook":"https://www.facebook.com/activeprospect","x":"https://twitter.com/activeprospect","instagram":"https://www.instagram.com/activeprospectinc","linkedin":"https://www.linkedin.com/company/activeprospect","youtube":"https://www.youtube.com/channel/UCN_HLECy6KzYhFfIyLM50rQ","github":"https://github.com/activeprospect"},"links":[{"header":"Customers","items":[{"label":"Knowledge Base","href":"https://support.activeprospect.com/hc/en-us"},{"label":"Start Certifying your Leads","href":"https://account.activeprospect.com/register/trustedform/certify"},{"label":"Product What's New","href":"https://whatsnew.activeprospect.com/"},{"label":"Platform Status","href":"https://status.activeprospect.com/"},{"label":"Integrations","href":"https://activeprospect.com/integrations"},{"label":"Add-ons","href":"https://activeprospect.com/leadconduit/add-on-services"},{"label":"Support Plans","href":"https://activeprospect.com/support-plans"}]},{"header":"Resources","items":[{"label":"TrustedForm Cert Demo","href":"https://activeprospect.com/products/trustedform-demo"},{"label":"Talk to an Expert","href":"https://activeprospect.com/get-demo"},{"label":"Blog","href":"https://activeprospect.com/blog"},{"label":"InsideCBM","href":"https://activeprospect.com/inside-cbm"},{"label":"Glossary","href":"https://activeprospect.com/glossary"},{"label":"TCPA Compliance","href":"https://activeprospect.com/tcpa-compliance"},{"label":"Ping Pick Post","href":"https://activeprospect.com/ping-pick-post"}]},{"header":"Company","items":[{"label":"About Us","href":"https://activeprospect.com/about-us"},{"label":"Conferences and Events","href":"https://activeprospect.com/activeprospect-events"},{"label":"Careers","href":"https://activeprospect.com/careers"},{"label":"Security","href":"https://activeprospect.com/security"},{"label":"Security Information Portal","href":"https://security.activeprospect.com/"},{"label":"Contact Us","href":"https://activeprospect.com/contact-us"}]},{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://activeprospect.com/privacy-policy"},{"label":"TrustedForm Privacy Policy","href":"https://activeprospect.com/trustedform-privacy-notice"},{"label":"Privacy Notice for California Residents","href":"https://activeprospect.com/privacy-notice-california"},{"label":"Terms of Service","href":"https://activeprospect.com/terms-of-service"},{"label":"TrustedForm Certify EULA","href":"https://activeprospect.com/trustedform-eula"}]}]},"seo":{"metatags":{"canonical":"https://developers.activeprospect.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"activeprospectinc","hasAudioNarration":false,"actualSubdomain":"activeprospectinc","customDomains":["developers.activeprospect.com"],"gitSource":{"type":"github","owner":"activeprospect","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea11512d9111c67b18d575","collectionId":"7533e224-8cf8-49b6-b7a8-e85a461a93bd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea11512d9111c67b18d575"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea11512d9111c67b18d575","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Documentation","count":115},{"language":"default","tag":"LeadConduit","count":99},{"language":"default","tag":"API Endpoints","count":92},{"language":"default","tag":"TrustedForm","count":26},{"language":"default","tag":"Flows","count":18},{"language":"default","tag":"TrustedForm API 4.0","count":11},{"language":"default","tag":"Account","count":9},{"language":"default","tag":"Fields","count":9},{"language":"default","tag":"Caps and Limits","count":8},{"language":"default","tag":"Operations","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".black-headline{color:#000;font-weight:700;font-size:18px}.tfbody{border:1px solid #000;background-color:#9bcae3;font-family:\"proxima nova\",sans-serif;color:#131718;width:670px;margin:0 auto;padding:20px;font-size:18px}.tfbody input{background-color:#6fb3c1;display:block;margin:10px 0;padding:6px 0;font-size:14px}.tfbody input[type=checkbox]{display:inline}.tfbody input[type=email],.tfbody input[type=password],.tfbody textarea{color:#fff;min-width:90%}.tfbody input[type=text]{color:#fff;min-width:90%;width:200px}.tfbody a{color:#fff}.tfbody .consent_copy{margin:auto;width:80%}.tfbody .form_field_hldr_hldr{width:100%;padding:12px}.tfbody .form_field_hldr{width:44%;display:inline-block}.check-wrapper{padding:6px}#test-form{margin:auto}#consent_tag_target{color:#00008b;width:100%;text-align:center;margin:6px;height:2rem}.indentpar{display:inline}.indented{margin-left:22px;margin-top:-28px;line-height:22px}[data-tf-element-role=\"\"],[data-tf-element-role=consent-language],[data-tf-element-role=offer]{border:2px solid #9bcae3}[data-tf-element-role=offer]:hover{border:2px solid #ff0}[data-tf-element-role=consent-language]:hover{border:2px solid #adff2f}.consent-hilight>* [data-tf-element-role]:not([data-tf-element-role=offer]):not([data-tf-element-role=consent-language]){background-color:inherit;box-shadow:0 0 1px 1px #8a2be2}.consent-hilight>[data-tf-element-role]:not([data-tf-element-role=offer]):not([data-tf-element-role=consent-language]){background-color:#ff0!important;box-shadow:0 0 1px 1px #8a2be2}[data-tf-element-role]:not([data-tf-element-role=offer]):not([data-tf-element-role=consent-language]):hover{background-color:#ff0}"}],"page":{"pagePath":"api-reference/claiming-certificates/claiming-a-certificate","slug":"/api-reference/claiming-certificates/claiming-a-certificate","pageMetadata":{"title":"Claiming a Certificate","description":"TrustedForm account holders who are receiving certified leads can use the\nTrustedForm API to claim the certificate provided with each lead. Doing so\n\n1. Verifies the legitimacy of the certificate\n2. Stores the certificate for future reference and\n3. Provides programmatic access to the information shown on the certificate\n\nTo claim a certificate using the TrustedForm API, send an HTTP POST request\nto the certificate URL sent by your publisher.\n\nDo not make a request unless the URL starts with\nhttps://cert.trustedform.com, otherwise you may expose your TrustedForm\ncredentials to someone else\n\n- Use a POST request — any other type of request will not claim the\n certificate\n- Use the Accept: application/json request header\n- Use the Content-Type: application/json or Content-Type:\n application/x-www-form-urlencoded header, and encode the request body\n accordingly.\n- In the Authorization header, use the API key provided on the \"Settings\"\n tab in the TrustedForm Application and the username 'API'.\n\n### Page Scanning\n\nAs part of the claiming process, it's often required that certain language\neither exists or doesn't exist on the page. For example, you may want to\nensure certain consent language exists. As another example, you may want\nto ensure other language does not exist, such as \"free iPhone\".\n\n#### Page Scanning Params\n\nYou can use the `required_scan_terms` and `forbidden_scan_terms`\nparameters.\n\n- `required_scan_terms`: Use this parameter to scan for language you want to ensure exist\n on the page.\n- `forbidden_scan_terms`: Use this parameter to scan for language you want to ensure does\n not exist on the page.\n\nOften, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways:\n\n1. Send the variations as a list using `required_scan_terms[]` or `forbidden_scan_terms[]`\n2. Use wildcards in the consent language.\n3. Use templates.\n\nYou can use a mixture of all three.\n\n#### Wildcards\n\nUse `{{*}}` in the consent language you wish to scan for as a wildcard.\nFor Example, passing \"on behalf of `{{*}}` at the telephone number\" will\nmatch \"on behalf of Mortgage Acme at the telephone number\".\n\nLike using exact language, scans using wildcards can be sent in as\nan array.\n\n#### Templating\n\nTemplating is different than other versions of page scanning in that you\nmust 1) send it as JSON (i.e. Content-type of application/json); 2)\nprovide a list of key/values to use in the template.\n\nIf we were to use the example from above, we might use the following\ntemplates:\n\n```json\n{\n \"required_scan_terms\": [\n {\n \"template\": \"on behalf of {{company}} at the telephone number\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\"},\n {\"company\": \"Acme Mortgage\"},\n {\"company\": \"Acme Co.\"}\n ]\n },\n {\n \"template\": \"on behalf of {{company}} at the {{contact_method}}\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"fax number\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Co.\", \"contact_method\": \"email\"}\n ]\n }\n ]\n}\n```\n\n#### Scan Delimiters\n\nWhen using wildcards in page scans and page scan templates, the default\nmethod is to surround the wildcard or template key with \"handlebar\" braces\n(`{{}}`). If that conflicts with your system, you can provide your own\ndelimiter to use. Currently, TrustedForm only allows homogeneous delimiters\n(i.e. the beginning and end are the same character(s)) such as `**`, `|`, or\neven `+++`.\n\n### Sandboxed Certificates\n\nCertificates created with the `sandbox` flag set to `true` cannot be\nclaimed.\n","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id}","href":"/api-reference/claiming-certificates/claiming-a-certificate","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h3: \"h3\",\n h4: \"h4\",\n li: \"li\",\n ol: \"ol\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"TrustedForm account holders who are receiving certified leads can use the\\nTrustedForm API to claim the certificate provided with each lead. Doing so\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"Verifies the legitimacy of the certificate\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Stores the certificate for future reference and\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Provides programmatic access to the information shown on the certificate\"\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"To claim a certificate using the TrustedForm API, send an HTTP POST request\\nto the certificate URL sent by your publisher.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Do not make a request unless the URL starts with\\n\", _jsx(_components.a, {\n href: \"https://cert.trustedform.com\",\n children: \"https://cert.trustedform.com\"\n }), \", otherwise you may expose your TrustedForm\\ncredentials to someone else\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"Use a POST request — any other type of request will not claim the\\ncertificate\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Use the Accept: application/json request header\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Use the Content-Type: application/json or Content-Type:\\napplication/x-www-form-urlencoded header, and encode the request body\\naccordingly.\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"In the Authorization header, use the API key provided on the “Settings”\\ntab in the TrustedForm Application and the username ‘API’.\"\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Page Scanning\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"As part of the claiming process, it’s often required that certain language\\neither exists or doesn’t exist on the page. For example, you may want to\\nensure certain consent language exists. As another example, you may want\\nto ensure other language does not exist, such as “free iPhone”.\"\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Page Scanning Params\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can use the \", _jsx(_components.code, {\n children: \"required_scan_terms\"\n }), \" and \", _jsx(_components.code, {\n children: \"forbidden_scan_terms\"\n }), \"\\nparameters.\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"required_scan_terms\"\n }), \": Use this parameter to scan for language you want to ensure exist\\non the page.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"forbidden_scan_terms\"\n }), \": Use this parameter to scan for language you want to ensure does\\nnot exist on the page.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways:\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Send the variations as a list using \", _jsx(_components.code, {\n children: \"required_scan_terms[]\"\n }), \" or \", _jsx(_components.code, {\n children: \"forbidden_scan_terms[]\"\n })]\n }), \"\\n\", _jsx(_components.li, {\n children: \"Use wildcards in the consent language.\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Use templates.\"\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"You can use a mixture of all three.\"\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Wildcards\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use \", _jsx(_components.code, {\n children: \"{{*}}\"\n }), \" in the consent language you wish to scan for as a wildcard.\\nFor Example, passing “on behalf of \", _jsx(_components.code, {\n children: \"{{*}}\"\n }), \" at the telephone number” will\\nmatch “on behalf of Mortgage Acme at the telephone number”.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Like using exact language, scans using wildcards can be sent in as\\nan array.\"\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Templating\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Templating is different than other versions of page scanning in that you\\nmust 1) send it as JSON (i.e. Content-type of application/json); 2)\\nprovide a list of key/values to use in the template.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"If we were to use the example from above, we might use the following\\ntemplates:\"\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"21\",\n language: \"json\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"json\",\n children: _jsxs(_components.code, {\n language: \"json\",\n numberOfLines: \"21\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"{\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"required_scan_terms\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"template\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"on behalf of {{company}} at the telephone number\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"variables\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Mortgage Acme\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"},\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Acme Mortgage\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"},\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Acme Co.\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" ]\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" },\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"template\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"on behalf of {{company}} at the {{contact_method}}\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"variables\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Mortgage Acme\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"contact_method\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"email\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"},\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Acme Mortgage\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"contact_method\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"fax number\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"},\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Acme Mortgage\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"contact_method\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"email\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"},\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"company\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Acme Co.\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"contact_method\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"email\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" ]\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" ]\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Scan Delimiters\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"When using wildcards in page scans and page scan templates, the default\\nmethod is to surround the wildcard or template key with “handlebar” braces\\n(\", _jsx(_components.code, {\n children: \"{{}}\"\n }), \"). If that conflicts with your system, you can provide your own\\ndelimiter to use. Currently, TrustedForm only allows homogeneous delimiters\\n(i.e. the beginning and end are the same character(s)) such as \", _jsx(_components.code, {\n children: \"**\"\n }), \", \", _jsx(_components.code, {\n children: \"|\"\n }), \", or\\neven \", _jsx(_components.code, {\n children: \"+++\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Sandboxed Certificates\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Certificates created with the \", _jsx(_components.code, {\n children: \"sandbox\"\n }), \" flag set to \", _jsx(_components.code, {\n children: \"true\"\n }), \" cannot be\\nclaimed.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Claiming a Certificate","description":"TrustedForm account holders who are receiving certified leads can use the\nTrustedForm API to claim the certificate provided with each lead. Doing so\n\n1. Verifies the legitimacy of the certificate\n2. Stores the certificate for future reference and\n3. Provides programmatic access to the information shown on the certificate\n\nTo claim a certificate using the TrustedForm API, send an HTTP POST request\nto the certificate URL sent by your publisher.\n\nDo not make a request unless the URL starts with\nhttps://cert.trustedform.com, otherwise you may expose your TrustedForm\ncredentials to someone else\n\n- Use a POST request — any other type of request will not claim the\n certificate\n- Use the Accept: application/json request header\n- Use the Content-Type: application/json or Content-Type:\n application/x-www-form-urlencoded header, and encode the request body\n accordingly.\n- In the Authorization header, use the API key provided on the \"Settings\"\n tab in the TrustedForm Application and the username 'API'.\n\n### Page Scanning\n\nAs part of the claiming process, it's often required that certain language\neither exists or doesn't exist on the page. For example, you may want to\nensure certain consent language exists. As another example, you may want\nto ensure other language does not exist, such as \"free iPhone\".\n\n#### Page Scanning Params\n\nYou can use the `required_scan_terms` and `forbidden_scan_terms`\nparameters.\n\n- `required_scan_terms`: Use this parameter to scan for language you want to ensure exist\n on the page.\n- `forbidden_scan_terms`: Use this parameter to scan for language you want to ensure does\n not exist on the page.\n\nOften, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways:\n\n1. Send the variations as a list using `required_scan_terms[]` or `forbidden_scan_terms[]`\n2. Use wildcards in the consent language.\n3. Use templates.\n\nYou can use a mixture of all three.\n\n#### Wildcards\n\nUse `{{*}}` in the consent language you wish to scan for as a wildcard.\nFor Example, passing \"on behalf of `{{*}}` at the telephone number\" will\nmatch \"on behalf of Mortgage Acme at the telephone number\".\n\nLike using exact language, scans using wildcards can be sent in as\nan array.\n\n#### Templating\n\nTemplating is different than other versions of page scanning in that you\nmust 1) send it as JSON (i.e. Content-type of application/json); 2)\nprovide a list of key/values to use in the template.\n\nIf we were to use the example from above, we might use the following\ntemplates:\n\n```json\n{\n \"required_scan_terms\": [\n {\n \"template\": \"on behalf of {{company}} at the telephone number\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\"},\n {\"company\": \"Acme Mortgage\"},\n {\"company\": \"Acme Co.\"}\n ]\n },\n {\n \"template\": \"on behalf of {{company}} at the {{contact_method}}\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"fax number\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Co.\", \"contact_method\": \"email\"}\n ]\n }\n ]\n}\n```\n\n#### Scan Delimiters\n\nWhen using wildcards in page scans and page scan templates, the default\nmethod is to surround the wildcard or template key with \"handlebar\" braces\n(`{{}}`). If that conflicts with your system, you can provide your own\ndelimiter to use. Currently, TrustedForm only allows homogeneous delimiters\n(i.e. the beginning and end are the same character(s)) such as `**`, `|`, or\neven `+++`.\n\n### Sandboxed Certificates\n\nCertificates created with the `sandbox` flag set to `true` cannot be\nclaimed.\n","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id}","href":"/api-reference/claiming-certificates/claiming-a-certificate","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"callbacks":{},"description":"TrustedForm account holders who are receiving certified leads can use the\nTrustedForm API to claim the certificate provided with each lead. Doing so\n\n1. Verifies the legitimacy of the certificate\n2. Stores the certificate for future reference and\n3. Provides programmatic access to the information shown on the certificate\n\nTo claim a certificate using the TrustedForm API, send an HTTP POST request\nto the certificate URL sent by your publisher.\n\nDo not make a request unless the URL starts with\nhttps://cert.trustedform.com, otherwise you may expose your TrustedForm\ncredentials to someone else\n\n- Use a POST request — any other type of request will not claim the\n certificate\n- Use the Accept: application/json request header\n- Use the Content-Type: application/json or Content-Type:\n application/x-www-form-urlencoded header, and encode the request body\n accordingly.\n- In the Authorization header, use the API key provided on the \"Settings\"\n tab in the TrustedForm Application and the username 'API'.\n\n### Page Scanning\n\nAs part of the claiming process, it's often required that certain language\neither exists or doesn't exist on the page. For example, you may want to\nensure certain consent language exists. As another example, you may want\nto ensure other language does not exist, such as \"free iPhone\".\n\n#### Page Scanning Params\n\nYou can use the `required_scan_terms` and `forbidden_scan_terms`\nparameters.\n\n- `required_scan_terms`: Use this parameter to scan for language you want to ensure exist\n on the page.\n- `forbidden_scan_terms`: Use this parameter to scan for language you want to ensure does\n not exist on the page.\n\nOften, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways:\n\n1. Send the variations as a list using `required_scan_terms[]` or `forbidden_scan_terms[]`\n2. Use wildcards in the consent language.\n3. Use templates.\n\nYou can use a mixture of all three.\n\n#### Wildcards\n\nUse `{{*}}` in the consent language you wish to scan for as a wildcard.\nFor Example, passing \"on behalf of `{{*}}` at the telephone number\" will\nmatch \"on behalf of Mortgage Acme at the telephone number\".\n\nLike using exact language, scans using wildcards can be sent in as\nan array.\n\n#### Templating\n\nTemplating is different than other versions of page scanning in that you\nmust 1) send it as JSON (i.e. Content-type of application/json); 2)\nprovide a list of key/values to use in the template.\n\nIf we were to use the example from above, we might use the following\ntemplates:\n\n```json\n{\n \"required_scan_terms\": [\n {\n \"template\": \"on behalf of {{company}} at the telephone number\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\"},\n {\"company\": \"Acme Mortgage\"},\n {\"company\": \"Acme Co.\"}\n ]\n },\n {\n \"template\": \"on behalf of {{company}} at the {{contact_method}}\",\n \"variables\": [\n {\"company\": \"Mortgage Acme\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"fax number\"},\n {\"company\": \"Acme Mortgage\", \"contact_method\": \"email\"},\n {\"company\": \"Acme Co.\", \"contact_method\": \"email\"}\n ]\n }\n ]\n}\n```\n\n#### Scan Delimiters\n\nWhen using wildcards in page scans and page scan templates, the default\nmethod is to surround the wildcard or template key with \"handlebar\" braces\n(`{{}}`). If that conflicts with your system, you can provide your own\ndelimiter to use. Currently, TrustedForm only allows homogeneous delimiters\n(i.e. the beginning and end are the same character(s)) such as `**`, `|`, or\neven `+++`.\n\n### Sandboxed Certificates\n\nCertificates created with the `sandbox` flag set to `true` cannot be\nclaimed.\n","operationId":"ClaimerWeb.ClaimController.create","parameters":["00d2f31e-963e-4a4f-b113-5829732dd7d1","d57c7e02-5286-46ad-8327-dbc2f189dbeb"],"requestBody":"e815bbc9-9f10-4431-baa9-d5221ce0a416","responses":{"201":"7fcff1ec-77b4-4ed2-b4de-431d00c268ef","400":"1233aa7b-f20b-4d40-9211-250272cd7efb","401":"1ecf8ab8-2fe4-41b0-95ac-31009402e0cb","402":"58651966-eda9-4b2e-8322-c5da1e924871","404":"e7575fd9-933d-462e-acd7-2a2ea030f9dd","405":"c61fb00b-24a2-422d-abe4-14ff75528806","422":"cf72cd7c-b10d-47a2-9b43-5216cb896743"},"security":[],"summary":"Claiming a Certificate","tags":["Claiming Certificates"],"method":"post","type":"path","servers":["371b2407-45a8-41eb-be2b-d0e5a4677c60"],"path":"/{cert_id}","baseUrlOptions":["https://cert.trustedform.com"],"title":"Claiming a Certificate","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"00d2f31e-963e-4a4f-b113-5829732dd7d1":{"description":"Can be either `application/json` or `application/x-www-form-urlencoded`.\n","in":"header","name":"Content-type","required":true,"schema":{"type":"string","isRequired":true,"description":"Can be either `application/json` or `application/x-www-form-urlencoded`.\n","uniqueKey":"","typeLabel":"string"}},"d57c7e02-5286-46ad-8327-dbc2f189dbeb":{"description":"Certificate ID","in":"path","name":"cert_id","required":true,"schema":{"type":"string","isRequired":true,"description":"Certificate ID","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"description":"POST body for claiming a cert","example":{"email_1":"user@example.com","forbidden_scan_terms":"I do not agree to the terms of service","phone_1":"999-999-0909","reference":"1128238382829","required_scan_terms":"I agree to the terms of service","vendor":"Acme Co.","campaign_id":"summer_promo_2021"},"properties":{"campaign_id":{"description":"An optional identifier for the campaign associated with the lead. Use this to track which campaign generated the lead without relying on the vendor field. TrustedForm will record this value on the certificate stored in your account and include it in reporting.","type":"string","uniqueKey":"campaign_id","typeLabel":"string"},"email":{"description":"When claiming a certificate, you can pass an optional email (or email_1, email_2, etc)\nparameter. TrustedForm will extract the email value and perform fingerprinting\nagainst the available data.\n","type":"string","uniqueKey":"email","typeLabel":"string"},"fingerprints":{"description":"When you claim a certificate you can calculate lead fingerprint values\nusing the email and phone number you received in the lead data\naccompanying the certificate. Each fingerprint value is an SHA1 hash of\nan email or phone value. Each fingerprint value should be provided in a\nfingerprint parameter.\n\nIf none of the fingerprints you provide match a fingerprint collected on the\ncertificate you will receive the \"none of the provided fingerprints match\"\nmessage in the claim warnings field. This indicates that the lead data\ncollected on the form does not match the lead data that you received.\n","type":"string","uniqueKey":"fingerprints","typeLabel":"string"},"forbidden_scan_terms":{"oneOf":[{"type":"string","description":"Use this parameter to perform a scan of the page for text that must not\nbe present. TrustedForm will then perform a case and whitespace\ninsensitive search for the string. If the string is not found in the\nHTML document, then \"string found in snapshot\" will be included in\nthe warnings key of the claim response.\n","uniqueKey":"forbidden_scan_terms.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"forbidden_scan_terms.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Use this parameter to perform a scan of the page for text that must not\nbe present. TrustedForm will then perform a case and whitespace\ninsensitive search for the string. If the string is not found in the\nHTML document, then \"string found in snapshot\" will be included in\nthe warnings key of the claim response.\n","uniqueKey":"forbidden_scan_terms.oneOf.1","typeLabel":"string[]"},{"type":"object","title":"PageScan","description":"Use this parameter to perform a scan of the page for text that must not\nbe present. TrustedForm will then perform a case and whitespace\ninsensitive search for the string. If the string is not found in the\nHTML document, then \"string found in snapshot\" will be included in\nthe warnings key of the claim response.\n","x-struct":"Elixir.ClaimerWeb.Schemas.PageScan","properties":{"template":{"description":"The template text to use when performing the page scan. Variables\ndefined in the text (using `{{variable_name}} will be substituted for\nthose defined in the `variables` parameter.\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.2.template","typeLabel":"string"},"variables":{"items":{"description":"A list of key/value pairs as JSON objects.","properties":{"key":{"description":"replace `key` with the variable name you want to use\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.2.variables.items.[INDEX].key","typeLabel":"string"},"value":{"description":"replace `value` with the value to replace the variable with\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.2.variables.items.[INDEX].value","typeLabel":"string"}},"type":"object","uniqueKey":"forbidden_scan_terms.oneOf.2.variables.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"forbidden_scan_terms.oneOf.2.variables","typeLabel":"object[]"}},"uniqueKey":"forbidden_scan_terms.oneOf.2","typeLabel":"PageScan · object"},{"type":"array","items":{"description":"A JSON object containing the template and variables to use for\nsubstitutions\n","properties":{"template":{"description":"The template text to use when performing the page scan. Variables\ndefined in the text (using `{{variable_name}} will be substituted for\nthose defined in the `variables` parameter.\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX].template","typeLabel":"string"},"variables":{"items":{"description":"A list of key/value pairs as JSON objects.","properties":{"key":{"description":"replace `key` with the variable name you want to use\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX].key","typeLabel":"string"},"value":{"description":"replace `value` with the value to replace the variable with\n","type":"string","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX].value","typeLabel":"string"}},"type":"object","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX].variables","typeLabel":"object[]"}},"title":"PageScan","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.PageScan","uniqueKey":"forbidden_scan_terms.oneOf.3.items.[INDEX]","typeLabel":"PageScan · object"},"description":"Use this parameter to perform a scan of the page for text that must not\nbe present. TrustedForm will then perform a case and whitespace\ninsensitive search for the string. If the string is not found in the\nHTML document, then \"string found in snapshot\" will be included in\nthe warnings key of the claim response.\n","uniqueKey":"forbidden_scan_terms.oneOf.3","typeLabel":"PageScan · object[]"}],"uniqueKey":"forbidden_scan_terms","typeLabel":"string | string[] | PageScan · object | PageScan · object[]"},"phone":{"description":"When claiming a certificate, you can pass an optional phone (or phone_1, phone_2, etc)\nparameter. TrustedForm will extract the phone number value and perform fingerprinting\nagainst the available data.\n","type":"string","uniqueKey":"phone","typeLabel":"string"},"reference":{"description":"When you claim a certificate, you can include an optional parameter\nreference We will store this value in the certificate's claim record. A\nuse case for the reference parameter is to add your unique lead\nidentifier to the claim record, which will provide a reference point\nfrom the claim to the certified lead that you received.\n\nThis will indicate which lead a certificate belongs to just by\nexamining the certificate data. In the case that your publisher has\npassed you two leads with the same Certificate URL, this reference\nparameter will allow you to determine which lead it was originally\npassed with.\n","type":"string","uniqueKey":"reference","typeLabel":"string"},"required_scan_terms":{"oneOf":[{"type":"string","description":"Use this parameter to perform a scan of the page for required text.\nTrustedForm will then perform a case and whitespace insensitive search\nfor the string. If the string is not found in the HTML document, then\n\"string not found in snapshot\" will be included in the warnings key of\nthe claim response.\n","uniqueKey":"required_scan_terms.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"required_scan_terms.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Use this parameter to perform a scan of the page for required text.\nTrustedForm will then perform a case and whitespace insensitive search\nfor the string. If the string is not found in the HTML document, then\n\"string not found in snapshot\" will be included in the warnings key of\nthe claim response.\n","uniqueKey":"required_scan_terms.oneOf.1","typeLabel":"string[]"},{"type":"object","title":"PageScan","description":"Use this parameter to perform a scan of the page for required text.\nTrustedForm will then perform a case and whitespace insensitive search\nfor the string. If the string is not found in the HTML document, then\n\"string not found in snapshot\" will be included in the warnings key of\nthe claim response.\n","x-struct":"Elixir.ClaimerWeb.Schemas.PageScan","properties":{"template":{"description":"The template text to use when performing the page scan. Variables\ndefined in the text (using `{{variable_name}} will be substituted for\nthose defined in the `variables` parameter.\n","type":"string","uniqueKey":"required_scan_terms.oneOf.2.template","typeLabel":"string"},"variables":{"items":{"description":"A list of key/value pairs as JSON objects.","properties":{"key":{"description":"replace `key` with the variable name you want to use\n","type":"string","uniqueKey":"required_scan_terms.oneOf.2.variables.items.[INDEX].key","typeLabel":"string"},"value":{"description":"replace `value` with the value to replace the variable with\n","type":"string","uniqueKey":"required_scan_terms.oneOf.2.variables.items.[INDEX].value","typeLabel":"string"}},"type":"object","uniqueKey":"required_scan_terms.oneOf.2.variables.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"required_scan_terms.oneOf.2.variables","typeLabel":"object[]"}},"uniqueKey":"required_scan_terms.oneOf.2","typeLabel":"PageScan · object"},{"type":"array","items":{"description":"A JSON object containing the template and variables to use for\nsubstitutions\n","properties":{"template":{"description":"The template text to use when performing the page scan. Variables\ndefined in the text (using `{{variable_name}} will be substituted for\nthose defined in the `variables` parameter.\n","type":"string","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX].template","typeLabel":"string"},"variables":{"items":{"description":"A list of key/value pairs as JSON objects.","properties":{"key":{"description":"replace `key` with the variable name you want to use\n","type":"string","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX].key","typeLabel":"string"},"value":{"description":"replace `value` with the value to replace the variable with\n","type":"string","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX].value","typeLabel":"string"}},"type":"object","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX].variables.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX].variables","typeLabel":"object[]"}},"title":"PageScan","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.PageScan","uniqueKey":"required_scan_terms.oneOf.3.items.[INDEX]","typeLabel":"PageScan · object"},"description":"Use this parameter to perform a scan of the page for required text.\nTrustedForm will then perform a case and whitespace insensitive search\nfor the string. If the string is not found in the HTML document, then\n\"string not found in snapshot\" will be included in the warnings key of\nthe claim response.\n","uniqueKey":"required_scan_terms.oneOf.3","typeLabel":"PageScan · object[]"}],"uniqueKey":"required_scan_terms","typeLabel":"string | string[] | PageScan · object | PageScan · object[]"},"scan_delimiter":{"description":"You can provide your own delimiter to use when wrapping wildcards or\ntempate variablies. Your choice of delimiter must be homogeneous (i.e.\nthe beginning and end are the same character(s)), such as\n`|`, `==`, or `|||`.\n","type":"string","uniqueKey":"scan_delimiter","typeLabel":"string"},"vendor":{"description":"When claiming a certificate, you can pass the optional vendor\nparameter. This is intended for tracking the name of the company\nthat provided the lead associated with the certificate. We will\nstore this value in the certificate’s claim record. When you use\nTrustedForm reporting, you can easily filter or group by a vendor.\n","type":"string","uniqueKey":"vendor","typeLabel":"string"}},"title":"ClaimRequest","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimRequestV3","uniqueKey":"","typeLabel":"ClaimRequest · object"},"examples":{"Example":{"title":"Example","value":{"email_1":"user@example.com","forbidden_scan_terms":"I do not agree to the terms of service","phone_1":"999-999-0909","reference":"1128238382829","required_scan_terms":"I agree to the terms of service","vendor":"Acme Co.","campaign_id":"summer_promo_2021"}}},"exampleType":"generated"}},"description":"Claiming Parameters","required":false,"exampleType":"generated"},"responses":{"7fcff1ec-77b4-4ed2-b4de-431d00c268ef":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"ConsentClaimResponse","required":["outcome","masked_cert_url","is_masked","scans","fingerprints"],"x-struct":"Elixir.ClaimerWeb.Schemas.LimitedOrFullClaim","example":{"fingerprints":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"is_masked":false,"masked_cert_url":"https://example.com/1145b610ac97aa9f92d7cd2195446eac5e67ce53","outcome":"success","scans":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"warnings":[]},"properties":{"fingerprints":{"example":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"properties":{"matching":{"description":"Requested fingerprints that match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.0.fingerprints.matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.0.fingerprints.matching","typeLabel":"string[]"},"not_matching":{"description":"Fingerprints that do not match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.0.fingerprints.not_matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.0.fingerprints.not_matching","typeLabel":"string[]"}},"title":"Fingerprints","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimFingerprints","isRequired":true,"uniqueKey":"oneOf.0.fingerprints","typeLabel":"Fingerprints · object"},"is_masked":{"description":"A boolean indicating whether the certificate is masked","type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.is_masked","typeLabel":"boolean"},"masked_cert_url":{"oneOf":[{"description":"A certificate url that masks the lead source url and snapshot","type":"string","isRequired":true,"uniqueKey":"oneOf.0.masked_cert_url.oneOf.0","typeLabel":"string"},{"description":"A certificate url that masks the lead source url and snapshot","type":"null","isRequired":true,"uniqueKey":"oneOf.0.masked_cert_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.masked_cert_url","typeLabel":"string | null"},"outcome":{"default":"success","description":"The result of the attempt to verify consent. Success indicates that the certificate was\nclaimed and did not generate any warnings related to consent verification. Failure indicates\nthat the certificate was claimed but generated warnings because no fingerprints matched,\nforbidden scan terms were found or required scan terms were missing. Error indicates that\nthe certificate was not claimed and the request should be reviewed and potentially retried.\n","enum":["success","failure","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.outcome","typeLabel":"enum\u003cstring>"},"scans":{"example":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"properties":{"forbidden_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.0.scans.forbidden_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.scans.forbidden_found","typeLabel":"string[]"},"forbidden_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.0.scans.forbidden_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.scans.forbidden_not_found","typeLabel":"string[]"},"required_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.0.scans.required_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.scans.required_found","typeLabel":"string[]"},"required_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.0.scans.required_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.scans.required_not_found","typeLabel":"string[]"}},"required":["required_found","required_not_found","forbidden_found","forbidden_not_found"],"title":"PageScans","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimPageScans","isRequired":true,"uniqueKey":"oneOf.0.scans","typeLabel":"PageScans · object"},"reason":{"description":"Provides an explanation for failure or error.\n\nOnly used for `outcome` of `failure` or `error`.\n","type":"string","uniqueKey":"oneOf.0.reason","typeLabel":"string"},"warnings":{"description":" An array of strings indicating possible issues with the certificate\n\n * `none of the provided fingerprints match`: No fingerprints matched.\n * `snapshot scan failed`: The snapshot was unable to be scanned.\n * `string not found in snapshot`: A required page scan text was not found.\n * `string found in snapshot`: A forbidden page scan text was found.\n","items":{"enum":["none of the provided fingerprints match","snapshot scan failed","string not found in snapshot","string found in snapshot"],"type":"string","uniqueKey":"oneOf.0.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"type":"array","uniqueKey":"oneOf.0.warnings","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"oneOf.0","typeLabel":"ConsentClaimResponse · object"},{"type":"object","title":"ConsentAndInsightsClaimResponse","required":["outcome","cert","fingerprints","masked_cert_url","is_masked","scans","warnings"],"x-struct":"Elixir.ClaimerWeb.Schemas.LimitedOrFullClaim","example":{"cert":{"age_seconds":33,"approx_ip_geo":{"city":"Austin","country_code":"US","lat":30.4548,"lon":-97.7664,"postal_code":"78729","state":"TX","time_zone":"America/Chicago"},"browser":{"full":"Chrome 95.0.4638.69","name":"Chrome","version":{"full":"95.0.4638.69","major":"95","minor":"0","patch":"4638.69"}},"cert_id":"ddbb5429ca0063f857197df1a4638665bc143eee","created_at":"2021-11-12T22:06:44Z","domain":"example.com","event_duration_ms":21110,"expires_at":"2021-11-15T22:06:44Z","form_input_method":["typing","autofill"],"ip":"8.8.8.8","is_framed":true,"is_mobile":false,"kpm":68.2314,"operating_system":{"full":"Mac OS X 10.15.7","name":"Mac OS X","version":{"full":"10.15.7","major":"10","minor":"15","patch":"7"}},"page_id":"5d8ce3c9502b426f77001ae7","page_url":"https://www.example.com/contact.html","parent_page_url":"https://www.example.com/index.html","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36","wpm":77.1234},"fingerprints":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"is_masked":false,"masked_cert_url":"https://example.com/1145b610ac97aa9f92d7cd2195446eac5e67ce53","outcome":"success","scans":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"warnings":[]},"properties":{"cert":{"example":{"age_seconds":33,"approx_ip_geo":{"city":"Austin","country_code":"US","lat":30.4548,"lon":-97.7664,"postal_code":"78729","state":"TX","time_zone":"America/Chicago"},"browser":{"full":"Chrome 95.0.4638.69","name":"Chrome","version":{"full":"95.0.4638.69","major":"95","minor":"0","patch":"4638.69"}},"cert_id":"ddbb5429ca0063f857197df1a4638665bc143eee","created_at":"2021-11-12T22:06:44Z","domain":"example.com","event_duration_ms":21110,"expires_at":"2021-11-15T22:06:44Z","form_input_method":["typing","autofill"],"ip":"8.8.8.8","is_framed":true,"is_mobile":false,"kpm":68.2314,"operating_system":{"full":"Mac OS X 10.15.7","name":"Mac OS X","version":{"full":"10.15.7","major":"10","minor":"15","patch":"7"}},"page_id":"5d8ce3c9502b426f77001ae7","page_url":"https://www.example.com/contact.html","parent_page_url":"https://www.example.com/index.html","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36","wpm":77.1234},"properties":{"age_seconds":{"description":"Number of seconds since the last user interaction with the certificate","type":"integer","isRequired":true,"uniqueKey":"oneOf.1.cert.age_seconds","typeLabel":"integer"},"approx_ip_geo":{"description":"Approximate geolocation based on IP","properties":{"city":{"oneOf":[{"description":"City Name","type":"string","uniqueKey":"oneOf.1.cert.approx_ip_geo.city.oneOf.0","typeLabel":"string"},{"description":"City Name","type":"null","uniqueKey":"oneOf.1.cert.approx_ip_geo.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.cert.approx_ip_geo.city","typeLabel":"string | null"},"country_code":{"description":"Country Code","type":"string","uniqueKey":"oneOf.1.cert.approx_ip_geo.country_code","typeLabel":"string"},"lat":{"description":"Latitude","type":"number","uniqueKey":"oneOf.1.cert.approx_ip_geo.lat","typeLabel":"number"},"lon":{"description":"Longitude","type":"number","uniqueKey":"oneOf.1.cert.approx_ip_geo.lon","typeLabel":"number"},"postal_code":{"description":"Mailing address postal code","type":"string","uniqueKey":"oneOf.1.cert.approx_ip_geo.postal_code","typeLabel":"string"},"state":{"description":"State/Province or Political Subdivision abbreviation","type":"string","uniqueKey":"oneOf.1.cert.approx_ip_geo.state","typeLabel":"string"},"time_zone":{"description":"Timezone name","type":"string","uniqueKey":"oneOf.1.cert.approx_ip_geo.time_zone","typeLabel":"string"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.1.cert.approx_ip_geo","typeLabel":"object"},"browser":{"description":"Browser parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the browser parsed from the user-agent","type":"string","uniqueKey":"oneOf.1.cert.browser.full","typeLabel":"string"},"name":{"description":"Browser name","type":"string","uniqueKey":"oneOf.1.cert.browser.name","typeLabel":"string"},"version":{"description":"Browser version","properties":{"full":{"description":"A String containing the version","type":"string","uniqueKey":"oneOf.1.cert.browser.version.full","typeLabel":"string"},"major":{"description":"A String containing the major version","type":"string","uniqueKey":"oneOf.1.cert.browser.version.major","typeLabel":"string"},"minor":{"description":"A String containing the minor version","type":"string","uniqueKey":"oneOf.1.cert.browser.version.minor","typeLabel":"string"},"patch":{"description":"A String containing the patch version","type":"string","uniqueKey":"oneOf.1.cert.browser.version.patch","typeLabel":"string"}},"type":"object","uniqueKey":"oneOf.1.cert.browser.version","typeLabel":"object"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.1.cert.browser","typeLabel":"object"},"cert_id":{"description":"Certificate ID","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.cert_id","typeLabel":"string"},"created_at":{"description":"The UTC ISO8601 formatted date and time when the TrustedForm script was loaded","format":"date-time","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.created_at","typeLabel":"string\u003cdate-time>"},"domain":{"description":"The domain of the page url","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.domain","typeLabel":"string"},"event_duration_ms":{"description":"The time in milliseconds between when the script was loaded and when the most recent event was received","type":"integer","isRequired":true,"uniqueKey":"oneOf.1.cert.event_duration_ms","typeLabel":"integer"},"expires_at":{"description":"The UTC ISO8601 formatted date and time when the claim period for the certificate will expire","format":"date-time","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.expires_at","typeLabel":"string\u003cdate-time>"},"form_input_method":{"description":" The detected input method or methods the consumer used to fill out the form\n\n * `autofill`: The form was filled out using browser autofill.\n * `paste`: The form was filled out pasting text.\n * `typing`: The form was filled out typing.\n","items":{"enum":["autofill","paste","typing"],"type":"string","uniqueKey":"oneOf.1.cert.form_input_method.items.[INDEX]","typeLabel":"enum\u003cstring>"},"type":"array","uniqueItems":true,"isRequired":true,"uniqueKey":"oneOf.1.cert.form_input_method","typeLabel":"enum\u003cstring>[]"},"ip":{"description":"The consumer's public IP address","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.ip","typeLabel":"string"},"is_framed":{"description":"A boolean indicating that the form was displayed within an iframe","type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.cert.is_framed","typeLabel":"boolean"},"is_mobile":{"description":"A boolean indicating that the form was filled out on a mobile device or tablet, based on user-agent","type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.cert.is_mobile","typeLabel":"boolean"},"kpm":{"description":"Approximate calculated words per minute","type":"number","isRequired":true,"uniqueKey":"oneOf.1.cert.kpm","typeLabel":"number"},"operating_system":{"description":"Operating system information parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the operating system information parsed from the user-agent","type":"string","uniqueKey":"oneOf.1.cert.operating_system.full","typeLabel":"string"},"name":{"description":"Operating system name","type":"string","uniqueKey":"oneOf.1.cert.operating_system.name","typeLabel":"string"},"version":{"description":"Operating system version","properties":{"full":{"description":"A String containing the version","type":"string","uniqueKey":"oneOf.1.cert.operating_system.version.full","typeLabel":"string"},"major":{"description":"A String containing the major version","type":"string","uniqueKey":"oneOf.1.cert.operating_system.version.major","typeLabel":"string"},"minor":{"description":"A String containing the minor version","type":"string","uniqueKey":"oneOf.1.cert.operating_system.version.minor","typeLabel":"string"},"patch":{"description":"A String containing the patch version","type":"string","uniqueKey":"oneOf.1.cert.operating_system.version.patch","typeLabel":"string"}},"type":"object","uniqueKey":"oneOf.1.cert.operating_system.version","typeLabel":"object"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.1.cert.operating_system","typeLabel":"object"},"page_id":{"description":"The account based unique page id","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.page_id","typeLabel":"string"},"page_url":{"description":"The URL of the page hosting the TrustedForm script","format":"url","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.page_url","typeLabel":"string\u003curl>"},"parent_page_url":{"oneOf":[{"description":"The parent URL of the page hosting the TrustedForm script, if framed","format":"url","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.parent_page_url.oneOf.0","typeLabel":"string\u003curl>"},{"description":"The parent URL of the page hosting the TrustedForm script, if framed","format":"url","type":"null","isRequired":true,"uniqueKey":"oneOf.1.cert.parent_page_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.cert.parent_page_url","typeLabel":"string\u003curl> | null"},"user_agent":{"description":"The consumer's browser user-agent","type":"string","isRequired":true,"uniqueKey":"oneOf.1.cert.user_agent","typeLabel":"string"},"wpm":{"description":"Approximate calculated key presses per minute","type":"number","isRequired":true,"uniqueKey":"oneOf.1.cert.wpm","typeLabel":"number"}},"required":["age_seconds","approx_ip_geo","browser","cert_id","created_at","domain","expires_at","event_duration_ms","is_framed","form_input_method","ip","kpm","is_mobile","operating_system","page_id","page_url","parent_page_url","user_agent","wpm"],"title":"WebCertificate","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.WebCertV3","isRequired":true,"uniqueKey":"oneOf.1.cert","typeLabel":"WebCertificate · object"},"fingerprints":{"example":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"properties":{"matching":{"description":"Requested fingerprints that match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.1.fingerprints.matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.1.fingerprints.matching","typeLabel":"string[]"},"not_matching":{"description":"Fingerprints that do not match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.1.fingerprints.not_matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.1.fingerprints.not_matching","typeLabel":"string[]"}},"title":"Fingerprints","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimFingerprints","isRequired":true,"uniqueKey":"oneOf.1.fingerprints","typeLabel":"Fingerprints · object"},"is_masked":{"description":"A boolean indicating whether the certificate is masked","type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.is_masked","typeLabel":"boolean"},"masked_cert_url":{"oneOf":[{"description":"A certificate url that masks the lead source url and snapshot","type":"string","isRequired":true,"uniqueKey":"oneOf.1.masked_cert_url.oneOf.0","typeLabel":"string"},{"description":"A certificate url that masks the lead source url and snapshot","type":"null","isRequired":true,"uniqueKey":"oneOf.1.masked_cert_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.masked_cert_url","typeLabel":"string | null"},"outcome":{"default":"success","description":"The result of the attempt to verify consent. Success indicates that the certificate was\nclaimed and did not generate any warnings related to consent verification. Failure indicates\nthat the certificate was claimed but generated warnings because no fingerprints matched,\nforbidden scan terms were found or required scan terms were missing. Error indicates that\nthe certificate was not claimed and the request should be reviewed and potentially retried.\n","enum":["success","failure","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.1.outcome","typeLabel":"enum\u003cstring>"},"scans":{"example":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"properties":{"forbidden_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.1.scans.forbidden_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.scans.forbidden_found","typeLabel":"string[]"},"forbidden_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.1.scans.forbidden_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.scans.forbidden_not_found","typeLabel":"string[]"},"required_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.1.scans.required_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.scans.required_found","typeLabel":"string[]"},"required_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.1.scans.required_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.scans.required_not_found","typeLabel":"string[]"}},"required":["required_found","required_not_found","forbidden_found","forbidden_not_found"],"title":"PageScans","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimPageScans","isRequired":true,"uniqueKey":"oneOf.1.scans","typeLabel":"PageScans · object"},"warnings":{"description":" An array of strings indicating possible issues with the certificate\n\n * `none of the provided fingerprints match`: No fingerprints matched.\n * `snapshot scan failed`: The snapshot was unable to be scanned.\n * `string not found in snapshot`: A required page scan text was not found.\n * `string found in snapshot`: A forbidden page scan text was found.\n","items":{"enum":["none of the provided fingerprints match","snapshot scan failed","string not found in snapshot","string found in snapshot"],"type":"string","uniqueKey":"oneOf.1.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.warnings","typeLabel":"enum\u003cstring>[]"},"reason":{"description":"Provides an explanation for failure or error.\n\nOnly used for `outcome` of `failure` or `error`.\n","type":"string","uniqueKey":"oneOf.1.reason","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"ConsentAndInsightsClaimResponse · object"},{"type":"object","title":"RetainResponse","required":["outcome"],"x-struct":"Elixir.ClaimerWeb.Schemas.LimitedOrFullClaim","example":{"is_retained":"true","outcome":"success"},"properties":{"outcome":{"default":"success","description":"The result of the attempt to verify a cert was retained. Success indicates that the certificate was\nretained and did not generate any warnings related to consent verification. Failure indicates\nthat the certificate was retained but generated warnings because no fingerprints matched,\nforbidden scan terms were found or required scan terms were missing. Error indicates that\nthe certificate was not retained and the request should be reviewed and potentially retried.\n","enum":["success","failure","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.2.outcome","typeLabel":"enum\u003cstring>"},"is_retained":{"description":"Set to true when the cert has been retained\"\nOnly used for `outcome` of `success`.\n","type":"boolean","uniqueKey":"oneOf.2.is_retained","typeLabel":"boolean"},"reason":{"description":"Provides an explanation for failure or error.\n\nOnly used for `outcome` of `failure` or `error`.\n","type":"string","uniqueKey":"oneOf.2.reason","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"RetainResponse · object"},{"type":"object","title":"InsightsResponse","description":"Insights Component Response","required":["outcome","cert","is_masked","scans","fingerprints"],"x-struct":"Elixir.ClaimerWeb.Schemas.LimitedOrFullClaim","example":{"cert":{"age_seconds":33,"approx_ip_geo":{"city":"Austin","country_code":"US","lat":30.4548,"lon":-97.7664,"postal_code":"78729","state":"TX","time_zone":"America/Chicago"},"browser":{"full":"Chrome 95.0.4638.69","name":"Chrome","version":{"full":"95.0.4638.69","major":"95","minor":"0","patch":"4638.69"}},"created_at":"2021-11-12T22:06:44Z","domain":"example.com","event_duration_ms":21110,"expires_at":"2021-11-15T22:06:44Z","form_input_method":["typing","autofill"],"ip":"8.8.8.8","is_framed":true,"is_mobile":false,"kpm":68.2314,"operating_system":{"full":"Mac OS X 10.15.7","name":"Mac OS X","version":{"full":"10.15.7","major":"10","minor":"15","patch":"7"}},"page_id":"5d8ce3c9502b426f77001ae7","page_url":"https://www.example.com/contact.html","parent_page_url":"https://www.example.com/index.html","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36","wpm":77.1234},"fingerprints":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"is_masked":false,"outcome":"success","scans":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"warnings":[]},"properties":{"cert":{"example":{"age_seconds":33,"approx_ip_geo":{"city":"Austin","country_code":"US","lat":30.4548,"lon":-97.7664,"postal_code":"78729","state":"TX","time_zone":"America/Chicago"},"browser":{"full":"Chrome 95.0.4638.69","name":"Chrome","version":{"full":"95.0.4638.69","major":"95","minor":"0","patch":"4638.69"}},"created_at":"2021-11-12T22:06:44Z","domain":"example.com","event_duration_ms":21110,"expires_at":"2021-11-15T22:06:44Z","form_input_method":["typing","autofill"],"ip":"8.8.8.8","is_framed":true,"is_mobile":false,"kpm":68.2314,"operating_system":{"full":"Mac OS X 10.15.7","name":"Mac OS X","version":{"full":"10.15.7","major":"10","minor":"15","patch":"7"}},"page_id":"5d8ce3c9502b426f77001ae7","page_url":"https://www.example.com/contact.html","parent_page_url":"https://www.example.com/index.html","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36","wpm":77.1234},"properties":{"age_seconds":{"description":"Number of seconds since the last user interaction with the certificate","type":"integer","isRequired":true,"uniqueKey":"oneOf.3.cert.age_seconds","typeLabel":"integer"},"approx_ip_geo":{"oneOf":[{"description":"Approximate geolocation based on IP","properties":{"city":{"oneOf":[{"description":"City Name","type":"string","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.city.oneOf.0","typeLabel":"string"},{"description":"City Name","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.city","typeLabel":"string | null"},"country_code":{"oneOf":[{"description":"Country Code","type":"string","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.country_code.oneOf.0","typeLabel":"string"},{"description":"Country Code","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.country_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.country_code","typeLabel":"string | null"},"lat":{"oneOf":[{"description":"Latitude","type":"number","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lat.oneOf.0","typeLabel":"number"},{"description":"Latitude","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lat.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lat","typeLabel":"number | null"},"lon":{"oneOf":[{"description":"Longitude","type":"number","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lon.oneOf.0","typeLabel":"number"},{"description":"Longitude","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lon.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.lon","typeLabel":"number | null"},"postal_code":{"oneOf":[{"description":"Mailing address postal code","type":"string","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.postal_code.oneOf.0","typeLabel":"string"},{"description":"Mailing address postal code","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.postal_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.postal_code","typeLabel":"string | null"},"state":{"oneOf":[{"description":"State/Province or Political Subdivision abbreviation","type":"string","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.state.oneOf.0","typeLabel":"string"},{"description":"State/Province or Political Subdivision abbreviation","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.state","typeLabel":"string | null"},"time_zone":{"oneOf":[{"description":"Timezone name","type":"string","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.time_zone.oneOf.0","typeLabel":"string"},{"description":"Timezone name","type":"null","uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.time_zone.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0.time_zone","typeLabel":"string | null"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.0","typeLabel":"object"},{"description":"Approximate geolocation based on IP","properties":{"city":{"oneOf":[{"description":"City Name","type":"string"},{"description":"City Name","type":"null"}]},"country_code":{"oneOf":[{"description":"Country Code","type":"string"},{"description":"Country Code","type":"null"}]},"lat":{"oneOf":[{"description":"Latitude","type":"number"},{"description":"Latitude","type":"null"}]},"lon":{"oneOf":[{"description":"Longitude","type":"number"},{"description":"Longitude","type":"null"}]},"postal_code":{"oneOf":[{"description":"Mailing address postal code","type":"string"},{"description":"Mailing address postal code","type":"null"}]},"state":{"oneOf":[{"description":"State/Province or Political Subdivision abbreviation","type":"string"},{"description":"State/Province or Political Subdivision abbreviation","type":"null"}]},"time_zone":{"oneOf":[{"description":"Timezone name","type":"string"},{"description":"Timezone name","type":"null"}]}},"type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.approx_ip_geo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.approx_ip_geo","typeLabel":"object | null"},"browser":{"oneOf":[{"description":"Browser parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the browser parsed from the user-agent","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.full","typeLabel":"string"},"name":{"description":"Browser name","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.name","typeLabel":"string"},"version":{"description":"Browser version","properties":{"full":{"description":"A String containing the version","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.version.full","typeLabel":"string"},"major":{"description":"A String containing the major version","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.version.major","typeLabel":"string"},"minor":{"description":"A String containing the minor version","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.version.minor","typeLabel":"string"},"patch":{"description":"A String containing the patch version","type":"string","uniqueKey":"oneOf.3.cert.browser.oneOf.0.version.patch","typeLabel":"string"}},"type":"object","uniqueKey":"oneOf.3.cert.browser.oneOf.0.version","typeLabel":"object"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.3.cert.browser.oneOf.0","typeLabel":"object"},{"description":"Browser parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the browser parsed from the user-agent","type":"string"},"name":{"description":"Browser name","type":"string"},"version":{"description":"Browser version","properties":{"full":{"description":"A String containing the version","type":"string"},"major":{"description":"A String containing the major version","type":"string"},"minor":{"description":"A String containing the minor version","type":"string"},"patch":{"description":"A String containing the patch version","type":"string"}},"type":"object"}},"type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.browser.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.browser","typeLabel":"object | null"},"created_at":{"description":"The UTC ISO8601 formatted date and time when the TrustedForm script was loaded","format":"date-time","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.created_at","typeLabel":"string\u003cdate-time>"},"domain":{"oneOf":[{"description":"The domain of the page url","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.domain.oneOf.0","typeLabel":"string"},{"description":"The domain of the page url","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.domain","typeLabel":"string | null"},"event_duration_ms":{"oneOf":[{"description":"The time in milliseconds between when the script was loaded and when the most recent event was received","type":"integer","isRequired":true,"uniqueKey":"oneOf.3.cert.event_duration_ms.oneOf.0","typeLabel":"integer"},{"description":"The time in milliseconds between when the script was loaded and when the most recent event was received","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.event_duration_ms.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.event_duration_ms","typeLabel":"integer | null"},"expires_at":{"description":"The UTC ISO8601 formatted date and time when the claim period for the certificate will expire","format":"date-time","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.expires_at","typeLabel":"string\u003cdate-time>"},"form_input_method":{"oneOf":[{"description":" The detected input method or methods the consumer used to fill out the form\n\n * `autofill`: The form was filled out using browser autofill.\n * `paste`: The form was filled out pasting text.\n * `typing`: The form was filled out typing.\n","items":{"enum":["autofill","paste","typing"],"type":"string","uniqueKey":"oneOf.3.cert.form_input_method.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"type":"array","uniqueItems":true,"isRequired":true,"uniqueKey":"oneOf.3.cert.form_input_method.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"description":" The detected input method or methods the consumer used to fill out the form\n\n * `autofill`: The form was filled out using browser autofill.\n * `paste`: The form was filled out pasting text.\n * `typing`: The form was filled out typing.\n","items":{"enum":["autofill","paste","typing"],"type":"string"},"type":"null","uniqueItems":true,"isRequired":true,"uniqueKey":"oneOf.3.cert.form_input_method.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.form_input_method","typeLabel":"enum\u003cstring>[] | null"},"ip":{"oneOf":[{"description":"The consumer's public IP address","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.ip.oneOf.0","typeLabel":"string"},{"description":"The consumer's public IP address","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.ip.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.ip","typeLabel":"string | null"},"is_framed":{"oneOf":[{"description":"A boolean indicating that the form was displayed within an iframe","type":"boolean","isRequired":true,"uniqueKey":"oneOf.3.cert.is_framed.oneOf.0","typeLabel":"boolean"},{"description":"A boolean indicating that the form was displayed within an iframe","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.is_framed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.is_framed","typeLabel":"boolean | null"},"is_mobile":{"oneOf":[{"description":"A boolean indicating that the form was filled out on a mobile device or tablet, based on user-agent","type":"boolean","isRequired":true,"uniqueKey":"oneOf.3.cert.is_mobile.oneOf.0","typeLabel":"boolean"},{"description":"A boolean indicating that the form was filled out on a mobile device or tablet, based on user-agent","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.is_mobile.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.is_mobile","typeLabel":"boolean | null"},"kpm":{"oneOf":[{"description":"Approximate calculated words per minute","type":"number","isRequired":true,"uniqueKey":"oneOf.3.cert.kpm.oneOf.0","typeLabel":"number"},{"description":"Approximate calculated words per minute","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.kpm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.kpm","typeLabel":"number | null"},"operating_system":{"oneOf":[{"description":"Operating system information parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the operating system information parsed from the user-agent","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.full","typeLabel":"string"},"name":{"description":"Operating system name","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.name","typeLabel":"string"},"version":{"description":"Operating system version","properties":{"full":{"description":"A String containing the version","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.version.full","typeLabel":"string"},"major":{"description":"A String containing the major version","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.version.major","typeLabel":"string"},"minor":{"description":"A String containing the minor version","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.version.minor","typeLabel":"string"},"patch":{"description":"A String containing the patch version","type":"string","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.version.patch","typeLabel":"string"}},"type":"object","uniqueKey":"oneOf.3.cert.operating_system.oneOf.0.version","typeLabel":"object"}},"type":"object","isRequired":true,"uniqueKey":"oneOf.3.cert.operating_system.oneOf.0","typeLabel":"object"},{"description":"Operating system information parsed from the user-agent, when known","properties":{"full":{"description":"A human-friendly version of the operating system information parsed from the user-agent","type":"string"},"name":{"description":"Operating system name","type":"string"},"version":{"description":"Operating system version","properties":{"full":{"description":"A String containing the version","type":"string"},"major":{"description":"A String containing the major version","type":"string"},"minor":{"description":"A String containing the minor version","type":"string"},"patch":{"description":"A String containing the patch version","type":"string"}},"type":"object"}},"type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.operating_system.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.operating_system","typeLabel":"object | null"},"page_id":{"oneOf":[{"description":"The account based unique page id","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.page_id.oneOf.0","typeLabel":"string"},{"description":"The account based unique page id","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.page_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.page_id","typeLabel":"string | null"},"page_url":{"oneOf":[{"description":"The URL of the page hosting the TrustedForm script","format":"url","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.page_url.oneOf.0","typeLabel":"string\u003curl>"},{"description":"The URL of the page hosting the TrustedForm script","format":"url","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.page_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.page_url","typeLabel":"string\u003curl> | null"},"parent_page_url":{"oneOf":[{"description":"The parent URL of the page hosting the TrustedForm script, if framed","format":"url","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.parent_page_url.oneOf.0","typeLabel":"string\u003curl>"},{"description":"The parent URL of the page hosting the TrustedForm script, if framed","format":"url","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.parent_page_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.parent_page_url","typeLabel":"string\u003curl> | null"},"user_agent":{"oneOf":[{"description":"The consumer's browser user-agent","type":"string","isRequired":true,"uniqueKey":"oneOf.3.cert.user_agent.oneOf.0","typeLabel":"string"},{"description":"The consumer's browser user-agent","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.user_agent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.user_agent","typeLabel":"string | null"},"wpm":{"oneOf":[{"description":"Approximate calculated key presses per minute","type":"number","isRequired":true,"uniqueKey":"oneOf.3.cert.wpm.oneOf.0","typeLabel":"number"},{"description":"Approximate calculated key presses per minute","type":"null","isRequired":true,"uniqueKey":"oneOf.3.cert.wpm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.3.cert.wpm","typeLabel":"number | null"}},"required":["age_seconds","approx_ip_geo","browser","created_at","domain","expires_at","event_duration_ms","is_framed","form_input_method","ip","kpm","is_mobile","operating_system","page_id","page_url","parent_page_url","user_agent","wpm"],"title":"DataServiceCert","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.DataServiceCert","isRequired":true,"uniqueKey":"oneOf.3.cert","typeLabel":"DataServiceCert · object"},"fingerprints":{"example":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"properties":{"matching":{"description":"Requested fingerprints that match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.3.fingerprints.matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.3.fingerprints.matching","typeLabel":"string[]"},"not_matching":{"description":"Fingerprints that do not match fingerprints collected with the certificate","items":{"type":"string","uniqueKey":"oneOf.3.fingerprints.not_matching.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"oneOf.3.fingerprints.not_matching","typeLabel":"string[]"}},"title":"Fingerprints","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimFingerprints","isRequired":true,"uniqueKey":"oneOf.3.fingerprints","typeLabel":"Fingerprints · object"},"is_masked":{"description":"A boolean indicating whether the certificate is masked","type":"boolean","isRequired":true,"uniqueKey":"oneOf.3.is_masked","typeLabel":"boolean"},"outcome":{"default":"success","description":"The result of the attempt to verify consent. Success indicates that the request did not generate any warnings related to consent verification. Failure indicates that the requests generated warnings because no fingerprints matched, forbidden scan terms were found or required scan terms were missing. Error indicates that the request was not successfull and the request should be reviewed and potentially retried.\n","enum":["success","failure","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.3.outcome","typeLabel":"enum\u003cstring>"},"scans":{"example":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"properties":{"forbidden_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.3.scans.forbidden_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.3.scans.forbidden_found","typeLabel":"string[]"},"forbidden_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.3.scans.forbidden_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.3.scans.forbidden_not_found","typeLabel":"string[]"},"required_found":{"description":"Requested required text found on page","items":{"type":"string","uniqueKey":"oneOf.3.scans.required_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.3.scans.required_found","typeLabel":"string[]"},"required_not_found":{"description":"Requested required text not found on page","items":{"type":"string","uniqueKey":"oneOf.3.scans.required_not_found.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.3.scans.required_not_found","typeLabel":"string[]"}},"required":["required_found","required_not_found","forbidden_found","forbidden_not_found"],"title":"PageScans","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.ClaimPageScans","isRequired":true,"uniqueKey":"oneOf.3.scans","typeLabel":"PageScans · object"},"reason":{"description":"Provides an explanation for failure or error.\n\nOnly used for `outcome` of `failure` or `error`.\n","type":"string","uniqueKey":"oneOf.3.reason","typeLabel":"string"},"warnings":{"description":" An array of strings indicating possible issues with the certificate\n\n * `none of the provided fingerprints match`: No fingerprints matched.\n * `string not found in snapshot`: A required page scan text was not found.\n * `string found in snapshot`: A forbidden page scan text was found.\n","items":{"enum":["none of the provided fingerprints match","string not found in snapshot","string found in snapshot"],"type":"string","uniqueKey":"oneOf.3.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"type":"array","uniqueKey":"oneOf.3.warnings","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"oneOf.3","typeLabel":"InsightsResponse · object"}],"uniqueKey":"","typeLabel":"ConsentClaimResponse · object | ConsentAndInsightsClaimResponse · object | RetainResponse · object | InsightsResponse · object"},"examples":{"Example":{"title":"Example","value":{"fingerprints":{"matching":["c4a8e7fe184993964ae81380e91579015306838a","d511850d569bcd7802c30f54de34bb9f2b31eede"],"non_matching":["d511850d569bcd7802c30f54de34bb9f2b31eed1"]},"is_masked":false,"masked_cert_url":"https://example.com/1145b610ac97aa9f92d7cd2195446eac5e67ce53","outcome":"success","scans":{"forbidden_found":["Enim sit amet venenatis"],"forbidden_not_found":["Est velit egestas"],"required_found":["lorem ipsum dolor"],"required_not_found":["Ad qui aperiri"]},"warnings":[]}}},"exampleType":"generated"}},"description":"Claim Created Response","exampleType":"generated"},"1233aa7b-f20b-4d40-9211-250272cd7efb":{"content":{"application/json":{"schema":{"example":{"errors":{"detail":"Malformed certificate id"},"message":"Malformed certificate id","outcome":"error","reason":"Malformed certificate id"},"properties":{"errors":{"properties":{"detail":{"type":"string","uniqueKey":"errors.detail","typeLabel":"string"}},"type":"object","isRequired":true,"uniqueKey":"errors","typeLabel":"object"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["errors","message","outcome","reason"],"title":"BadRequest","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.BadRequest","uniqueKey":"","typeLabel":"BadRequest · object"},"examples":{"Example":{"title":"Example","value":{"errors":{"detail":"Malformed certificate id"},"message":"Malformed certificate id","outcome":"error","reason":"Malformed certificate id"}}},"exampleType":"generated"}},"description":"Malformed Certificate URL","exampleType":"generated"},"1ecf8ab8-2fe4-41b0-95ac-31009402e0cb":{"content":{"application/json":{"schema":{"example":{"errors":{"detail":"Unauthorized"},"message":"Unauthorized","outcome":"error","reason":"Unauthorized"},"properties":{"errors":{"properties":{"detail":{"type":"string","uniqueKey":"errors.detail","typeLabel":"string"}},"type":"object","isRequired":true,"uniqueKey":"errors","typeLabel":"object"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["errors","message","outcome","reason"],"title":"Unauthorized","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.Unauthorized","uniqueKey":"","typeLabel":"Unauthorized · object"},"examples":{"Example":{"title":"Example","value":{"errors":{"detail":"Unauthorized"},"message":"Unauthorized","outcome":"error","reason":"Unauthorized"}}},"exampleType":"generated"}},"description":"Unauthorized","exampleType":"generated"},"58651966-eda9-4b2e-8322-c5da1e924871":{"content":{"application/json":{"schema":{"example":{"errors":{"detail":"Account is inactive"},"message":"Account is inactive","outcome":"error","reason":"Account is inactive"},"properties":{"errors":{"properties":{"detail":{"type":"string","uniqueKey":"errors.detail","typeLabel":"string"}},"type":"object","isRequired":true,"uniqueKey":"errors","typeLabel":"object"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["errors","message","outcome","reason"],"title":"PaymentRequired","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.PaymentRequired","uniqueKey":"","typeLabel":"PaymentRequired · object"},"examples":{"Example":{"title":"Example","value":{"errors":{"detail":"Account is inactive"},"message":"Account is inactive","outcome":"error","reason":"Account is inactive"}}},"exampleType":"generated"}},"description":"Account is inactive or out of funds","exampleType":"generated"},"e7575fd9-933d-462e-acd7-2a2ea030f9dd":{"content":{"application/json":{"schema":{"example":{"outcome":"error","reason":"TrustedForm certificate has expired or could not be found"},"properties":{"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["outcome","reason"],"title":"NotFound","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.NotFound","uniqueKey":"","typeLabel":"NotFound · object"},"examples":{"Example":{"title":"Example","value":{"outcome":"error","reason":"TrustedForm certificate has expired or could not be found"}}},"exampleType":"generated"}},"description":"TrustedForm certificate has expired or could not be found","exampleType":"generated"},"c61fb00b-24a2-422d-abe4-14ff75528806":{"content":{"application/json":{"schema":{"example":{"outcome":"error","reason":"Certificate is not claimable"},"properties":{"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["outcome","reason"],"title":"MethodNotAllowed","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.MethodNotAllowed","uniqueKey":"","typeLabel":"MethodNotAllowed · object"},"examples":{"Example":{"title":"Example","value":{"outcome":"error","reason":"Certificate is not claimable"}}},"exampleType":"generated"}},"description":"Attempted to claim a 'sandboxed' certificate","exampleType":"generated"},"cf72cd7c-b10d-47a2-9b43-5216cb896743":{"content":{"application/json":{"schema":{"example":{"outcome":"error","reason":"Certificate has been claimed too many times"},"properties":{"outcome":{"type":"string","isRequired":true,"uniqueKey":"outcome","typeLabel":"string"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["outcome","reason"],"title":"UnprocessableEntity","type":"object","x-struct":"Elixir.ClaimerWeb.Schemas.UnprocessableEntity","uniqueKey":"","typeLabel":"UnprocessableEntity · object"},"examples":{"Example":{"title":"Example","value":{"outcome":"error","reason":"Certificate has been claimed too many times"}}},"exampleType":"generated"}},"description":"The certificate has been claimed too many times","exampleType":"generated"}},"security":{},"servers":{"371b2407-45a8-41eb-be2b-d0e5a4677c60":{"description":"The base URL for production.","url":"https://cert.trustedform.com","variables":{}}}},"originalFileLocation":"api-reference/trustedform_v3.json"},"subdomain":"activeprospectinc","siteName":"ActiveProspect Developer Documentation","title":"Claiming a Certificate - ActiveProspect Developer Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-14T14:14:47.288Z","originalFileLocation":"api-reference/claiming-certificates/claiming-a-certificate.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"TrustedForm account holders who are receiving certified leads can use the TrustedForm API to claim the certificate provided with each lead. Doing so 1. Verifies the legitimacy of the certificate 2. Stores the certificate for future reference and 3. Provides programmatic access to the information shown on the certificate To claim a certificate using the TrustedForm API, send an HTTP POST request to the certificate URL sent by your publisher. Do not make a request unless the URL starts with https://cert.trustedform.com, otherwise you may expose your TrustedForm credentials to someone else - Use a POST request — any other type of request will not claim the certificate - Use the Accept: application/json request header - Use the Content-Type: application/json or Content-Type: application/x-www-form-urlencoded header, and encode the request body accordingly. - In the Authorization header, use the API key provided on the \u0026quot;Settings\u0026quot; tab in the TrustedForm Application and the username \u0026#x27;API\u0026#x27;. ### Page Scanning As part of the claiming process, it\u0026#x27;s often required that certain language either exists or doesn\u0026#x27;t exist on the page. For example, you may want to ensure certain consent language exists. As another example, you may want to ensure other language does not exist, such as \u0026quot;free iPhone\u0026quot;. #### Page Scanning Params You can use the required_scan_terms and forbidden_scan_terms parameters. - required_scan_terms: Use this parameter to scan for language you want to ensure exist on the page. - forbidden_scan_terms: Use this parameter to scan for language you want to ensure does not exist on the page. Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways: 1. Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[] 2. Use wildcards in the consent language. 3. Use templates. You can use a mixture of all three. #### Wildcards Use {{}} in the consent language you wish to scan for as a wildcard. For Example, passing \u0026quot;on behalf of {{}} at the telephone number\u0026quot; will match \u0026quot;on behalf of Mortgage Acme at the telephone number\u0026quot;. Like using exact language, scans using wildcards can be sent in as an array. #### Templating Templating is different than other versions of page scanning in that you must 1) send it as JSON (i.e. Content-type of application/json); 2) provide a list of key/values to use in the template. If we were to use the example from above, we might use the following templates: json { \u0026quot;required_scan_terms\u0026quot;: [ { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the telephone number\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;} ] }, { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the {{contact_method}}\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;fax number\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;} ] } ] } #### Scan Delimiters When using wildcards in page scans and page scan templates, the default method is to surround the wildcard or template key with \u0026quot;handlebar\u0026quot; braces ({{}}). If that conflicts with your system, you can provide your own delimiter to use. Currently, TrustedForm only allows homogeneous delimiters (i.e. the beginning and end are the same character(s)) such as **, |, or even +++. ### Sandboxed Certificates Certificates created with the sandbox flag set to true cannot be claimed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ActiveProspect Developer Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Claiming a Certificate - ActiveProspect Developer Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"TrustedForm account holders who are receiving certified leads can use the TrustedForm API to claim the certificate provided with each lead. Doing so 1. Verifies the legitimacy of the certificate 2. Stores the certificate for future reference and 3. Provides programmatic access to the information shown on the certificate To claim a certificate using the TrustedForm API, send an HTTP POST request to the certificate URL sent by your publisher. Do not make a request unless the URL starts with https://cert.trustedform.com, otherwise you may expose your TrustedForm credentials to someone else - Use a POST request — any other type of request will not claim the certificate - Use the Accept: application/json request header - Use the Content-Type: application/json or Content-Type: application/x-www-form-urlencoded header, and encode the request body accordingly. - In the Authorization header, use the API key provided on the \u0026quot;Settings\u0026quot; tab in the TrustedForm Application and the username \u0026#x27;API\u0026#x27;. ### Page Scanning As part of the claiming process, it\u0026#x27;s often required that certain language either exists or doesn\u0026#x27;t exist on the page. For example, you may want to ensure certain consent language exists. As another example, you may want to ensure other language does not exist, such as \u0026quot;free iPhone\u0026quot;. #### Page Scanning Params You can use the required_scan_terms and forbidden_scan_terms parameters. - required_scan_terms: Use this parameter to scan for language you want to ensure exist on the page. - forbidden_scan_terms: Use this parameter to scan for language you want to ensure does not exist on the page. Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways: 1. Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[] 2. Use wildcards in the consent language. 3. Use templates. You can use a mixture of all three. #### Wildcards Use {{}} in the consent language you wish to scan for as a wildcard. For Example, passing \u0026quot;on behalf of {{}} at the telephone number\u0026quot; will match \u0026quot;on behalf of Mortgage Acme at the telephone number\u0026quot;. Like using exact language, scans using wildcards can be sent in as an array. #### Templating Templating is different than other versions of page scanning in that you must 1) send it as JSON (i.e. Content-type of application/json); 2) provide a list of key/values to use in the template. If we were to use the example from above, we might use the following templates: json { \u0026quot;required_scan_terms\u0026quot;: [ { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the telephone number\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;} ] }, { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the {{contact_method}}\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;fax number\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;} ] } ] } #### Scan Delimiters When using wildcards in page scans and page scan templates, the default method is to surround the wildcard or template key with \u0026quot;handlebar\u0026quot; braces ({{}}). If that conflicts with your system, you can provide your own delimiter to use. Currently, TrustedForm only allows homogeneous delimiters (i.e. the beginning and end are the same character(s)) such as **, |, or even +++. ### Sandboxed Certificates Certificates created with the sandbox flag set to true cannot be claimed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ActiveProspect Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://activeprospectinc.mintlify.app/_mintlify/api/og/v2?division=Claiming+Certificates\u0026amp;title=Claiming+a+Certificate\u0026amp;description=TrustedForm+account+holders+who+are+receiving+certified+leads+can+use+the%0ATrustedForm+API+to+claim+the+certificate+provided+with+each+lead.+Doing+so%0A%0A1.+Verifie\u0026amp;theme=82b92e625aa25be6cc045629\u0026amp;signature=c4e33e4d87e0d266ed295ec01815371c24d39babb2f14657f8e9c2caa2f4837d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Claiming a Certificate - ActiveProspect Developer Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"TrustedForm account holders who are receiving certified leads can use the TrustedForm API to claim the certificate provided with each lead. Doing so 1. Verifies the legitimacy of the certificate 2. Stores the certificate for future reference and 3. Provides programmatic access to the information shown on the certificate To claim a certificate using the TrustedForm API, send an HTTP POST request to the certificate URL sent by your publisher. Do not make a request unless the URL starts with https://cert.trustedform.com, otherwise you may expose your TrustedForm credentials to someone else - Use a POST request — any other type of request will not claim the certificate - Use the Accept: application/json request header - Use the Content-Type: application/json or Content-Type: application/x-www-form-urlencoded header, and encode the request body accordingly. - In the Authorization header, use the API key provided on the \u0026quot;Settings\u0026quot; tab in the TrustedForm Application and the username \u0026#x27;API\u0026#x27;. ### Page Scanning As part of the claiming process, it\u0026#x27;s often required that certain language either exists or doesn\u0026#x27;t exist on the page. For example, you may want to ensure certain consent language exists. As another example, you may want to ensure other language does not exist, such as \u0026quot;free iPhone\u0026quot;. #### Page Scanning Params You can use the required_scan_terms and forbidden_scan_terms parameters. - required_scan_terms: Use this parameter to scan for language you want to ensure exist on the page. - forbidden_scan_terms: Use this parameter to scan for language you want to ensure does not exist on the page. Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways: 1. Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[] 2. Use wildcards in the consent language. 3. Use templates. You can use a mixture of all three. #### Wildcards Use {{}} in the consent language you wish to scan for as a wildcard. For Example, passing \u0026quot;on behalf of {{}} at the telephone number\u0026quot; will match \u0026quot;on behalf of Mortgage Acme at the telephone number\u0026quot;. Like using exact language, scans using wildcards can be sent in as an array. #### Templating Templating is different than other versions of page scanning in that you must 1) send it as JSON (i.e. Content-type of application/json); 2) provide a list of key/values to use in the template. If we were to use the example from above, we might use the following templates: json { \u0026quot;required_scan_terms\u0026quot;: [ { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the telephone number\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;} ] }, { \u0026quot;template\u0026quot;: \u0026quot;on behalf of {{company}} at the {{contact_method}}\u0026quot;, \u0026quot;variables\u0026quot;: [ {\u0026quot;company\u0026quot;: \u0026quot;Mortgage Acme\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;fax number\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Mortgage\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;}, {\u0026quot;company\u0026quot;: \u0026quot;Acme Co.\u0026quot;, \u0026quot;contact_method\u0026quot;: \u0026quot;email\u0026quot;} ] } ] } #### Scan Delimiters When using wildcards in page scans and page scan templates, the default method is to surround the wildcard or template key with \u0026quot;handlebar\u0026quot; braces ({{}}). If that conflicts with your system, you can provide your own delimiter to use. Currently, TrustedForm only allows homogeneous delimiters (i.e. the beginning and end are the same character(s)) such as **, |, or even +++. ### Sandboxed Certificates Certificates created with the sandbox flag set to true cannot be claimed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://activeprospectinc.mintlify.app/_mintlify/api/og/v2?division=Claiming+Certificates\u0026amp;title=Claiming+a+Certificate\u0026amp;description=TrustedForm+account+holders+who+are+receiving+certified+leads+can+use+the%0ATrustedForm+API+to+claim+the+certificate+provided+with+each+lead.+Doing+so%0A%0A1.+Verifie\u0026amp;theme=82b92e625aa25be6cc045629\u0026amp;signature=c4e33e4d87e0d266ed295ec01815371c24d39babb2f14657f8e9c2caa2f4837d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/activeprospectinc/-voIGRv_PaCQr-Wj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ActiveProspect Developer Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#22a7f0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/claiming-certificates/claiming-a-certificate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.activeprospect.com/#organization\",\"name\":\"ActiveProspect Developer Documentation\",\"url\":\"https://developers.activeprospect.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/activeprospectinc/ttzTIJYOTNQPAJMy/logo/activeprospect_logo.svg?fit=max\u0026auto=format\u0026n=ttzTIJYOTNQPAJMy\u0026q=85\u0026s=9c7503c7631642aa1f7288ae35cc02cc\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.activeprospect.com#website\",\"name\":\"ActiveProspect Developer Documentation\",\"url\":\"https://developers.activeprospect.com\",\"publisher\":{\"@id\":\"https://developers.activeprospect.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate#webpage\",\"url\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate\",\"name\":\"Claiming a Certificate\",\"description\":\"TrustedForm account holders who are receiving certified leads can use the TrustedForm API to claim the certificate provided with each lead. Doing so 1. Verifies the legitimacy of the certificate 2. Stores the certificate for future reference and 3. Provides programmatic access to the information shown on the certificate To claim a certificate using the TrustedForm API, send an HTTP POST request to the certificate URL sent by your publisher. Do not make a request unless the URL starts with https://cert.trustedform.com, otherwise you may expose your TrustedForm credentials to someone else - Use a POST request — any other type of request will not claim the certificate - Use the Accept: application/json request header - Use the Content-Type: application/json or Content-Type: application/x-www-form-urlencoded header, and encode the request body accordingly. - In the Authorization header, use the API key provided on the \\\"Settings\\\" tab in the TrustedForm Application and the username 'API'. ### Page Scanning As part of the claiming process, it's often required that certain language either exists or doesn't exist on the page. For example, you may want to ensure certain consent language exists. As another example, you may want to ensure other language does not exist, such as \\\"free iPhone\\\". #### Page Scanning Params You can use the required_scan_terms and forbidden_scan_terms parameters. - required_scan_terms: Use this parameter to scan for language you want to ensure exist on the page. - forbidden_scan_terms: Use this parameter to scan for language you want to ensure does not exist on the page. Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways: 1. Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[] 2. Use wildcards in the consent language. 3. Use templates. You can use a mixture of all three. #### Wildcards Use {{}} in the consent language you wish to scan for as a wildcard. For Example, passing \\\"on behalf of {{}} at the telephone number\\\" will match \\\"on behalf of Mortgage Acme at the telephone number\\\". Like using exact language, scans using wildcards can be sent in as an array. #### Templating Templating is different than other versions of page scanning in that you must 1) send it as JSON (i.e. Content-type of application/json); 2) provide a list of key/values to use in the template. If we were to use the example from above, we might use the following templates: json { \\\"required_scan_terms\\\": [ { \\\"template\\\": \\\"on behalf of {{company}} at the telephone number\\\", \\\"variables\\\": [ {\\\"company\\\": \\\"Mortgage Acme\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\"}, {\\\"company\\\": \\\"Acme Co.\\\"} ] }, { \\\"template\\\": \\\"on behalf of {{company}} at the {{contact_method}}\\\", \\\"variables\\\": [ {\\\"company\\\": \\\"Mortgage Acme\\\", \\\"contact_method\\\": \\\"email\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\", \\\"contact_method\\\": \\\"fax number\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\", \\\"contact_method\\\": \\\"email\\\"}, {\\\"company\\\": \\\"Acme Co.\\\", \\\"contact_method\\\": \\\"email\\\"} ] } ] } #### Scan Delimiters When using wildcards in page scans and page scan templates, the default method is to surround the wildcard or template key with \\\"handlebar\\\" braces ({{}}). If that conflicts with your system, you can provide your own delimiter to use. Currently, TrustedForm only allows homogeneous delimiters (i.e. the beginning and end are the same character(s)) such as **, |, or even +++. ### Sandboxed Certificates Certificates created with the sandbox flag set to true cannot be claimed.\",\"dateModified\":\"2026-04-14T14:14:47.288Z\",\"isPartOf\":{\"@id\":\"https://developers.activeprospect.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Documentation\",\"item\":\"https://developers.activeprospect.com/pages/trustedform/authentication\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TrustedForm API 3.0\",\"item\":\"https://developers.activeprospect.com/api-reference/trustedform/v3/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Claiming a Certificate\",\"item\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate#apireference\",\"headline\":\"Claiming a Certificate\",\"name\":\"Claiming a Certificate\",\"description\":\"TrustedForm account holders who are receiving certified leads can use the TrustedForm API to claim the certificate provided with each lead. Doing so 1. Verifies the legitimacy of the certificate 2. Stores the certificate for future reference and 3. Provides programmatic access to the information shown on the certificate To claim a certificate using the TrustedForm API, send an HTTP POST request to the certificate URL sent by your publisher. Do not make a request unless the URL starts with https://cert.trustedform.com, otherwise you may expose your TrustedForm credentials to someone else - Use a POST request — any other type of request will not claim the certificate - Use the Accept: application/json request header - Use the Content-Type: application/json or Content-Type: application/x-www-form-urlencoded header, and encode the request body accordingly. - In the Authorization header, use the API key provided on the \\\"Settings\\\" tab in the TrustedForm Application and the username 'API'. ### Page Scanning As part of the claiming process, it's often required that certain language either exists or doesn't exist on the page. For example, you may want to ensure certain consent language exists. As another example, you may want to ensure other language does not exist, such as \\\"free iPhone\\\". #### Page Scanning Params You can use the required_scan_terms and forbidden_scan_terms parameters. - required_scan_terms: Use this parameter to scan for language you want to ensure exist on the page. - forbidden_scan_terms: Use this parameter to scan for language you want to ensure does not exist on the page. Often, you will want to scan against a variety of possible texts. The TrustedForm Claiming API enables you to do this in three ways: 1. Send the variations as a list using required_scan_terms[] or forbidden_scan_terms[] 2. Use wildcards in the consent language. 3. Use templates. You can use a mixture of all three. #### Wildcards Use {{}} in the consent language you wish to scan for as a wildcard. For Example, passing \\\"on behalf of {{}} at the telephone number\\\" will match \\\"on behalf of Mortgage Acme at the telephone number\\\". Like using exact language, scans using wildcards can be sent in as an array. #### Templating Templating is different than other versions of page scanning in that you must 1) send it as JSON (i.e. Content-type of application/json); 2) provide a list of key/values to use in the template. If we were to use the example from above, we might use the following templates: json { \\\"required_scan_terms\\\": [ { \\\"template\\\": \\\"on behalf of {{company}} at the telephone number\\\", \\\"variables\\\": [ {\\\"company\\\": \\\"Mortgage Acme\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\"}, {\\\"company\\\": \\\"Acme Co.\\\"} ] }, { \\\"template\\\": \\\"on behalf of {{company}} at the {{contact_method}}\\\", \\\"variables\\\": [ {\\\"company\\\": \\\"Mortgage Acme\\\", \\\"contact_method\\\": \\\"email\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\", \\\"contact_method\\\": \\\"fax number\\\"}, {\\\"company\\\": \\\"Acme Mortgage\\\", \\\"contact_method\\\": \\\"email\\\"}, {\\\"company\\\": \\\"Acme Co.\\\", \\\"contact_method\\\": \\\"email\\\"} ] } ] } #### Scan Delimiters When using wildcards in page scans and page scan templates, the default method is to surround the wildcard or template key with \\\"handlebar\\\" braces ({{}}). If that conflicts with your system, you can provide your own delimiter to use. Currently, TrustedForm only allows homogeneous delimiters (i.e. the beginning and end are the same character(s)) such as **, |, or even +++. ### Sandboxed Certificates Certificates created with the sandbox flag set to true cannot be claimed.\",\"url\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate\",\"mainEntityOfPage\":{\"@id\":\"https://developers.activeprospect.com/api-reference/claiming-certificates/claiming-a-certificate#webpage\"},\"dateModified\":\"2026-04-14T14:14:47.288Z\",\"publisher\":{\"@id\":\"https://developers.activeprospect.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.activeprospect.com#website\"}}]}\u003c/script>","siteName":"ActiveProspect Developer Documentation","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":""}]},{"tab":"TrustedForm","pages":[{"title":"Getting Started","href":"/pages/trustedform/getting-started"},{"title":"Implementing the TrustedForm Certify Web SDK","href":"/pages/trustedform/implementing-trustedform-certify"},{"title":"Adding TrustedForm Consent Tags","href":"/pages/trustedform/consent-tagging"},{"group":"API Documentation","pages":[{"title":"Authentication","href":"/pages/trustedform/authentication"},{"group":"TrustedForm API 4.0","pages":[{"group":"Certificate URL","root":{"title":"Certificate URL","href":"/api-reference/trustedform/v4/certificate-url"},"pages":[{"title":"Run Certificate Operations","deprecated":null,"version":null,"openapi":"/api-reference/claims_api-v4.yaml post /{cert_id}","href":"/api-reference/certificate-url/run-certificate-operations"}]},{"group":"Operations","root":{"title":"Operations","href":"/api-reference/trustedform/v4/operations"},"pages":[{"group":"Match Lead","root":{"title":"Match Lead","href":"/api-reference/trustedform/v4/operations/match-lead"},"pages":[{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/MatchLeadParameters"},{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/MatchLeadResult"}]},{"group":"Retain","root":{"title":"Retain","href":"/api-reference/trustedform/v4/operations/retain"},"pages":[{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/RetainParameters"},{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/RetainResult"}]},{"group":"Insights","root":{"title":"Insights","href":"/api-reference/trustedform/v4/operations/insights"},"pages":[{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/InsightsParameters"},{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/InsightsResult"}]},{"group":"Verify","root":{"title":"Verify","href":"/api-reference/trustedform/v4/operations/verify"},"pages":[{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/VerifyParameters"},{"title":null,"href":"/api-reference/trustedform/v4/operations/schemas/VerifyResult"}]}]},{"group":"Certificate","pages":[{"title":"Types","href":"/api-reference/trustedform/v4/certificate/types"},{"title":"Sending on Ping","href":"/api-reference/trustedform/v4/certificate/sending-on-ping"}]}]},{"title":"Validate API","href":"/pages/trustedform/validating-certificates"},{"group":"TrustedForm API 3.0","pages":[{"title":"Overview","href":"/api-reference/trustedform/v3/overview"},{"group":"Retrieving Insights","pages":[{"title":"Retrieve Certificate Insights","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id_}","href":"/api-reference/retrieving-insights/retrieve-certificate-insights"}]},{"group":"Viewing Certificates","pages":[{"title":"Viewing a Certificate","description":"When you claim a certificate, TrustedForm returns either a \"consent\" or\n\"consent+data\" JSON response depending on your subscription. You can\n\"view\" this same response by sending a `GET` request to the same endpoint.\n\nThe following list provides examples of when you might want to use this\nendpoint:\n\n- You were unable to capture the initial response\n- You need to validate if you've claimed the certificate\n\n","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json get /{cert_id}","href":"/api-reference/viewing-certificates/viewing-a-certificate"}]},{"group":"Claiming Certificates","pages":[{"title":"Claiming a Certificate","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id}","href":"/api-reference/claiming-certificates/claiming-a-certificate"}]},{"group":"TrustedForm Certificate Check-in","pages":[{"title":"Check-in","description":"Check-in supports various actions for a TrustedForm Certificate (e.g.\nextending the claim period on certificates).\n\nFailing to make the authenticated API call within the [standard claim\nperiod](https://community.activeprospect.com/questions/4077147) (72 hours of\ngenerating the lead) will result in the irretrievable deletion of the\ncertificate.\n","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id}/check_in","href":"/api-reference/trustedform-certificate-check-in/check-in"}]},{"group":"Ping","pages":[{"title":"Retrieving Ping Data","deprecated":true,"version":null,"openapi":"/api-reference/trustedform_v3.json post /{cert_id}/ping","href":"/api-reference/ping/retrieving-ping-data"},{"title":"Generate Ping URL","deprecated":true,"version":null,"openapi":"/api-reference/trustedform_v3.json get /{cert_id}/ping_url","href":"/api-reference/ping/generate-ping-url"}]}]},{"group":"TrustedForm API v2.0","pages":[{"title":"Overview","href":"/api-reference/trustedform/v2/overview"},{"group":"Ping","pages":[{"title":"Retrieve Ping Data","deprecated":true,"version":null,"openapi":"/api-reference/trustedform_v2.yaml get /{cert_id}/ping","href":"/api-reference/ping/retrieve-ping-data"}]},{"group":"Claiming Certificates","pages":[{"title":"Claiming Certificates","deprecated":null,"version":null,"openapi":"/api-reference/trustedform_v2.yaml post /{cert_id}","href":"/api-reference/claiming-certificates/claiming-certificates"}]}]}]}]},{"tab":"LeadConduit","pages":[{"title":"LeadConduit","href":"/api-reference/leadconduit"}]}]},"basePath":"","title":"Claiming a Certificate - ActiveProspect Developer Documentation","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}