PreScreen Gateway

v3.4.0

Soft-pull pre-screening gateway for Anchored Finance. Routes applicants via Equifax/OffersIQ credit data — returns full ECM attribute profiles for downstream use.

Integration Flow

CRIF / LOS
Sends application
PreScreen Gateway
Validates & forwards
OffersIQ / Equifax
Soft pull + ECM
Gateway Evaluates
Score ≥ 650?
✓ PROCEED
Hard pull worth it
↗ ROUTE
Automatic front door
💰

$2.35 saved per routed applicant

Hard pull: $4.35  |  Soft pull: $2.00  |  At ~20K apps/month, sub-650 routing saves $10K+/month

ECM Attribute Coverage

Full ECM Catalog Available (ECM22+ Unlocked)

All 237 Equifax OneView attributes are active. The gateway passes the complete ECM profile through in every response — downstream systems use whichever attributes they need.

credit_score Vantage 3.0
total_tradelines Open + closed
utilization_pct Credit usage
high_credit_line Highest line
total_monthly_payment Scheduled
auto_credit_line Auto-specific
auto_utilization_pct Auto usage
mortgage_balance Mortgage debt
bankruptcy_count + age
collections_count + non-medical
tax_lien_count Public records
repossession_count Repos
foreclosure_count Foreclosures
chargeoff_count + total amount
delinquent_30/60/90 Late pays
inquiry_count Hard inquiries

The gateway's routing decision uses the credit score only. All ECM attributes are included in the API response for downstream lender qualification, DTI calculations, or any other criteria your systems need.

API Endpoints

Authentication

All API endpoints require a gateway secret via header:

X-Gateway-Secret: your-gateway-secret
# or
Authorization: Bearer your-gateway-secret
POST /api/prescreen

Run a single pre-screen. Accepts Automatic's native application format. Returns routing decision + full ECM attributes.

Required Fields

FieldLocationTypeDescription
firstNameapplicantInfostringREQUIRED
lastNameapplicantInfostringREQUIRED
socialSecurityNumberapplicantInfostringREQUIRED
dobapplicantInfostringRecommended (YYYY-MM-DD)
applicantResidenceapplicantInfoobjectRecommended (streetAddress, city, state, zipCode)

Request Example

{
  "partnerAppId": "CRIF-20250705-001",
  "applicantInfo": {
    "firstName": "Jane",
    "lastName": "Smith",
    "socialSecurityNumber": "123456789",
    "dob": "1985-03-15",
    "applicantResidence": {
      "streetAddress": "123 Main St",
      "city": "Miami",
      "state": "FL",
      "zipCode": "33101"
    }
  }
}

Response — PROCEED

{
  "decision": "PROCEED",
  "reason": "Score 712 meets threshold (>= 650) — proceed with hard pull",
  "score": 712,
  "threshold": 650,
  "ecmAttributes": {
    "credit_score": 712,
    "total_tradelines": 14,
    "open_tradelines": 8,
    "utilization_pct": 34,
    "high_credit_line": 25000,
    "total_monthly_payment": 1850,
    "auto_credit_line": 18000,
    "auto_utilization_pct": 45,
    "bankruptcy_count": 0,
    "collections_count": 0,
    "repossession_count": 0,
    "foreclosure_count": 0,
    "chargeoff_count": 0,
    "delinquent_30_count": 1,
    "delinquent_60_count": 0,
    "delinquent_90_count": 0
  },
  "processingMs": 1240,
  "applicationId": "CRIF-20250705-001",
  "timestamp": "2025-07-05T23:00:00.000Z"
}

Response — ROUTE

{
  "decision": "ROUTE",
  "reason": "Score 580 below threshold (< 650) — route to Automatic front door",
  "score": 580,
  "threshold": 650,
  "ecmAttributes": {
    "credit_score": 580,
    "total_tradelines": 6,
    "open_tradelines": 3,
    "utilization_pct": 78,
    "high_credit_line": 5000,
    "total_monthly_payment": 420,
    "auto_credit_line": 0,
    "bankruptcy_count": 1,
    "bankruptcy_age_months": 36,
    "collections_count": 3,
    "collections_non_medical": 2,
    "repossession_count": 0,
    "chargeoff_count": 2,
    "chargeoff_total_amount": 4200
  },
  "processingMs": 1180,
  "applicationId": "CRIF-20250705-002",
  "timestamp": "2025-07-05T23:01:00.000Z"
}
POST /api/prescreen/batch

Process up to 50 applications in a single request. Same format as single prescreen, wrapped in an applications array.

{
  "applications": [
    { "partnerAppId": "CRIF-001", "applicantInfo": { ... } },
    { "partnerAppId": "CRIF-002", "applicantInfo": { ... } }
  ]
}
GET /api/prescreen/:applicationId

Look up a previous pre-screen result by application ID.

GET /health

Health check — no authentication required.

{
  "status": "ok",
  "version": "3.4.0",
  "offersiq_credentials": "configured",
  "ecm_coverage": "full (ECM22+ unlocked)",
  "services_ready": true
}

Decision Logic

ConditionDecisionAction
Score ≥ 650PROCEEDAF proceeds with hard pull — applicant is worth the $4.35
Score < 650ROUTERoute to Automatic front door — save the hard pull cost
No score availableROUTEUnable to score — conservative routing to Automatic

The 650 threshold is configurable via SCORE_THRESHOLD environment variable. ECM attributes are always returned regardless of the routing decision — downstream systems apply their own qualification criteria.

Error Responses

CodeErrorCause
400Missing required fieldsfirstName, lastName, or SSN not provided
401UnauthorizedMissing or invalid gateway secret
502OffersIQ authentication failedToken refresh/login issue
502OffersIQ pre-screen failedEquifax service error
500Internal gateway errorUnexpected server error

CRIF Integration Checklist

StepActionDetails
1Get gateway credentialsReceive X-Gateway-Secret from Automatic team
2Map application fieldsUse existing Automatic format — no schema changes needed
3Call POST /api/prescreenSend each application as it arrives
4Handle PROCEEDContinue normal AF hard-pull flow
5Handle ROUTEForward to Automatic front door (details provided separately)
6Use ecmAttributesFull credit profile available for downstream lender matching