Download OpenAPI specification:Download
Creating New Users:
Direct API
User API
EFX API
When creating creating a new user:
In the test environment it is important that you use the User Test Identity provided to you verbatim. You may change the email address and phone number ONLY
Be sure to save the userId when Registering a New User or you will not be able to generate a returning token for the user
Once you create a user the identity information is hashed and used to verify if the same identity is being re-enrolled.
On Register New User - change the email to your email.
On Register New User & User Identity - change the phone number to your mobile phone number or you won't receive the SMS messages.
Using the Phone Verify, Send Mobile Code, Verify Mobile Code method, the code in the test system passes through,
For the Get Identity Quiz and Verify Identity Quiz methods, you will need to find the correct answers and update the Verify Identity Quiz body accordingly to successfully authenticate using those methods.
When registering a new user, be sure to save the userId or you will not be able to log that user in later.
REMEMBER - you MUST use the test user data EXACTLY as it is provided. Only the phone number and email should be changed.
Returning Users:
Webhooks are available to notify you when an alert (or other notifications) comes in so that you can message users in whatever fashion you wish to return to your site.
To get started, please provide us a URL endpoint to push the webhook to.
The basic JSON for the web hook will look like the following:
[{
id: "String - Webhook ID, UUID format",
type: "String - Webhook Type, see possible values below",
user_id: "String - StitchCredit user ID, UUID format",
host_id: "String - The host configuration generating the webhook, UUID format",
time: "long - Linux epoch, seconds since 1/1/1970",
error_code: "String - used to report host errors, future use at the moment",
error_msg: "String - error code details"
alert_id: "String - id for retrieving more details when available",
alert_date: "Date - the date/time the alert was reported",
alert_source: "String - name of the institution reporting when available"
}]
When a webhook is received, a response is needed.
Responses with a status other than true will cause the webhook to be resent.
[{
hook_id: "the ID of the webhook",
status: true | false
}]
Webhook Type Values | |
---|---|
ACCNEW | New Account Created (only sent when created via web, not direct) |
IDFAIL | Identity Failed (user identification process failed) |
ACCREG | Account Registered (user passed identification and is registered for data) |
ACCREGFAIL | Account Registration Failed (user passed identification, but was unable to register for data) |
ACCCLOSED | Account Closed (only sent when completed via web, not direct) |
ACCLOCKED | Account Locked Out (account is temporarily locked out) |
ACCLOGINFAIL | Login Failure (when user authentication fails, web only) |
ACCALERT | Account Alert (when credit alert notifications, both daily and real-time) |
SCOREREF | User Score has been refreshed |
REPORTREF | User Report has been refreshed |
ERROR | Error (report important issues that may be of interest) |
TEST | Test (testing notification) |
Additional webhooks may be added without notice
Once your host is configured you can use Webhook Test to send a test webhook for a user on demand.
"Consumer Credit - Test API.postman_collection.json" includes some webhook tests to help you understand and develop your solution. See the Test API scripts for additional documentation.
<script>
//this just throws in a default ID if one isn't provided on the query string
const id = document.location.search.length > 0 ? document.location.search.split('&')[0].split('=')[1] : '988a6fd7-7297-4757-8b96-907daa14a1f6';
console.log("ID: ",id);
console.log("Loading Message Listener...");
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if(event && event.source && event.data) {
// You only need to implement the types that are important/relevant to your use case.
if(event.data.type === 'AUTH_REQUIRED') {
//The iframe clident will post this message when a valid preauth token does not exist.
//Posting a proper message with a preauth token in response allows the client to continue seemlessly.
//console.log("Auth Required Event Received");
const es = event.source;
//this code uses a test endpoint on the server to provide a preauth-token for any user ID without the usual hurdles.
//This is ONLY for testing and does not exist in the production environment.
getData("https://efx-dev.stitchcredit.com/api/test/preauth-token/"+id, function() {
const token = JSON.parse(this.responseText).token;
console.log("Status: ", this.status, ", token: ", token);
es.postMessage({type: 'PREAUTH', token: this.status == 200 ? token : null},"*");
});
}
else if(event.data.type === 'REG_STARTED') {
const es = event.source;
//only valid for full web implementation, Direct API already creates the customer, so this will never happen in those instances
// (new Date().valueOf()) - is used to generate a new email ID on the fly for testing purposes
es.postMessage({type: 'REG', data: {fname:"Gertrude", lname:"Harkenreadeo", email: "test+" + (new Date().valueOf()) + "@test.com"}},"*");
}
else if(event.data.type === 'IDENTITY_STARTED') {
const es = event.source;
//You could use this function to pre-populate the given fields. DoB and SSN will never be prepopulated as it violates compliance
// new Date().valueOf().toString() - generates a unique number for street2 to ensure each run goes through the full identity process, remove to test sequential sign up of the same user
es.postMessage({type: 'IDENTITY', data: {street1:"305 Linden Av", street2: new Date().valueOf().toString(), city: "Atlanta", state: "GA", zip: "30316", mobile: "0000000000"}},"*");
}
else if(event.data.type === 'LOGIN_SUCCESSFUL') {
console.log("User succesfully logged in");
}
else if(event.data.type === 'LOGIN_FAILED') {
//if you see this message more than a few times in a row, it's likely an issue
//typically this will only occur for full web implementations, not Direct API
console.log("User login failed");
}
else if(event.data.type === 'USER_ENROLLED') {
//User successfully completed identity and has been enrolled for consumer data
console.log("User enrollment successful");
}
else if(event.data.type === 'IDENTITY_FAILED') {
//Identity process failed, user is likely "stuck" as they cannot continue
console.log("User identity failure");
}
else if(event.data.type === 'SERVICE_FAILURE') {
//Identity process failed most likely due to a service outage, but the user is stuck as they cannot continue without passing identity
console.log("Identity service failure");
}
}
function getData(req, action) {
var xhr = new XMLHttpRequest();
xhr.responesType = 'json';
xhr.onload = action;
xhr.open("GET", req);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
}
</script>
Direct Tokens
Preauth Tokens
User Tokens
Mobile Verification Tokens
1 hour
30 seconds
15 minutes
15 minutes
Refresh Tokens are valid after 15 minutes, and expire after 30 minutes
Customer Tokens are valid for 1 day (not used in Direct API)
Action Tokens are valid for 10 minutes (not used in Direct API)
Sample Embed Page:
To embed into HTML, create an iframe as shown in the following example with its src reflecting this color-coded URL:
"https://efx-dev.stitchcredit.com/api/users/start?key=[API-KEY]&ocf=[FLAGS]&oct=[COLOR]"
Embed example:
<html>
<head>
<title>StitchCredit</title>
<meta name="description" content="StitchCredit Consumer Credit Reports"/>
<link rel="icon" href="/favicon.ico">
<style>
body { background: #F9FAFB; }
#sc-iframe { border:none;overflow:hidden;padding:0px;margin:0px;
width:100%;height:100vh;z-index:1;position:absolute;left:0;top:0; }
</style>
</head>
<body>
<iframe id="sc-iframe" src="https://efx-dev.stitchcredit.com/api/users/start?key=[API-KEY]&ocf=[flags]&oct=[color]" width=“100%” height=“100vh”></iframe>
</body>
</html>
Direct API End-points:
"https://efx-dev.stitchcredit.com/login-direct?key=[API-KEY]&token=[PREAUTH-TOKEN]&ocf=[FLAGS]&oct=[COLOR]"
Embed example:
<html>
<head>
<title>StitchCredit</title>
<meta name="description" content="StitchCredit Consumer Credit Reports"/>
<link rel="icon" href="/favicon.ico">
<style>
body { background: #F9FAFB; }
#sc-iframe { border:none;overflow:hidden;padding:0px;margin:0px;
width:100%;height:100vh;z-index:1;position:absolute;left:0;top:0; }
</style>
</head>
<body>
<iframe id="sc-iframe" src=“https://efx-dev.stitchcredit.com/login-direct?key=[API-KEY]&token=[PREAUTH-TOKEN]&ocf=[FLAGS]&oct=[COLOR]” width=“100%” height=“100vh” frameborder=“0”></iframe>
</body>
</html>
Add your credentials to "apikey" and "secret".
(keep these credentials a secret)
secret required | string |
apikey required | string |
{- "secret": "{{SECRET}}",
- "apikey": "{{API_KEY}}"
}
Don't store the token across sessions.
Use the userId from the previous session to generate a new userId and a new preauth token.
email required | string |
fname required | string |
lname required | string |
mobile required | string |
{- "email": "{{USER_EMAIL}}",
- "fname": "{{USER_FNAME}}",
- "lname": "{{USER_LNAME}}",
- "mobile": "{{USER_MOBILE}}"
}
type required | string |
user_id required | string |
time required | string |
error_code required | string |
error_msg required | string |
[- {
- "type": "ERROR",
- "user_id": "d9126b53-48ea-40b7-933d-3bc6084f287e",
- "time": "2020-07-26T05:36:00.000Z",
- "error_code": "SC999",
- "error_msg": "Test Error"
}
]
direct_sample.html:
<html>
<head>
<title>StitchCredit</title>
<link rel="icon" href="/favicon.ico" />
<meta name="description" content="StitchCredit Consumer Credit Reports" />
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width"
/>
<style>
html,
body {
margin: 0;
padding: 0;
position: relative;
background: #eeeeee;
}
#sc-iframe {
margin: 0;
padding: 0;
z-index: 1;
width: 100%;
height: 100vh;
border: none;
overflow: hidden;
}
</style>
</head>
<body>
<iframe
id="sc-iframe" allowTransparency="true"
src="https://efx-dev.stitchcredit.com/login-direct?key=5a10e0d7-1dc8-4325-929f-d0d131990527&ocf=2039"
></iframe>
<script>
//this just throws in a default ID if one isn't provided on the query string
const id = document.location.search.length > 0 ? document.location.search.split('&')[0].split('=')[1] : '988a6fd7-7297-4757-8b96-907daa14a1f6';
console.log("ID: ",id);
console.log("Loading Message Listener...");
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if(event && event.source && event.data) {
// You only need to implement the types that are important/relevant to your use case.
if(event.data.type === 'AUTH_REQUIRED') {
//The iframe clident will post this message when a valid preauth token does not exist.
//Posting a proper message with a preauth token in response allows the client to continue seemlessly.
//console.log("Auth Required Event Received");
const es = event.source;
//this code uses a test endpoint on the server to provide a preauth-token for any user ID without the usual hurdles.
//This is ONLY for testing and does not exist in the production environment.
getData("https://efx-dev.stitchcredit.com/api/test/preauth-token/"+id, function() {
const token = JSON.parse(this.responseText).token;
console.log("Status: ", this.status, ", token: ", token);
es.postMessage({type: 'PREAUTH', token: this.status == 200 ? token : null},"*");
});
}
else if(event.data.type === 'REG_STARTED') {
const es = event.source;
//only valid for full web implementation, Direct API already creates the customer, so this will never happen in those instances
// (new Date().valueOf()) - is used to generate a new email ID on the fly for testing purposes
es.postMessage({type: 'REG', data: {fname:"Gertrude", lname:"Harkenreadeo", email: "test+" + (new Date().valueOf()) + "@test.com"}},"*");
}
else if(event.data.type === 'IDENTITY_STARTED') {
const es = event.source;
//You could use this function to pre-populate the given fields. DoB and SSN will never be prepopulated as it violates compliance
// new Date().valueOf().toString() - generates a unique number for street2 to ensure each run goes through the full identity process, remove to test sequential sign up of the same user
es.postMessage({type: 'IDENTITY', data: {street1:"305 Linden Av", street2: new Date().valueOf().toString(), city: "Atlanta", state: "GA", zip: "30316", mobile: "0000000000"}},"*");
}
else if(event.data.type === 'LOGIN_SUCCESSFUL') {
console.log("User succesfully logged in");
}
else if(event.data.type === 'LOGIN_FAILED') {
//if you see this message more than a few times in a row, it's likely an issue
//typically this will only occur for full web implementations, not Direct API
console.log("User login failed");
}
else if(event.data.type === 'USER_ENROLLED') {
//User successfully completed identity and has been enrolled for consumer data
console.log("User enrollment successful");
}
else if(event.data.type === 'IDENTITY_FAILED') {
//Identity process failed, user is likely "stuck" as they cannot continue
console.log("User identity failure");
}
else if(event.data.type === 'SERVICE_FAILURE') {
//Identity process failed most likely due to a service outage, but the user is stuck as they cannot continue without passing identity
console.log("Identity service failure");
}
}
function getData(req, action) {
var xhr = new XMLHttpRequest();
xhr.responesType = 'json';
xhr.onload = action;
xhr.open("GET", req);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
}
</script>
</body>
</html>
aio_sample.html:
<html>
<head>
<title>StitchCredit</title>
<link rel="icon" href="/favicon.ico" />
<meta name="description" content="StitchCredit Consumer Credit Reports" />
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width"
/>
<style>
html,
body {
margin: 0;
padding: 0;
position: relative;
background: #eeeeee;
}
#sc-iframe {
margin: 0;
padding: 0;
z-index: 1;
width: 100%;
height: 100vh;
border: none;
overflow: hidden;
}
</style>
</head>
<body>
<iframe
id="sc-iframe" allowTransparency="true"
src="https://efx-dev.stitchcredit.com/login-aio?key=5a10e0d7-1dc8-4325-929f-d0d131990527&ocf=2039"
></iframe>
<script>
//this just throws in a default ID if one isn't provided on the query string
const id = document.location.search.length > 0 ? document.location.search.split('&')[0].split('=')[1] : '988a6fd7-7297-4757-8b96-907daa14a1f6';
console.log("ID: ",id);
console.log("Loading Message Listener...");
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if(event && event.source && event.data) {
// You only need to implement the types that are important/relevant to your use case.
if(event.data.type === 'AUTH_REQUIRED') {
//The iframe clident will post this message when a valid preauth token does not exist.
//Posting a proper message with a preauth token in response allows the client to continue seemlessly.
//console.log("Auth Required Event Received");
const es = event.source;
//this code uses a test endpoint on the server to provide a preauth-token for any user ID without the usual hurdles.
//This is ONLY for testing and does not exist in the production environment.
getData("https://efx-dev.stitchcredit.com/api/test/preauth-token/"+id, function() {
const token = JSON.parse(this.responseText).token;
console.log("Status: ", this.status, ", token: ", token);
es.postMessage({type: 'PREAUTH', token: this.status == 200 ? token : null},"*");
});
}
else if(event.data.type === 'REG_STARTED') {
const es = event.source;
//only valid for full web implementation, Direct API already creates the customer, so this will never happen in those instances
// (new Date().valueOf()) - is used to generate a new email ID on the fly for testing purposes
es.postMessage({type: 'REG', data: {fname:"Gertrude", lname:"Harkenreadeo", email: "test+" + (new Date().valueOf()) + "@test.com"}},"*");
}
else if(event.data.type === 'IDENTITY_STARTED') {
const es = event.source;
//You could use this function to pre-populate the given fields. DoB and SSN will never be prepopulated as it violates compliance
// new Date().valueOf().toString() - generates a unique number for street2 to ensure each run goes through the full identity process, remove to test sequential sign up of the same user
es.postMessage({type: 'IDENTITY', data: {street1:"305 Linden Av", street2: new Date().valueOf().toString(), city: "Atlanta", state: "GA", zip: "30316", mobile: "0000000000"}},"*");
}
else if(event.data.type === 'LOGIN_SUCCESSFUL') {
console.log("User succesfully logged in");
}
else if(event.data.type === 'LOGIN_FAILED') {
//if you see this message more than a few times in a row, it's likely an issue
//typically this will only occur for full web implementations, not Direct API
console.log("User login failed");
}
else if(event.data.type === 'USER_ENROLLED') {
//User successfully completed identity and has been enrolled for consumer data
console.log("User enrollment successful");
}
else if(event.data.type === 'IDENTITY_FAILED') {
//Identity process failed, user is likely "stuck" as they cannot continue
console.log("User identity failure");
}
else if(event.data.type === 'SERVICE_FAILURE') {
//Identity process failed most likely due to a service outage, but the user is stuck as they cannot continue without passing identity
console.log("Identity service failure");
}
}
function getData(req, action) {
var xhr = new XMLHttpRequest();
xhr.responesType = 'json';
xhr.onload = action;
xhr.open("GET", req);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
}
</script>
</body>
</html>
tile_sample.html:
<html>
<head>
<title>StitchCredit</title>
<link rel="icon" href="/favicon.ico" />
<meta name="description" content="StitchCredit Consumer Credit Reports" />
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width"
/>
<style>
html,
body {
margin: 0;
padding: 0;
position: relative;
background: #eeeeee;
}
#sc-iframe {
display:block;
margin: 0 auto;
padding: 0;
z-index: 1;
width: 500px;
height: 675px;
border: none;
overflow: hidden;
}
</style>
</head>
<body>
<iframe
id="sc-iframe" allowTransaparency="true"
src="https://efx-dev.stitchcredit.com/login-tile?key=5a10e0d7-1dc8-4325-929f-d0d131990527&ocf=2039"
></iframe>
<script>
//this just throws in a default ID if one isn't provided on the query string
const id = document.location.search.length > 0 ? document.location.search.split('&')[0].split('=')[1] : '988a6fd7-7297-4757-8b96-907daa14a1f6';
console.log("ID: ",id);
console.log("Loading Message Listener...");
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if(event && event.source && event.data) {
// You only need to implement the types that are important/relevant to your use case.
if(event.data.type === 'AUTH_REQUIRED') {
//The iframe clident will post this message when a valid preauth token does not exist.
//Posting a proper message with a preauth token in response allows the client to continue seemlessly.
//console.log("Auth Required Event Received");
const es = event.source;
//this code uses a test endpoint on the server to provide a preauth-token for any user ID without the usual hurdles.
//This is ONLY for testing and does not exist in the production environment.
getData("https://efx-dev.stitchcredit.com/api/test/preauth-token/"+id, function() {
const token = JSON.parse(this.responseText).token;
console.log("Status: ", this.status, ", token: ", token);
es.postMessage({type: 'PREAUTH', token: this.status == 200 ? token : null},"*");
});
}
else if(event.data.type === 'REG_STARTED') {
const es = event.source;
//only valid for full web implementation, Direct API already creates the customer, so this will never happen in those instances
// (new Date().valueOf()) - is used to generate a new email ID on the fly for testing purposes
es.postMessage({type: 'REG', data: {fname:"Gertrude", lname:"Harkenreadeo", email: "test+" + (new Date().valueOf()) + "@test.com"}},"*");
}
else if(event.data.type === 'IDENTITY_STARTED') {
const es = event.source;
//You could use this function to pre-populate the given fields. DoB and SSN will never be prepopulated as it violates compliance
// new Date().valueOf().toString() - generates a unique number for street2 to ensure each run goes through the full identity process, remove to test sequential sign up of the same user
es.postMessage({type: 'IDENTITY', data: {street1:"305 Linden Av", street2: new Date().valueOf().toString(), city: "Atlanta", state: "GA", zip: "30316", mobile: "0000000000"}},"*");
}
else if(event.data.type === 'LOGIN_SUCCESSFUL') {
console.log("User succesfully logged in");
}
else if(event.data.type === 'LOGIN_FAILED') {
//if you see this message more than a few times in a row, it's likely an issue
//typically this will only occur for full web implementations, not Direct API
console.log("User login failed");
}
else if(event.data.type === 'USER_ENROLLED') {
//User successfully completed identity and has been enrolled for consumer data
console.log("User enrollment successful");
}
else if(event.data.type === 'IDENTITY_FAILED') {
//Identity process failed, user is likely "stuck" as they cannot continue
console.log("User identity failure");
}
else if(event.data.type === 'SERVICE_FAILURE') {
//Identity process failed most likely due to a service outage, but the user is stuck as they cannot continue without passing identity
console.log("Identity service failure");
}
}
function getData(req, action) {
var xhr = new XMLHttpRequest();
xhr.responesType = 'json';
xhr.onload = action;
xhr.open("GET", req);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
}
</script>
</body>
</html>
tile_sample_score_only.html:
<html>
<head>
<title>StitchCredit</title>
<link rel="icon" href="/favicon.ico" />
<meta name="description" content="StitchCredit Consumer Credit Reports" />
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width"
/>
<style>
html,
body {
margin: 0;
padding: 0;
position: relative;
background: #eeeeee;
}
#sc-iframe {
display:block;
margin: 0 auto;
padding: 0;
z-index: 1;
width: 500px;
height: 550px;
border: none;
overflow: hidden;
}
</style>
</head>
<body>
<iframe
id="sc-iframe" allowTransaparency="true"
src="https://efx-dev.stitchcredit.com/login-tile?key=5a10e0d7-1dc8-4325-929f-d0d131990527&ocf=1"
></iframe>
<script>
//this just throws in a default ID if one isn't provided on the query string
const id = document.location.search.length > 0 ? document.location.search.split('&')[0].split('=')[1] : '988a6fd7-7297-4757-8b96-907daa14a1f6';
console.log("ID: ",id);
console.log("Loading Message Listener...");
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if(event && event.source && event.data) {
// You only need to implement the types that are important/relevant to your use case.
if(event.data.type === 'AUTH_REQUIRED') {
//The iframe clident will post this message when a valid preauth token does not exist.
//Posting a proper message with a preauth token in response allows the client to continue seemlessly.
//console.log("Auth Required Event Received");
const es = event.source;
//this code uses a test endpoint on the server to provide a preauth-token for any user ID without the usual hurdles.
//This is ONLY for testing and does not exist in the production environment.
getData("https://efx-dev.stitchcredit.com/api/test/preauth-token/"+id, function() {
const token = JSON.parse(this.responseText).token;
console.log("Status: ", this.status, ", token: ", token);
es.postMessage({type: 'PREAUTH', token: this.status == 200 ? token : null},"*");
});
}
else if(event.data.type === 'REG_STARTED') {
const es = event.source;
//only valid for full web implementation, Direct API already creates the customer, so this will never happen in those instances
// (new Date().valueOf()) - is used to generate a new email ID on the fly for testing purposes
es.postMessage({type: 'REG', data: {fname:"Gertrude", lname:"Harkenreadeo", email: "test+" + (new Date().valueOf()) + "@test.com"}},"*");
}
else if(event.data.type === 'IDENTITY_STARTED') {
const es = event.source;
//You could use this function to pre-populate the given fields. DoB and SSN will never be prepopulated as it violates compliance
// new Date().valueOf().toString() - generates a unique number for street2 to ensure each run goes through the full identity process, remove to test sequential sign up of the same user
es.postMessage({type: 'IDENTITY', data: {street1:"305 Linden Av", street2: new Date().valueOf().toString(), city: "Atlanta", state: "GA", zip: "30316", mobile: "0000000000"}},"*");
}
else if(event.data.type === 'LOGIN_SUCCESSFUL') {
console.log("User succesfully logged in");
}
else if(event.data.type === 'LOGIN_FAILED') {
//if you see this message more than a few times in a row, it's likely an issue
//typically this will only occur for full web implementations, not Direct API
console.log("User login failed");
}
else if(event.data.type === 'USER_ENROLLED') {
//User successfully completed identity and has been enrolled for consumer data
console.log("User enrollment successful");
}
else if(event.data.type === 'IDENTITY_FAILED') {
//Identity process failed, user is likely "stuck" as they cannot continue
console.log("User identity failure");
}
else if(event.data.type === 'SERVICE_FAILURE') {
//Identity process failed most likely due to a service outage, but the user is stuck as they cannot continue without passing identity
console.log("Identity service failure");
}
}
function getData(req, action) {
var xhr = new XMLHttpRequest();
xhr.responesType = 'json';
xhr.onload = action;
xhr.open("GET", req);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
}
</script>
</body>
</html>
Creating New Users:
Direct API
User API
EFX API
When creating creating a new user:
In the test environment it is important that you use the User Test Identity provided to you verbatim. You may change the email address and phone number ONLY
Be sure to save the userId when Registering a New User or you will not be able to generate a returning token for the user
Once you create a user the identity information is hashed and used to verify if the same identity is being re-enrolled.
On Register New User - change the email to your email.
On Register New User & User Identity - change the phone number to your mobile phone number or you won't receive the SMS messages.
Using the Phone Verify, Send Mobile Code, Verify Mobile Code method, the code in the test system passes through,
For the Get Identity Quiz and Verify Identity Quiz methods, you will need to find the correct answers and update the Verify Identity Quiz body accordingly to successfully authenticate using those methods.
When registering a new user, be sure to save the userId or you will not be able to log that user in later.
REMEMBER - you MUST use the test user data EXACTLY as it is provided. Only the phone number and email should be changed.
Returning Users:
By clicking "Register” and creating an account you accept StitchCredit’s Terms of Use and Privacy Policy. StitchCredit does not maintain critical personal data, much less sell or otherwise disclose your personal information to anyone else. You may opt-out of email correspondence, except confirmation Emails, which often contain important information about your account.
Consumers must be notified and express specific consent to access third party data to verify identity
Required Identity Consent language:
You understand that by clicking “Continue”, you are explicitly agreeing to and providing “written instructions” to StitchCredit under the Fair Credit Reporting Act to obtain my credit information from one or more of the three nationwide credit reporting agencies. Third-party sources, including your mobile carrier may be used to verify your identity. You authorize StitchCredit to obtain such information for you to confirm your identity, and, for as long as you are a member of StitchCredit, to provide you with your credit information. You may elect to terminate your account and this authorization at any time.
Mobile Identity Consent language:
We will attempt to verify your identity by sending a text with a one-time code to your mobile phone number ending in xxxx.
Message and data rates may apply.
By clicking "Register” and creating an account you accept StitchCredit’s Terms of Use and Privacy Policy. StitchCredit does not maintain critical personal data, much less sell or otherwise disclose your personal information to anyone else. You may opt-out of email correspondence, except confirmation Emails, which often contain important information about your account.
You understand that by clicking “Continue”, you are explicitly agreeing to and providing “written instructions” to StitchCredit under the Fair Credit Reporting Act to obtain my credit information from one or more of the three nationwide credit reporting agencies. Third-party sources, including your mobile carrier may be used to verify your identity. You authorize StitchCredit to obtain such information for you to confirm your identity, and, for as long as you are a member of StitchCredit, to provide you with your credit information. You may elect to terminate your account and this authorization at any time.
We will attempt to verify your identity by sending a text with a one-time code to your mobile phone number ending in xxxx.
Message and data rates may apply.
- Equifax® ID Restoration
- Has your identity been compromised?
- A specialist will help you work through the process.
- Once your issues are resolved, we continue to monitor the situation for three months.
- Call today so that we may help you verify and begin resolving any discrepancies.
- Call 1-877-368-4940 today to get started
Add your credentials to "apikey" and "secret".
(keep these credentials a secret)
secret required | string |
apikey required | string |
{- "secret": "{{SECRET}}",
- "apikey": "{{API_KEY}}"
}
Don't store the token across sessions.
Use the userId from the previous session to generate a new userId and a new preauth token.
email required | string |
fname required | string |
lname required | string |
mobile required | string |
{- "email": "{{USER_EMAIL}}",
- "fname": "{{USER_FNAME}}",
- "lname": "{{USER_LNAME}}",
- "mobile": "{{USER_MOBILE}}"
}
This request uses userId (from the response of /direct/user-reg) to generate a User Token.
The User Token is a bearer token that must be passed to the consumer's device so that the consumer app can directly complete User API requests.
The Preauth Token needed for this request is also generated by /direct/user-reg or /direct/preauth-token
paToken required | string |
ssn required | string |
dob required | string |
mobile required | string |
street1 required | string |
street2 required | string |
city required | string |
state required | string |
zip required | string |
{- "ssn": "{{USER_SSN}}",
- "dob": "{{USER_DOB}}",
- "mobile": "{{USER_MOBILE}}",
- "street1": "{{USER_STREET1}}",
- "street2": "{{USER_STREET2}}",
- "city": "{{USER_CITY}}",
- "state": "{{USER_STATE}}",
- "zip": "{{USER_ZIP}}"
}
key required | string |
id required | string |
required | Array of objects (Answer) |
{- "key": "{{qTransactionKey}}",
- "id": "{{qzId}}",
- "answers": [
- {
- "qid": 1,
- "aid": 3
}, - {
- "qid": 2,
- "aid": 3
}, - {
- "qid": 3,
- "aid": 3
}
]
}
efx_url required | string Example: https://api.efx-url.com/consumer-data |
scope required | string |
grant_type required | string |
api_key required | string |
client_assertion required | string |
{- "access_token": "87e22d35-0089-4613-809b-62f248c2c978",
- "token_type": "bearer",
- "expires_in": 610,
- "scope": "read write"
}
type required | string |
user_id required | string |
time required | string |
error_code required | string |
error_msg required | string |
[- {
- "type": "ERROR",
- "user_id": "d9126b53-48ea-40b7-933d-3bc6084f287e",
- "time": "2020-07-26T05:36:00.000Z",
- "error_code": "SC999",
- "error_msg": "Test Error"
}
]
Add your credentials to "apikey" and "secret".
(keep these credentials a secret)
secret required | string |
apikey required | string |
{- "secret": "{{SECRET}}",
- "apikey": "{{API_KEY}}"
}
Don't store the token across sessions.
Use the userId from the previous session to generate a new userId and a new preauth token.
email required | string |
fname required | string |
lname required | string |
mobile required | string |
{- "email": "{{USER_EMAIL}}",
- "fname": "{{USER_FNAME}}",
- "lname": "{{USER_LNAME}}",
- "mobile": "{{USER_MOBILE}}"
}
This request uses userId (from the response of /direct/user-reg) to generate a User Token.
The User Token is a bearer token that must be passed to the consumer's device so that the consumer app can directly complete User API requests.
The Preauth Token needed for this request is also generated by /direct/user-reg or /direct/preauth-token
paToken required | string |
ssn required | string |
dob required | string |
mobile required | string |
street1 required | string |
street2 required | string |
city required | string |
state required | string |
zip required | string |
{- "ssn": "{{USER_SSN}}",
- "dob": "{{USER_DOB}}",
- "mobile": "{{USER_MOBILE}}",
- "street1": "{{USER_STREET1}}",
- "street2": "{{USER_STREET2}}",
- "city": "{{USER_CITY}}",
- "state": "{{USER_STATE}}",
- "zip": "{{USER_ZIP}}"
}
efx_url required | string Example: https://api.efx-url.com/consumer-data |
scope required | string |
grant_type required | string |
api_key required | string |
client_assertion required | string |
{- "access_token": "87e22d35-0089-4613-809b-62f248c2c978",
- "token_type": "bearer",
- "expires_in": 610,
- "scope": "read write"
}
Add your credentials to "apikey" and "secret".
(keep these credentials a secret)
secret required | string |
apikey required | string |
{- "secret": "{{SECRET}}",
- "apikey": "{{API_KEY}}"
}
This request uses userId (from the response of /direct/user-reg) to generate a User Token.
The User Token is a bearer token that must be passed to the consumer's device so that the consumer app can directly complete User API requests.
The Preauth Token needed for this request is also generated by /direct/user-reg or /direct/preauth-token
paToken required | string |
efx_url required | string Example: https://api.efx-url.com/consumer-data |
scope required | string |
grant_type required | string |
api_key required | string |
client_assertion required | string |
{- "access_token": "87e22d35-0089-4613-809b-62f248c2c978",
- "token_type": "bearer",
- "expires_in": 610,
- "scope": "read write"
}
Add your credentials to "apikey" and "secret".
(keep these credentials a secret)
secret required | string |
apikey required | string |
{- "secret": "{{SECRET}}",
- "apikey": "{{API_KEY}}"
}
Don't store the token across sessions.
Use the userId from the previous session to generate a new userId and a new preauth token.
email required | string |
fname required | string |
lname required | string |
mobile required | string |
{- "email": "{{USER_EMAIL}}",
- "fname": "{{USER_FNAME}}",
- "lname": "{{USER_LNAME}}",
- "mobile": "{{USER_MOBILE}}"
}
This request uses userId (from the response of /direct/user-reg) to generate a User Token.
The User Token is a bearer token that must be passed to the consumer's device so that the consumer app can directly complete User API requests.
The Preauth Token needed for this request is also generated by /direct/user-reg or /direct/preauth-token
paToken required | string |
ssn required | string |
dob required | string |
mobile required | string |
street1 required | string |
street2 required | string |
city required | string |
state required | string |
zip required | string |
{- "ssn": "{{USER_SSN}}",
- "dob": "{{USER_DOB}}",
- "mobile": "{{USER_MOBILE}}",
- "street1": "{{USER_STREET1}}",
- "street2": "{{USER_STREET2}}",
- "city": "{{USER_CITY}}",
- "state": "{{USER_STATE}}",
- "zip": "{{USER_ZIP}}"
}
key required | string |
id required | string |
required | Array of objects (Answer) |
{- "key": "{{qTransactionKey}}",
- "id": "{{qzId}}",
- "answers": [
- {
- "qid": 1,
- "aid": 3
}, - {
- "qid": 2,
- "aid": 3
}, - {
- "qid": 3,
- "aid": 3
}
]
}
efx_url required | string Example: https://api.efx-url.com/consumer-data |
scope required | string |
grant_type required | string |
api_key required | string |
client_assertion required | string |
{- "access_token": "87e22d35-0089-4613-809b-62f248c2c978",
- "token_type": "bearer",
- "expires_in": 610,
- "scope": "read write"
}
type required | string |
user_id required | string |
time required | string |
error_code required | string |
error_msg required | string |
[- {
- "type": "ERROR",
- "user_id": "d9126b53-48ea-40b7-933d-3bc6084f287e",
- "time": "2020-07-26T05:36:00.000Z",
- "error_code": "SC999",
- "error_msg": "Test Error"
}
]