Simulate Underwriting Decisions
Overview
Do not enter production data in the Highnote Test environment, which is for exploring features and training. Use only dummy or test data.
Highnote provides simulations for credit application underwriting. This is useful for testing your integration and credit policy, configuring notifications, and simulating the cardholder experience.
This guide provides an overview for simulating underwriting decisions using the Test environment.
Assign a credit line
Your credit policy may allow for dynamic allocation of credit limits on approved applications. You can test various credit line assignments on approved applications using the Test environment.
Simulating credit line assignment requires two steps:
- Onboard an account holder and provide a simulation value for the
annualRevenueortotalAnnualIncomefields. To onboard an account holder, see Onboard an account holder. - Open an application for the account holder. When the application is approved, the credit line will reflect the simulation value used during onboarding. To open an application, see Open an application.
Simulation values
The following table provides simulation values for simulating credit line assignment:
| Account holder type | Field | Simulation value | Credit line assignment |
|---|---|---|---|
| US business account holder | annualRevenue | $1,000,000 | $1,000 |
annualRevenue | $10,000,000 | $10,000 | |
annualRevenue | $100,000,000 | $100,000 | |
| US person account holder | totalAnnualIncome | $1,000,000 | $1,000 |
totalAnnualIncome | $10,000,000 | $10,000 | |
totalAnnualIncome | $100,000,000 | $100,000 |
Lookup application
After simulating credit line assignment, you can use the following query to lookup the application to verify the credit line:
GetAccountHolderCardProductApplication
Query
query GetAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
name
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
currentCreditUnderwritingVerification {
__typename
status
decision {
... on UnderwriterPositiveDecision {
__typename
creditLine {
value
currencyCode
}
}
... on UnderwriterAdverseDecision {
__typename
adverseActionReasons {
code
description
}
}
}
decisionDate
}
}
}
updatedAt
createdAt
}
}
}
Variables
{
"id": "APPLICATION_ID"
}
Result
{
"data": {
"node": {
"id": "APPLICATION_ID",
"applicationState": {
"status": "APPROVED"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID",
"name": "Test Credit Consumer Charge"
},
"accountHolderSnapshot": {
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "PASSED",
"decision": {
"__typename": "UnderwriterPositiveDecision",
"creditLine": {
"value": 100000,
"currencyCode": "USD"
}
},
"decisionDate": "2024-06-13T19:59:00.022Z"
}
},
"updatedAt": "2024-01-01T00:00:00.000Z",
"createdAt": "2024-01-01T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 7
}
}
}
Deny application
While an application may have multiple reasons for being denied, Highnote only returns the primary adverse action reason. This reason must be provided to the account holder.
In the Test environment, opening applications for credit card products lets you test adverse action reasons for DENIED responses. Testing adverse action reasons consists of the following steps:
- Create a business or person account holder in your Test environment using an adverse action simulation value.
- Open an application for the account holder.
In both the Test and Live environments, a DENIED application may have one or more adverse action reasons, but only the primary reason is returned. For example, if a cardholder's identity cannot be verified (UNABLE_TO_VERIFY_IDENTITY), and they were denied because their credit score is too low (MIN_CREDIT_SCORE), Highnote only returns the primary reason: ``MIN_CREDIT_SCORE`.
Adverse action values
The following table provides adverse action values for simulating the denial of an account holder application:
| Field | Simulation value | Adverse action response code |
|---|---|---|
| US Business Account Holder | ||
legalBusinessName | FORCE-DECLINE | UNABLE_TO_VERIFY_IDENTITY Cannot verify applicant's identity |
annualRevenue | ||
$1.00 | INSUFFICIENT_INCOME Applicant's income is insufficient for the requested credit amount | |
$2.00 | DELINQUENT_CREDIT_OBLIGATIONS Applicant has delinquent past or present credit obligations | |
$5.00 | INSUFFICIENT_INCOME and DELINQUENT_CREDIT_OBLIGATIONS | |
$6.00 | MIN_YEARS_INCORPORATION Applicant does not meet the minimum length of business incorporation | |
| US Person Account Holder | ||
givenName | FORCE-DECLINE | UNABLE_TO_VERIFY_IDENTITY Cannot verify applicant's identity |
totalAnnualIncome | ||
$1.00 | INSUFFICIENT_INCOME Applicant's income is insufficient for the requested credit amount | |
$2.00 | DELINQUENT_CREDIT_OBLIGATIONS Applicant has delinquent past or present credit obligations | |
$3.00 | DECEASED Applicant is reported as deceased | |
$4.00 | UNABLE_TO_VERIFY_CREDIT_REFERENCES Applicant does not have a credit history | |
$5.00 | INSUFFICIENT_INCOME and DELINQUENT_CREDIT_OBLIGATIONS | |
$6.00 | BANKRUPTCY Applicant has a bankruptcy in their credit report | |
$7.00 | COLLECTIONS Applicant has a tradeline sent to collections in their credit report | |
$8.00 | EXCESSIVE_DEBT_OBLIGATIONS Applicant has excessive debt obligations | |
$9.00 | EXCESSIVE_OBLIGATIONS_TO_INCOME Applicant has excessive obligations to their income | |
$10.00 | LIMITED_CREDIT_EXPERIENCE Applicant has limited credit experience | |
$11.00 | MIN_CREDIT_SCORE Applicant’s credit score is below the acceptable level | |
$12.00 | RECENT_CREDIT_ACCOUNTS Applicant has opened too many credit account recently | |
$13.00 | RECENT_CREDIT_APPLICATIONS Applicant has too many recent credit inquiries | |
$14.00 | HIGH_UTILIZATION Applicant has a high credit utilization ratio | |
$15.00 | LIEN_POSITION Applicant does not meet line position requirement | |
$16.00 | LENGTH_OF_EMPLOYMENT Applicant’s length of employment is limited or unstable | |
$17.00 | LENGTH_OF_RESIDENCE Applicant’s length of time at residence is limited or unstable | |
$18.00 | UNACCEPTED_BUSINESS_INDUSTRY We do not offer credit to this industry | |
$19.00 | WITHDRAWN Applicant has withdrawn their card product application | |
$20.00 | UNABLE_TO_VERIFY_EMPLOYMENT Unable to verify applicant's employment | |
$21.00 | INCOMPLETE_IDENTITY_INFORMATION Incomplete identity information of owner | |
$22.00 | UNABLE_TO_VERIFY_IDENTITY Cannot verify the applicant's identity | |
$23.00 | UNABLE_TO_VERIFY_INCOME Cannot verify applicant’s income |
Credit report PII mismatch values
Some Credit Policies have Credit Bureau credit report Personally identifiable information (PII) verification enabled. The following table lists values for simulating outcomes that trigger a manual review due to PII mismatches.
| Field | Simulation value | PII code | Outcome |
|---|---|---|---|
totalAnnualIncome | $999996.00 | DOB_MISMATCH | Manual review |
totalAnnualIncome | $999997.00 | SSN_MISMATCH | Manual review |
totalAnnualIncome | $999998.00 | NAME_MISMATCH | Manual review |
totalAnnualIncome | $999999.00 | ADDRESS_MISMATCH | Manual review |
Lookup application adverse action
To automate your integration, use notification event CARD_PRODUCT_APPLICATION_DENIED to send notifications when an application is denied. See Account holder application status.
After simulating denial with adverse action reasons, use the following query to find a card product application:
GetAccountHolderCardProductApplication
Query
query GetAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
name
}
adverseActionReasons {
code
description
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
billingAddress {
streetAddress
}
currentVerification {
status
reason
adverseActionReasons {
code
description
}
}
dateOfBirth
currentCreditUnderwritingVerification {
__typename
status
decisionResults
reviewReasonDetails {
memo
reviewReason
}
decision {
__typename
... on UnderwriterPositiveDecision {
creditLine {
value
currencyCode
}
creditPlanTerms {
interest {
apr
}
creditPlan {
id
}
}
}
... on UnderwriterAdverseDecision {
adverseActionReasons {
code
description
__typename
}
}
}
decisionDate
}
}
}
applicationHistory {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
applicationState {
status
}
}
}
}
updatedAt
createdAt
}
}
}
Variables
{
"id": "APPLICATION_ID"
}
Result
{
"data": {
"node": {
"id": "ACCOUNT_HOLDER_APPLICATION_ID",
"applicationState": {
"status": "DENIED"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID",
"name": "Test Credit Consumer Charge"
},
"adverseActionReasons": [
{
"code": "DELINQUENT_CREDIT_OBLIGATIONS",
"description": "Delinquent past or present credit obligations"
},
{
"code": "INSUFFICIENT_INCOME",
"description": "Income insufficient for the amount of credit requested"
}
],
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID"
},
"billingAddress": {
"streetAddress": "123 Main Street"
},
"currentVerification": {
"status": "PASSED",
"reason": "PASSED",
"adverseActionReasons": null
},
"dateOfBirth": "1980-09-01",
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "DENIED",
"decisionResults": [
"NO_LIMIT_SET",
"CURRENT_DEBT_OBLIGATIONS",
"RECENT_CHARGE_OFF",
"RECENT_BANKRUPTCY"
],
"reviewReasonDetails": null,
"decision": {
"__typename": "UnderwriterAdverseDecision",
"adverseActionReasons": [
{
"code": "DELINQUENT_CREDIT_OBLIGATIONS",
"description": "Delinquent past or present credit obligations",
"__typename": "AdverseActionReason"
},
{
"code": "INSUFFICIENT_INCOME",
"description": "Income insufficient for the amount of credit requested",
"__typename": "AdverseActionReason"
}
]
},
"decisionDate": "2022-10-12T23:53:52.860Z"
}
},
"applicationHistory": {
"pageInfo": {
"startCursor": "start-cursor",
"endCursor": "end-cursor",
"hasNextPage": false,
"hasPreviousPage": false
},
"edges": [
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
}
]
},
"updatedAt": "2023-09-11T04:53:10.834Z",
"createdAt": "2023-09-11T04:52:54.162Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 35
}
}
}
Credit report inquiries
If your credit policy requires credit report inquiries, you must collect additional consent from the account holder during the card product application flow.
If you are not using collaborative application decisioning, your card product's credit policy is executed on your behalf by Highnote.
For credit policies that perform credit report inquiries, you must monitor and manage credit report freezes and fraud alerts for your account holders. Refer to the following to resolve credit report freezes and fraud alerts for your account holders:
- Credit report freezes: The account holder must contact the applicable credit bureau and remove the freeze on their credit report.
- Credit report fraud alerts: You must contact the account holder and verify their identity.
View credit score reason codes
For credit policies that use a credit bureau's risk score, use the following query to view an application's credit creditScoreReasons:
GetAccountHolderCardProductApplication
Query
query GetAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
name
}
adverseActionReasons {
code
description
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
accountHolderCurrent {
id
}
billingAddress {
streetAddress
}
currentVerification {
status
reason
adverseActionReasons {
code
description
}
}
dateOfBirth
currentCreditUnderwritingVerification {
__typename
status
decisionResults
reviewReasonDetails {
memo
reviewReason
}
creditScoreDetails {
creditBureau
creditReportPullDate
creditScoreModels {
creditScoreReasons
creditScore
creditScoreType
}
}
decision {
__typename
... on UnderwriterPositiveDecision {
creditLine {
value
currencyCode
}
creditPlanTerms {
interest {
apr
}
creditPlan {
id
}
}
}
... on UnderwriterAdverseDecision {
adverseActionReasons {
code
description
__typename
}
}
}
decisionDate
}
}
}
applicationHistory {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
applicationState {
status
}
}
}
}
updatedAt
createdAt
}
}
}
Variables
{
"id": "ap_1"
}
Result
{
"data": {
"node": {
"id": "ACCOUNT_HOLDER_APPLICATION_ID",
"applicationState": {
"status": "APPROVED"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID",
"name": "Test Credit Consumer Charge"
},
"adverseActionReasons": null,
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID"
},
"billingAddress": {
"streetAddress": "123 Main Street"
},
"currentVerification": {
"status": "PASSED",
"reason": "PASSED",
"adverseActionReasons": null
},
"dateOfBirth": "1980-09-01",
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "PASSED",
"decisionResults": [],
"creditScoreDetails": {
"creditBureau": "EXPERIAN",
"creditReportPullDate": "2025-10-08T16:44:19.089Z",
"creditScoreModels": [
{
"creditScore": "700",
"creditScoreType": "V4",
"creditScoreReasons": [
"Total of credit limits and loan amounts is too low"
]
}
]
},
"decision": {
"__typename": "UnderwriterAdverseDecision",
"creditLine": {
"value": 100000,
"currencyCode": "USD"
},
"adverseActionReasons": null
},
"decisionDate": "2022-10-12T23:53:52.860Z"
}
},
"applicationHistory": {
"pageInfo": {
"startCursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfY2Q2NThmMjBlNDg0NDQwY2E1ZWQ3ZmI4MjM5ZThhY2Q",
"endCursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfNDNhNjgxNWIyZDlkNDNjNWIwMjY2YTU5ZDYwMTRkYjQ",
"hasNextPage": false,
"hasPreviousPage": false
},
"edges": [
{
"cursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfY2Q2NThmMjBlNDg0NDQwY2E1ZWQ3ZmI4MjM5ZThhY2Q",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfYjRmN2I0NWZjYjY1NDM4MTlkMjVhYWI1ZjI1YjQ4MGQ",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfMDUxZDdmZGM4OWI3NDU1MDkwZjc1NGY5MmE1MmQzZmM",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "dD0yMDIzLTA5LTExVDA0JTNBNTIlM0E1NC4xNjIwMDAwMDBaJmk9YXBfNDNhNjgxNWIyZDlkNDNjNWIwMjY2YTU5ZDYwMTRkYjQ",
"node": {
"applicationState": {
"status": "PENDING"
}
}
}
]
},
"updatedAt": "2023-09-11T04:53:10.834Z",
"createdAt": "2023-09-11T04:52:54.162Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 35
}
}
}
Freezes, Flags, and Fraud Alerts
In some scenarios, account holders may have a freeze or fraud alert on their credit report, or be flagged for MLA eligibility. Using the Test environment, you can simulate a credit report freeze, fraud alert, or MLA flag on an application response. Simulating these scenarios requires the following steps:
-
Onboard an account holder and provide a simulation value (just below) for the
phoneNumberfield. See Onboard an account holder. -
Open an application for the account holder. When the application processes, it creates a fraud alert, credit report freeze, or MLA eligibility flag in the response payload.
Simulation values
The following table provides simulation values for creating an account holder to simulate credit freezes, credit report fraud alerts, and MLA eligibility. The same simulation values apply to both US business and person account holders:
| Field | Simulation value | Response |
|---|---|---|
phoneNumber | 1111111111 | CREDIT_REPORT_FREEZE |
phoneNumber | 2222222222 | CREDIT_REPORT_FRAUD_ALERT |
phoneNumber | 3333333333 | MLA_ELIGIBLE |
Simulate fraud alert
After creating an account holder using the CREDIT_REPORT_FRAUD_ALERT simulation value, use the following mutation to open an application. The fraud alert is noted in the response payload:
createAccountHolderCardProductApplication
Query
mutation createAccountHolderCardProductApplication(
$input: CreateAccountHolderCardProductApplicationInput!
) {
createAccountHolderCardProductApplication(input: $input) {
__typename
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
}
adverseActionReasons {
code
description
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
name {
givenName
familyName
}
billingAddress {
streetAddress
locality
region
countryCodeAlpha3
postalCode
}
currentVerification {
reason
results {
code
description
}
status
}
}
... on USBusinessAccountHolderSnapshot {
accountHolderCurrent {
id
}
primaryAuthorizedPerson {
currentVerification {
status
}
updatedAt
createdAt
}
businessProfile {
name {
legalBusinessName
doingBusinessAsName
}
updatedAt
createdAt
currentVerification {
status
adverseActionReasons {
code
description
}
}
currentCreditUnderwritingVerification {
__typename
status
reviewReasonDetails {
reviewReason
memo
}
decision {
... on UnderwriterPositiveDecision {
__typename
creditLine {
value
currencyCode
}
creditPlanTerms {
creditPlan {
__typename
id
}
interest {
apr
}
}
}
... on UnderwriterAdverseDecision {
__typename
adverseActionReasons {
code
description
}
}
}
decisionDate
decisionResults
}
ultimateBeneficialOwners {
currentVerification {
status
}
updatedAt
createdAt
}
}
}
}
updatedAt
createdAt
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "accountHolderId": "ACCOUNT_HOLDER_ID", "cardProductId": "CARD_PRODUCT_ID", "cardHolderAgreementConsent": { "primaryAuthorizedPersonId": "PRIMARY_AUTHORIZED_PERSON_ID", "consentTimestamp": "2021-12-22T17:10:55.662Z" }, "accountHolderCreditReportPullConsent": { "primaryAuthorizedPersonId": "PRIMARY_AUTHORIZED_PERSON_ID", "consentTimestamp": "2021-12-22T17:10:55.662Z" } } }
Result
{
"data": {
"createAccountHolderCardProductApplication": {
"__typename": "AccountHolderCardProductApplication",
"id": "APPLICATION_ID",
"applicationState": {
"status": "PENDING"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID"
},
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID"
},
"name": {
"givenName": "Gerry",
"familyName": "Wolfe"
},
"billingAddress": {
"streetAddress": "123 Main Street",
"locality": "Chicago",
"region": "IL",
"countryCodeAlpha3": "USA",
"postalCode": "60654"
},
"currentVerification": {
"reason": "PENDING",
"results": [],
"status": "PENDING"
},
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "IN_REVIEW",
"reviewReasonDetails": {
"reviewReason": "AWAITING_FRAUD_ALERT_REVIEW",
"memo": ""
},
"decision": {
"__typename": "UnderwriterPositiveDecision",
"creditLine": {
"value": 15000000,
"currencyCode": "USD"
},
"creditPlanTerms": {
"creditPlan": {
"__typename": "CreditPlan",
"id": "credit-plan-id"
},
"interest": {
"apr": 15.9
}
}
},
"decisionDate": "2022-10-12T23:53:52.860Z",
"decisionResults": [
"CREDIT_REPORT_FRAUD_ALERT"
]
}
},
"updatedAt": "2023-09-22T18:45:10.401Z",
"createdAt": "2023-09-22T18:45:10.186Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 19,
"limit": 100,
"remaining": 78
}
}
}
Simulate credit report freeze
After creating an account holder using the CREDIT_REPORT_FREEZE simulation value, use the following mutation to open an application. The credit report freeze is noted in the response payload:
createAccountHolderCardProductApplication
Query
mutation createAccountHolderCardProductApplication(
$input: CreateAccountHolderCardProductApplicationInput!
) {
createAccountHolderCardProductApplication(input: $input) {
__typename
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
}
adverseActionReasons {
code
description
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
name {
givenName
familyName
}
billingAddress {
streetAddress
locality
region
countryCodeAlpha3
postalCode
}
currentVerification {
reason
results {
code
description
}
status
}
}
... on USBusinessAccountHolderSnapshot {
accountHolderCurrent {
id
}
primaryAuthorizedPerson {
currentVerification {
status
}
updatedAt
createdAt
}
businessProfile {
name {
legalBusinessName
doingBusinessAsName
}
updatedAt
createdAt
currentVerification {
status
adverseActionReasons {
code
description
}
}
currentCreditUnderwritingVerification {
__typename
status
reviewReasonDetails {
reviewReason
memo
}
decision {
... on UnderwriterPositiveDecision {
__typename
creditLine {
value
currencyCode
}
creditPlanTerms {
creditPlan {
__typename
id
}
interest {
apr
}
}
}
... on UnderwriterAdverseDecision {
__typename
adverseActionReasons {
code
description
}
}
}
decisionDate
decisionResults
}
ultimateBeneficialOwners {
currentVerification {
status
}
updatedAt
createdAt
}
}
}
}
updatedAt
createdAt
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "accountHolderId": "ACCOUNT_HOLDER_ID", "cardProductId": "CARD_PRODUCT_ID", "cardHolderAgreementConsent": { "primaryAuthorizedPersonId": "PRIMARY_AUTHORIZED_PERSON_ID", "consentTimestamp": "2021-12-22T17:10:55.662Z" }, "accountHolderCreditReportPullConsent": { "primaryAuthorizedPersonId": "PRIMARY_AUTHORIZED_PERSON_ID", "consentTimestamp": "2021-12-22T17:10:55.662Z" } } }
Result
{
"data": {
"createAccountHolderCardProductApplication": {
"__typename": "AccountHolderCardProductApplication",
"id": "APPLICATION_ID",
"applicationState": {
"status": "PENDING"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID"
},
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID"
},
"name": {
"givenName": "Gerry",
"familyName": "Wolfe"
},
"billingAddress": {
"streetAddress": "123 Main Street",
"locality": "Chicago",
"region": "IL",
"countryCodeAlpha3": "USA",
"postalCode": "60654"
},
"currentVerification": {
"reason": "PENDING",
"results": [],
"status": "PENDING"
},
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "IN_REVIEW",
"reviewReasonDetails": {
"reviewReason": "AWAITING_FRAUD_ALERT_REVIEW",
"memo": ""
},
"decision": {
"__typename": "UnderwriterPositiveDecision",
"creditLine": {
"value": 15000000,
"currencyCode": "USD"
},
"creditPlanTerms": {
"creditPlan": {
"__typename": "CreditPlan",
"id": "credit-plan-id"
},
"interest": {
"apr": 15.9
}
}
},
"decisionDate": "2022-10-12T23:53:52.860Z",
"decisionResults": [
"CREDIT_REPORT_FRAUD_ALERT"
]
}
},
"updatedAt": "2023-09-22T18:45:10.401Z",
"createdAt": "2023-09-22T18:45:10.186Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 19,
"limit": 100,
"remaining": 78
}
}
}
Simulate MLA eligibility
After creating an account holder using the MLA_ELIGIBLE simulation value, use the following mutation to open an application.
Once a financial account is issued from the application, you can lookup the military status on the account. The MLA eligibility is noted in the response payload:
GetAccountHolderCardProductApplication
Query
query GetAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
name
}
adverseActionReasons {
code
description
}
applicationConfiguration {
applicantBillingCycleOverride {
billingCycleType
}
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
accountHolderCurrent {
id
}
billingAddress {
streetAddress
}
currentVerification {
status
reason
adverseActionReasons {
code
description
}
}
dateOfBirth
currentCreditUnderwritingVerification {
__typename
status
decisionResults
reviewReasonDetails {
memo
reviewReason
}
creditScoreDetails {
creditBureau
creditReportPullDate
creditScoreModels {
creditScore
creditScoreType
creditScoreReasons
}
}
decision {
__typename
... on UnderwriterPositiveDecision {
creditLine {
value
currencyCode
}
creditPlanTerms {
interest {
apr
}
creditPlan {
id
}
}
}
... on UnderwriterAdverseDecision {
adverseActionReasons {
code
description
__typename
}
}
}
decisionDate
}
}
}
applicationHistory {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
applicationState {
status
}
}
}
}
updatedAt
createdAt
}
}
}
Variables
{
"id": "ap_1"
}
Result
{
"data": {
"node": {
"id": "ap_22pcgmcaf52992ed97400e9e0edc2d4dfaf26b",
"applicationState": {
"status": "PENDING"
},
"cardProduct": {
"id": "pd_c60a8377fd0041cebaf26a89bbd9dfd8",
"name": "Test Credit Consumer Revolving"
},
"adverseActionReasons": null,
"applicationConfiguration": null,
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ps_ah01f4f4873da4684bbb857425e9650eecfb"
},
"billingAddress": {
"streetAddress": "123 Main Street"
},
"currentVerification": {
"status": "PASSED",
"reason": "PASSED",
"adverseActionReasons": null
},
"dateOfBirth": "1980-09-01",
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "IN_REVIEW",
"decisionResults": [
"MLA_ELIGIBLE",
"CREDIT_REPORT_FRAUD_ALERT"
],
"reviewReasonDetails": {
"memo": "",
"reviewReason": "AWAITING_FRAUD_ALERT_REVIEW"
},
"creditScoreDetails": {
"creditBureau": null,
"creditReportPullDate": "2025-10-08T16:44:19.089Z",
"creditScoreModels": []
},
"decision": {
"__typename": "UnderwriterPositiveDecision",
"creditLine": {
"value": 100000,
"currencyCode": "USD"
},
"creditPlanTerms": [
{
"interest": {
"apr": 10
},
"creditPlan": {
"id": "crppn_9836d4bc361748a8a9d2f70e0e8de3f7"
}
}
]
},
"decisionDate": "2025-10-08T16:44:19.089Z"
}
},
"applicationHistory": {
"pageInfo": {
"startCursor": "dD0yMDI1LTEwLTA4VDE2JTNBNDQlM0ExMS41NDkwMDAwMDBaJmk9YXBfMDdhZWYxY2QwZDdlNDdhYzk1MGFiOTkxM2I1ZDY4MDE",
"endCursor": "dD0yMDI1LTEwLTA4VDE2JTNBNDQlM0ExMS41NDkwMDAwMDBaJmk9YXBfMDdhZWYxY2QwZDdlNDdhYzk1MGFiOTkxM2I1ZDY4MDE",
"hasNextPage": false,
"hasPreviousPage": false
},
"edges": [
{
"cursor": "dD0yMDI1LTEwLTA4VDE2JTNBNDQlM0ExMS41NDkwMDAwMDBaJmk9YXBfMDdhZWYxY2QwZDdlNDdhYzk1MGFiOTkxM2I1ZDY4MDE",
"node": {
"applicationState": {
"status": "PENDING"
}
}
}
]
},
"updatedAt": "2025-10-08T16:44:15.355Z",
"createdAt": "2025-10-08T16:44:11.549Z"
}
},
"extensions": {
"requestId": "c93c1754-00e7-9745-ad36-785cfa6b568d",
"rateLimit": {
"cost": 43,
"limit": 2500,
"remaining": 2456,
"asOf": "2025-10-08T16:44:23.095Z",
"complexity": {
"limit": 2500,
"remaining": 2456,
"cost": 43
},
"count": {
"limit": 100,
"remaining": 98,
"cost": 1
}
}
}
}
Managing fraud alerts
Memos are now global. As a best practice, add context to your memos so they make sense when queried on different parts of an application.
When a credit report inquiry returns a CREDIT_REPORT_FRAUD_ALERT, indicating the the account holder may have a freeze on their credit report, you can use the following set of queries to:
- Find the account holder of an application.
- Verify account holder information on an application.
- Confirm the status of an updated application.
In the Highnote API, the memo field is now supported by a globalNote object that can be added and viewed anywhere across a card product application, not just the entity to which is was applied. Global notes are stored centrally and encrypted at rest.
With this added flexibility, consider adding context to your notes so that when you run a query on an unrelated part of the application, the note makes sense.
View fraud alert
Use the following query to lookup an application. The response's status and memo fields include account holder information that you can use to reach out to and verify the identity of the account holder:
GetAccountHolderCardProductApplication
Query
query GetAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
name
}
adverseActionReasons {
code
description
}
globalNotes {
... on GlobalNoteConnection {
edges {
node {
primaryEntity {
__typename
... on AccountHolderCardProductApplication {
id
}
}
createdBy {
... on User {
id
}
}
createdAt
message
}
}
}
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
}
accountHolderCurrent {
id
}
billingAddress {
streetAddress
}
currentVerification {
status
reason
adverseActionReasons {
code
description
}
}
dateOfBirth
currentCreditUnderwritingVerification {
__typename
status
decisionResults
reviewReasonDetails {
memo
reviewReason
}
decision {
__typename
... on UnderwriterPositiveDecision {
creditLine {
value
currencyCode
}
creditPlanTerms {
interest {
apr
}
creditPlan {
id
}
}
}
... on UnderwriterAdverseDecision {
adverseActionReasons {
code
description
__typename
}
}
}
decisionDate
}
}
}
applicationHistory {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
applicationState {
status
}
}
}
}
updatedAt
createdAt
}
}
}
Variables
{
"id": "APPLICATION_ID"
}
Result
{
"data": {
"node": {
"id": "ACCOUNT_HOLDER_APPLICATION_ID",
"applicationState": {
"status": "DENIED"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID",
"name": "Test Credit Consumer Charge"
},
"adverseActionReasons": [
{
"code": "DELINQUENT_CREDIT_OBLIGATIONS",
"description": "Delinquent past or present credit obligations"
},
{
"code": "INSUFFICIENT_INCOME",
"description": "Income insufficient for the amount of credit requested"
}
],
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID"
},
"billingAddress": {
"streetAddress": "123 Main Street"
},
"currentVerification": {
"status": "PASSED",
"reason": "PASSED",
"adverseActionReasons": null
},
"dateOfBirth": "1980-09-01",
"currentCreditUnderwritingVerification": {
"__typename": "CreditUnderwritingVerification",
"status": "DENIED",
"decisionResults": [
"NO_LIMIT_SET",
"CURRENT_DEBT_OBLIGATIONS",
"RECENT_CHARGE_OFF",
"RECENT_BANKRUPTCY"
],
"reviewReasonDetails": null,
"decision": {
"__typename": "UnderwriterAdverseDecision",
"adverseActionReasons": [
{
"code": "DELINQUENT_CREDIT_OBLIGATIONS",
"description": "Delinquent past or present credit obligations",
"__typename": "AdverseActionReason"
},
{
"code": "INSUFFICIENT_INCOME",
"description": "Income insufficient for the amount of credit requested",
"__typename": "AdverseActionReason"
}
]
},
"decisionDate": "2022-10-12T23:53:52.860Z"
}
},
"applicationHistory": {
"pageInfo": {
"startCursor": "start-cursor",
"endCursor": "end-cursor",
"hasNextPage": false,
"hasPreviousPage": false
},
"edges": [
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
},
{
"cursor": "some-cursor",
"node": {
"applicationState": {
"status": "PENDING"
}
}
}
]
},
"updatedAt": "2023-09-11T04:53:10.834Z",
"createdAt": "2023-09-11T04:52:54.162Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 35
}
}
}
Verify fraud alert
If an account holder has a fraud alert on their credit report, you must contact the account holder to verify that their name, date of birth, and address match that on the application. If the account holder can't verify the information provided on their application, the application will be denied.
Use the following mutation to verify an account holder for a fraud alert:
confirmVerificationOfCreditProductApplicationForFraudAlert
Query
mutation confirmVerificationOfCreditProductApplicationForFraudAlert(
$input: ConfirmVerificationOfCreditProductApplicationForFraudAlertInput!
) {
confirmVerificationOfCreditProductApplicationForFraudAlert(input: $input) {
... on AccountHolderCardProductApplication {
__typename
id
applicationState {
status
}
cardProduct {
id
}
globalNotes {
... on GlobalNoteConnection {
edges {
node {
primaryEntity {
__typename
... on AccountHolderCardProductApplication {
id
}
}
createdBy {
... on User {
id
}
}
createdAt
message
}
}
}
}
createdAt
updatedAt
}
}
}
Variables
{ "input": { "applicationId": "ACCOUNT_HOLDER_APPLICATION_ID", "verificationResult": { "accountHolderInitiatedApplication": true, "name": true, "dateOfBirth": true, "address": true }, "memo": "Fraud note" } }
Result
{
"data": {
"confirmVerificationOfCreditProductApplicationForFraudAlert": {
"__typename": "AccountHolderCardProductApplication",
"id": "ap_22pcgm57030a3e272d42e4bde2af68030537bc",
"applicationState": {
"status": "PENDING"
},
"cardProduct": {
"id": "pd_4b6dc5eed2224f339cd19f3cf2e266e2"
},
"creditReportFraudAlertVerificationResult": {
"accountHolderInitiatedApplication": true,
"name": true,
"dateOfBirth": true,
"address": true
},
"globalNotes": {
"edges": [
{
"node": {
"primaryEntity": {
"__typename": "AccountHolderCardProductApplication",
"id": "ap_22pcgm57030a3e272d42e4bde2af68030537bc"
},
"createdBy": {
"id": "ps_prcgm57030a3e272d42e4bde2af68030537bc"
},
"createdAt": "2025-02-14T18:25:59.684Z",
"message": "Fraud note"
}
}
]
},
"updatedAt": "2024-04-10T21:41:09.137Z",
"createdAt": "2024-04-10T21:37:56.455Z"
}
},
"extensions": {
"requestId": "5951d35e-0316-9e78-9acc-9aa2dbbbf1c0",
"rateLimit": {
"cost": 19,
"limit": 60060,
"remaining": 60004
}
}
}
Confirm unfrozen credit report
If the account holder has a freeze on their credit report, you must contact the account holder and instruct them to remove the freeze from their report. Once the account holder has confirmed they removed a freeze, you can use the following mutation to confirm and re-run the application decisioning workflow:
confirmCreditReportUnfrozen
Query
mutation confirmCreditReportUnfrozen(
$input: ConfirmCreditReportUnfrozenInput!
) {
confirmCreditReportUnfrozen(input: $input) {
__typename
... on UserError {
errors {
errorPath
code
description
}
}
... on AccountHolderCardProductApplication {
id
applicationState {
status
}
cardProduct {
id
}
globalNotes {
... on GlobalNoteConnection {
edges {
node {
primaryEntity {
__typename
... on AccountHolderCardProductApplication {
id
}
}
createdBy {
... on User {
id
}
}
createdAt
message
}
}
}
}
updatedAt
createdAt
}
}
}
Variables
{ "input": { "applicationId": "ACCOUNT_HOLDER_APPLICATION_ID", "subscriberNote": "credit report confirmed unfrozen" } }
Result
{
"data": {
"confirmCreditReportUnfrozen": {
"__typename": "AccountHolderCardProductApplication",
"id": "ap_22pcgm57030a3e272d42e4bde2af68030537bc",
"applicationState": {
"status": "PENDING"
},
"cardProduct": {
"id": "pd_4b6dc5eed2224f339cd19f3cf2e266e2"
},
"globalNotes": {
"edges": [
{
"node": {
"primaryEntity": {
"__typename": "AccountHolderCardProductApplication",
"id": "ap_22pcgma9eb0efe9ecd4bb68216c6905a3bdf02"
},
"createdBy": {
"id": "ps_prcgm57030a3e272d42e4bde2af68030537bc"
},
"createdAt": "2025-02-14T18:25:59.684Z",
"message": "credit report confirmed unfrozen"
}
}
]
},
"updatedAt": "2024-04-10T21:41:09.137Z",
"createdAt": "2024-04-10T21:37:56.455Z"
}
},
"extensions": {
"requestId": "5951d35e-0316-9e78-9acc-9aa2dbbbf1c0",
"rateLimit": {
"cost": 19,
"limit": 60060,
"remaining": 60004
}
}
}