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.
Authentication
Include your API key in every request using the Authorization header with the Bearer scheme.
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();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"
}| HTTP | errorCode | Description |
|---|---|---|
| 401 | API_UNAUTHORIZED | Missing, invalid, or revoked API key |
| 401 | API_KEY_EXPIRED | Key has passed its expiry date |
| 400 | MISSING_PARAM | Required parameter not provided |
| 402 | QUOTA_EXCEEDED | No report pulls remaining this billing period |
| 403 | NOT_A_REPORTER | Trade submission requires reporter status |
| 404 | NOT_FOUND | Business not found or inactive |
| 405 | METHOD_NOT_ALLOWED | Wrong HTTP method |
| 500 | SERVER_ERROR | Unexpected server error |
Verify API Key
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"
}Search Businesses
Returns up to 25 matching businesses including pre-calculated credit scores.
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | optional* | Business name search term |
| ein | string | optional* | EIN with or without dashes |
* One of q or ein is required.
Response
{
"success": true, "count": 1,
"results": [{
"accountID": "SMB-000456", "businessName": "Riverside Distributors Inc",
"businessCity": "Tampa", "businessStateID": 10, "businessZIPCode": "33601",
"scores": { "aggregatedScore": 78.5, "payRiskScore": 82.0, "creditScore": 79.8,
"clientRiskScore": 74.2, "failureScore": 12.1, "peerPaymentScore": 81.3 }
}], "timestamp": "2025-04-15T14:22:10Z"
}Credit Report
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| accountID | string | required | SMBCredit 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
}]
}Credit Scores
Lightweight — returns only the six pre-calculated score fields. No quota deduction.
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| accountID | string | required | SMBCredit 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"
}Submit Trade Data
Request Body — JSON array of trade records
| Field | Type | Required | Description |
|---|---|---|---|
| tradeCompanyID | string | required | AccountID of the business being reported on |
| sequenceMonth | int | required | Reporting month (1–12) |
| sequenceYear | int | required | Reporting year e.g. 2025 |
| currentAmount | decimal | optional | Current (not past due) balance |
| amt0to30 … amt151plus | decimal | optional | Aging bucket balances |
| totalAmount | decimal | optional | Total outstanding balance |
| highCreditAmount | decimal | optional | Highest balance ever extended |
| creditLimit | decimal | optional | Credit limit extended |
| paymentTerms | string | optional | e.g. NET30, NET60, COD |
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"
}Register Business
accountID which you then use in trade submissions. Registered businesses are marked as unverified until reviewed by our team.Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| businessName | string | required | Legal business name |
| ein | string | required | EIN / FEIN (with or without dashes) |
| entityTypeID | int | required | Entity type ID (see lookup endpoint) |
| dbaName | string | optional | Doing business as name |
| businessAddress1 | string | optional | Street address |
| businessCity | string | optional | City |
| businessStateID | int | optional | State ID |
| businessZIPCode | string | optional | ZIP code |
| primaryContactTelephone | string | optional | Main phone number |
| businessWebSite | string | optional | Website URL |
| formationYear | int | optional | Year business was formed |
| formationMonth | int | optional | Month business was formed (1–12) |
| naicsID | int | optional | NAICS industry code ID |
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 submissionsimport 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.
Bulk Trade Upload
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
| Field | Type | Required | Description |
|---|---|---|---|
| isHistorical | bool | optional | Set true for historical records. Routes to historical review queue. Default: false. |
| reportDate | string | optional | ISO date of the original report e.g. "2024-06-01". Defaults to submission date if omitted. |
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"
}States
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 },
...
]
}Entity Types
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 },
...
]
}NAICS Codes
Returns all NAICS industry classification codes. Use naicsID when registering a business. Results are grouped by sectorCode for easier filtering.
Response
{
"success": true,
"data": [
{ "naicsID": 1, "naicsCodeValue": "111110", "sectorCode": "11",
"sectorTitle": "Agriculture, Forestry, Fishing and Hunting",
"title": "Soybean Farming", "isActive": true },
...
]
}Close Codes
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" },
...
]
}Credit Types
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 },
...
]
}Quotas & Limits
| Limit | Value | Notes |
|---|---|---|
| Report quota | Per subscription plan | Shared between portal and API pulls. Resets monthly. |
| Trade submit batch | 500 records | Per POST to /trade/submit.ashx |
| Bulk historical batch | 5,000 records | Per POST to /trade/bulk.ashx — historical queue only |
| Search results | 25 results | Per call |
| Business register | EIN dedup | Duplicate EINs return existing accountID — no error |
Changelog
v1.0 April 2025 — Initial release: verify, search, report, score, trade/submit.