Home About Us How It Works For Lenders Pricing Contact
Sign In Get Started

SMBCredit API

The SMBCredit REST API gives your systems direct access to business credit data — search businesses, pull full credit reports, retrieve scores, and submit trade data programmatically. All responses are JSON.

Base URLhttps://smbcredit.net/API/v1
API keys are managed from your API Keys dashboard. Each key is tied to your account and inherits your monthly report quota.

Authentication

Include your API key in every request using the Authorization header with the Bearer scheme.

cURL
JavaScript
Python
C#
curl https://smbcredit.net/API/v1/auth/verify.ashx \
  -H "Authorization: Bearer YOUR_API_KEY"
const res = await fetch('/API/v1/auth/verify.ashx', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const data = await res.json();
import requests
r = requests.get(
    'https://smbcredit.net/API/v1/auth/verify.ashx',
    headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = r.json()
using var client = new HttpClient();
client.DefaultRequestHeaders.Add(
    "Authorization", "Bearer YOUR_API_KEY");
var res  = await client.GetAsync(
    "https://smbcredit.net/API/v1/auth/verify.ashx");
var json = await res.Content.ReadAsStringAsync();
Never expose your API key in client-side code or commit it to source control. Use environment variables or a secrets manager.

Error Codes

All errors return a consistent envelope. Match the errorCode string programmatically.

{
  "success":   false,
  "errorCode": "QUOTA_EXCEEDED",
  "message":   "No reports remaining this period.",
  "timestamp": "2025-04-15T14:22:10Z"
}
HTTPerrorCodeDescription
401API_UNAUTHORIZEDMissing, invalid, or revoked API key
401API_KEY_EXPIREDKey has passed its expiry date
400MISSING_PARAMRequired parameter not provided
402QUOTA_EXCEEDEDNo report pulls remaining this billing period
403NOT_A_REPORTERTrade submission requires reporter status
404NOT_FOUNDBusiness not found or inactive
405METHOD_NOT_ALLOWEDWrong HTTP method
500SERVER_ERRORUnexpected server error

Verify API Key

GET /auth/verify.ashx Validate key — no quota consumed

Confirms your key is active and returns account info. Use this as a health check before bulk operations.

Response

{
  "success":   true,
  "message":   "API key is valid.",
  "accountID": "SMB-000123",
  "apiKeyID":  7,
  "business":  { "businessName": "Acme Supplies LLC", "accountID": "SMB-000123", "isReporter": false },
  "timestamp": "2025-04-15T14:22:10Z"
}
Try it
Response

                    

Credit Report

GET /businesses/report.ashx Full report — consumes one quota
Each successful call deducts one report from your monthly quota.

Parameters

ParamTypeRequiredDescription
accountIDstringrequiredSMBCredit AccountID of the target business

Response

{
  "success": true, "reportID": 1042, "pulledAt": "2025-04-15T14:22:10Z",
  "business": { "accountID": "SMB-000456", "businessName": "Riverside Distributors Inc",
                "businessCity": "Tampa", "formationYear": 2011 },
  "scores":   { "aggregatedScore": 78.5, "creditScore": 79.8, "payRiskScore": 82.0 },
  "principals": [{ "firstName": "James", "lastName": "Rivera", "title": "CEO", "ownershipPct": 51.0 }],
  "tradeLines": [{
    "recordID": 201, "reporterID": "RPT-001", "sequenceMonth": 3, "sequenceYear": 2025,
    "currentAmount": 12500.00, "amt31to60": 1200.00, "totalAmount": 13700.00,
    "paymentTerms": "NET30", "isVerified": true, "totalPastDue": 1200.00
  }]
}
Try it
Response

                    

Credit Scores

GET /businesses/score.ashx Scores only — no quota consumed

Lightweight — returns only the six pre-calculated score fields. No quota deduction.

Parameters

ParamTypeRequiredDescription
accountIDstringrequiredSMBCredit AccountID of the target business

Response

{
  "success": true, "accountID": "SMB-000456", "business": "Riverside Distributors Inc",
  "scores": { "aggregatedScore": 78.5, "payRiskScore": 82.0, "clientRiskScore": 74.2,
              "failureScore": 12.1, "creditScore": 79.8, "peerPaymentScore": 81.3 },
  "timestamp": "2025-04-15T14:22:10Z"
}
Try it
Response

                    

Submit Trade Data

POST /trade/submit.ashx Reporter accounts only
Only approved reporter accounts may submit. Records are queued for admin review before appearing on reports. Up to 500 records per request. Partial success supported.

Request Body — JSON array of trade records

FieldTypeRequiredDescription
tradeCompanyIDstringrequiredAccountID of the business being reported on
sequenceMonthintrequiredReporting month (1–12)
sequenceYearintrequiredReporting year e.g. 2025
currentAmountdecimaloptionalCurrent (not past due) balance
amt0to30 … amt151plusdecimaloptionalAging bucket balances
totalAmountdecimaloptionalTotal outstanding balance
highCreditAmountdecimaloptionalHighest balance ever extended
creditLimitdecimaloptionalCredit limit extended
paymentTermsstringoptionale.g. NET30, NET60, COD
cURL
JavaScript
Python
curl -X POST https://smbcredit.net/API/v1/trade/submit.ashx \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"tradeCompanyID":"SMB-000456","sequenceMonth":3,"sequenceYear":2025,
       "currentAmount":12500.00,"totalAmount":12500.00,"paymentTerms":"NET30"}]'
const res = await fetch('/API/v1/trade/submit.ashx', {
  method:  'POST',
  headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify([{
    tradeCompanyID: 'SMB-000456', sequenceMonth: 3, sequenceYear: 2025,
    currentAmount: 12500.00, totalAmount: 12500.00, paymentTerms: 'NET30'
  }])
});
import requests, json
r = requests.post(
    'https://smbcredit.net/API/v1/trade/submit.ashx',
    headers={'Authorization':'Bearer YOUR_API_KEY','Content-Type':'application/json'},
    data=json.dumps([{'tradeCompanyID':'SMB-000456','sequenceMonth':3,'sequenceYear':2025,
                      'currentAmount':12500.00,'totalAmount':12500.00,'paymentTerms':'NET30'}])
)

Response

{
  "success": true, "submitted": 1, "recordIDs": [3041],
  "errorCount": 0, "errors": [],
  "message": "1 record(s) queued for review.",
  "timestamp": "2025-04-15T14:22:10Z"
}
Try it
Response

                    

Register Business

POST /businesses/register.ashx Reporter accounts only — register a new business
Use this endpoint when you need to submit trade data for a business not yet in the bureau. Returns the new accountID which you then use in trade submissions. Registered businesses are marked as unverified until reviewed by our team.

Request Body

FieldTypeRequiredDescription
businessNamestringrequiredLegal business name
einstringrequiredEIN / FEIN (with or without dashes)
entityTypeIDintrequiredEntity type ID (see lookup endpoint)
dbaNamestringoptionalDoing business as name
businessAddress1stringoptionalStreet address
businessCitystringoptionalCity
businessStateIDintoptionalState ID
businessZIPCodestringoptionalZIP code
primaryContactTelephonestringoptionalMain phone number
businessWebSitestringoptionalWebsite URL
formationYearintoptionalYear business was formed
formationMonthintoptionalMonth business was formed (1–12)
naicsIDintoptionalNAICS industry code ID
cURL
JavaScript
Python
curl -X POST https://smbcredit.net/API/v1/businesses/register.ashx \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "businessName":  "Riverside Distributors Inc",
    "ein":           "12-3456789",
    "entityTypeID":  2,
    "businessCity":  "Tampa",
    "businessStateID": 10,
    "businessZIPCode": "33601"
  }'
const res = await fetch('/API/v1/businesses/register.ashx', {
  method:  'POST',
  headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    businessName:    'Riverside Distributors Inc',
    ein:             '12-3456789',
    entityTypeID:    2,
    businessCity:    'Tampa',
    businessStateID: 10,
    businessZIPCode: '33601'
  })
});
const data = await res.json();
// data.accountID is ready to use in trade submissions
import requests, json
r = requests.post(
    'https://smbcredit.net/API/v1/businesses/register.ashx',
    headers={'Authorization':'Bearer YOUR_API_KEY','Content-Type':'application/json'},
    data=json.dumps({
        'businessName':    'Riverside Distributors Inc',
        'ein':             '12-3456789',
        'entityTypeID':    2,
        'businessCity':    'Tampa',
        'businessStateID': 10,
        'businessZIPCode': '33601'
    })
)
account_id = r.json()['accountID']

Response

{
  "success":    true,
  "accountID":  "SMB-000789",
  "message":    "Business registered. Use accountID in trade submissions.",
  "isNew":      true,
  "timestamp":  "2025-04-15T14:22:10Z"
}

If a business with the same EIN already exists, the existing accountID is returned with "isNew": false — no duplicate is created.

Try it
Response

                    

Bulk Trade Upload

POST /trade/bulk.ashx Reporter accounts only — historical data onboarding
Designed for onboarding historical data. Accepts up to 5,000 records per request. Records flagged isHistorical: true are routed to a separate admin review queue and do not affect live scores until approved.

Same field structure as Submit Trade Data with two additions: isHistorical and an optional per-record reportDate.

Additional Fields

FieldTypeRequiredDescription
isHistoricalbooloptionalSet true for historical records. Routes to historical review queue. Default: false.
reportDatestringoptionalISO date of the original report e.g. "2024-06-01". Defaults to submission date if omitted.
cURL
JavaScript
Python
curl -X POST https://smbcredit.net/API/v1/trade/bulk.ashx \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {"tradeCompanyID":"SMB-000456","sequenceMonth":1,"sequenceYear":2025,
     "currentAmount":11000,"totalAmount":11000,"paymentTerms":"NET30",
     "isHistorical":true,"reportDate":"2025-01-31"},
    {"tradeCompanyID":"SMB-000456","sequenceMonth":2,"sequenceYear":2025,
     "currentAmount":12500,"totalAmount":12500,"paymentTerms":"NET30",
     "isHistorical":true,"reportDate":"2025-02-28"},
    {"tradeCompanyID":"SMB-000456","sequenceMonth":3,"sequenceYear":2025,
     "currentAmount":9800,"totalAmount":9800,"paymentTerms":"NET30",
     "isHistorical":true,"reportDate":"2025-03-31"}
  ]'
const months = [
  { sequenceMonth:1, sequenceYear:2025, currentAmount:11000, reportDate:'2025-01-31' },
  { sequenceMonth:2, sequenceYear:2025, currentAmount:12500, reportDate:'2025-02-28' },
  { sequenceMonth:3, sequenceYear:2025, currentAmount:9800,  reportDate:'2025-03-31' }
];
const records = months.map(m => ({
  tradeCompanyID: 'SMB-000456',
  totalAmount:    m.currentAmount,
  paymentTerms:   'NET30',
  isHistorical:   true,
  ...m
}));
const res = await fetch('/API/v1/trade/bulk.ashx', {
  method:  'POST',
  headers: { 'Authorization':'Bearer YOUR_API_KEY','Content-Type':'application/json' },
  body:    JSON.stringify(records)
});
import requests, json
from datetime import date

records = []
for month, day in [(1,'31'),(2,'28'),(3,'31')]:
    records.append({
        'tradeCompanyID': 'SMB-000456',
        'sequenceMonth':  month,
        'sequenceYear':   2025,
        'currentAmount':  11000,
        'totalAmount':    11000,
        'paymentTerms':   'NET30',
        'isHistorical':   True,
        'reportDate':     f'2025-{month:02d}-{day}'
    })

r = requests.post(
    'https://smbcredit.net/API/v1/trade/bulk.ashx',
    headers={'Authorization':'Bearer YOUR_API_KEY','Content-Type':'application/json'},
    data=json.dumps(records)
)

Response

{
  "success":         true,
  "submitted":       3,
  "recordIDs":       [3042, 3043, 3044],
  "historicalCount": 3,
  "currentCount":    0,
  "errorCount":      0,
  "errors":          [],
  "message":         "3 record(s) queued for historical review.",
  "timestamp":       "2025-04-15T14:22:10Z"
}
Try it
Response

                    

States

GET /Handlers/Lookups/GetLookups.ashx?type=states No authentication required

Returns all US states and territories. Use stateID when submitting business registration data.

Response

{
  "success": true,
  "data": [
    { "stateID": 1, "stateName": "Alabama",  "abbreviation": "AL", "isActive": true },
    { "stateID": 2, "stateName": "Alaska",   "abbreviation": "AK", "isActive": true },
    ...
  ]
}
Try it
Response

                    

Entity Types

GET /Handlers/Lookups/GetLookups.ashx?type=entitytypes No authentication required

Returns all business entity types (LLC, Corporation, Sole Proprietor, etc.). Use entityTypeID when registering a business via the API.

Response

{
  "success": true,
  "data": [
    { "entityTypeID": 1, "typeName": "Sole Proprietor",        "isActive": true, "companies": 0 },
    { "entityTypeID": 2, "typeName": "Limited Liability Co.",  "isActive": true, "companies": 0 },
    { "entityTypeID": 3, "typeName": "Corporation",            "isActive": true, "companies": 0 },
    ...
  ]
}
Try it
Response

                    

NAICS Codes

GET /Handlers/Lookups/GetLookups.ashx?type=naics No authentication required

Returns all NAICS industry classification codes. Use naicsID when registering a business. Results are grouped by sectorCode for easier filtering.

This endpoint returns a large dataset. Cache the results client-side — the data changes infrequently. Response includes HTTP cache headers valid for 24 hours.

Response

{
  "success": true,
  "data": [
    { "naicsID": 1, "naicsCodeValue": "111110", "sectorCode": "11",
      "sectorTitle": "Agriculture, Forestry, Fishing and Hunting",
      "title": "Soybean Farming", "isActive": true },
    ...
  ]
}
Try it
Response

                    

Close Codes

GET /Handlers/Lookups/GetLookups.ashx?type=closecodes No authentication required

Returns all account close reason codes. Used when closing or deactivating a business account.

Response

{
  "success": true,
  "data": [
    { "closeCodeID": 1, "code": "VOLUNTARY",   "description": "Voluntary closure by account holder" },
    { "closeCodeID": 2, "code": "NONPAYMENT",  "description": "Closed due to non-payment" },
    { "closeCodeID": 3, "code": "FRAUD",       "description": "Closed due to fraudulent activity" },
    ...
  ]
}
Try it
Response

                    

Credit Types

GET /Handlers/Lookups/GetLookups.ashx?type=credittypes No authentication required

Returns all credit type classification codes used to categorize business credit relationships.

Response

{
  "success": true,
  "data": [
    { "typeCodeID": 1, "code": "TRADE",    "description": "Trade Credit",    "businessCount": 0, "isActive": true },
    { "typeCodeID": 2, "code": "REVOLVING","description": "Revolving Credit","businessCount": 0, "isActive": true },
    { "typeCodeID": 3, "code": "INSTALLMT","description": "Installment",     "businessCount": 0, "isActive": true },
    ...
  ]
}
Try it
Response

                    

Quotas & Limits

LimitValueNotes
Report quotaPer subscription planShared between portal and API pulls. Resets monthly.
Trade submit batch500 recordsPer POST to /trade/submit.ashx
Bulk historical batch5,000 recordsPer POST to /trade/bulk.ashx — historical queue only
Search results25 resultsPer call
Business registerEIN dedupDuplicate EINs return existing accountID — no error

Changelog

v1.0  April 2025 — Initial release: verify, search, report, score, trade/submit.