Submitting data to the Fraud Consortium

Last updated: July 8, 2026

Submitting data is what unlocks and renews your consortium access. This guide covers the schema, how to upload, and what to expect after a submission.

Use the closure_reason field to be specific about *why* a case is on the list — see Closure reasons below.


What gets submitted

Submissions go through a single endpoint that accepts a flat CSV upload:

POST /consortium/submissions
Content-Type: multipart/form-data

The same flow is available in the console under Consortium Membership → Submit Data (CSV upload).

Each row in the CSV represents one excluded business. We recommend submitting monthly, even if you only have a handful of new cases — small, regular submissions keep your data fresh and your access uninterrupted.


The CSV schema

A downloadable template is available at the bottom of this article and in the console.

Required fields

All 10 of these must be present and populated in every row.

Column

Type

Notes

business_name

string

Legal name of the business.

business_address

string

Full single-line address (street, city, state, ZIP). Baselayer normalizes this at ingestion.

product_type

enum

See Product types.

application_date

date (YYYY-MM-DD)

When the applicant applied.

opened_on

date (YYYY-MM-DD)

When the account/loan was opened.

closed_on

date (YYYY-MM-DD)

When it was closed/written off.

closure_status

enum

PIF, WO, or SD — see Closure status.

closure_reason

enum

Granular reason — see Closure reasons.

owner_first_name

string

First name of the primary owner / personal guarantor.

owner_last_name

string

Last name of the primary owner / personal guarantor.

These dramatically improve match coverage across the consortium. Submit anything you have.

Column

Type

Why it matters

tax_id

string (9 digits, EIN)

Strongest single identifier. EIN reuse across business names is a primary fraud signal.

owner_phone_number

string (10 digits)

Catches owners recycling phone numbers across synthetic businesses.

email

email

Catches recycled contact info.

website

string

Matched on registered domain (lowercased, no protocol).

application_ip_address

string

IP reuse across applications.

secondary_owner_first_name / secondary_owner_last_name / secondary_owner_middle_name

string

Captures the second guarantor when present.

owner_middle_name

string

Improves disambiguation on common names.

owner_address

string

Owner-level address signal.

Other optional fields

Column

Type

loan_number

string

account_number

string

doing_business_as

string

entity_type

enum (CORPORATION, LLC, PARTNERSHIP, SOLE PROPRIETORSHIP, NON-PROFIT, TRUST, AGENT, UNKNOWN)

application_channel

enum (OG, BR, ISO, Other)

channel_name

string

matures_on

date (YYYY-MM-DD)

first_payment_default

boolean (true / false)

term_in_months

integer

amount

decimal

charge_off_amount

decimal

payment_frequency

enum (DY, WY, BW, MY, QY, AY)

additional_notes

string


Enum reference

Product types

Code

Meaning

BNK

Deposits / Savings

CC

Credit / Charge Cards

WC

Working Capital / Term Loan

LOC

Line of Credit

EQF

Equipment Finance

MCA

Merchant Cash Advance

PMT

Payments

Other

Other

Closure status

Code

Meaning

PIF

Paid in Full

WO

Write Off

SD

Settled

Closure reasons

Code

Meaning

PIF

Paid in Full

WBC

Write Off — Business Closed

WUP

Write Off — Unable to Pay

WPF

Write Off — First Party Fraud

WIF

Write Off — Identity Fraud

WSF

Write Off — Synthetic Identity Fraud

Use the most specific fraud code you can. The consortium currently treats every contributed row as fraud-flagged in matches, but in a future version we'll distinguish between bad payments and fraud — your specificity today protects you later.

Application channel

Code

Meaning

OG

Organic

BR

Broker

ISO

ISO

Other

Other

Payment frequency

Code

Meaning

DY

Daily

WY

Weekly

BW

Biweekly

MY

Monthly

QY

Quarterly

AY

Annually


Uploading your file

Via the console

  1. Open Consortium Membership in the left nav.

  2. Click Submit Data.

  3. Select your CSV. The console performs the same validation as the API and shows row-level errors inline.

  4. Submit. Processing happens asynchronously; you'll see a Processing state for a few minutes before it transitions to Completed.

Screenshot 2026-07-08 at 13.40.13.png

Via the API

curl -X POST 'https://api.baselayer.com/consortium/submissions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -F 'file=@exclusions_2026_06.csv;type=text/csv'

A successful upload returns 202 Accepted:

{
  "id": "9f3e8a2c-...-...",
  "name": "exclusions_2026_06.csv",
  "state": "PENDING",
  "submitted_records": 0,
  "valid_records": 0,
  "created_at": "2026-06-14T22:01:33Z"
}

state is one of PENDING, EXECUTING, COMPLETED, FAILED, or CANCELLED. Once the async pipeline has processed the file (typically within a few minutes), state becomes COMPLETED and submitted_records / valid_records are populated.


What happens after you submit

  1. Validation. The CSV is parsed and each row is validated against the schema. Rows that fail validation are flagged with row-level errors but do not block the rest of the file.

  2. Your cadence resets. As long as at least one row is valid, the submission counts and keeps your access active. If your status was Inactive, it returns to Active.

  3. Resolution. Baselayer attempts to resolve each row to an internal business_id and indexes EIN, phone, email, website, address, and officer names so any subsequent search across the consortium can match on those signals.

  4. Visibility. Your submitted rows become visible to other consortium members as anonymized hits (your org name is never revealed in match results).

Cadence edge cases

  • Submitted a file where every row failed validation → it does not count as a submission (zero valid rows). Error report returned for fixing.

  • Submitted a file with mixed valid/invalid rows → it counts as a submission. Error report is still produced for the bad rows.

  • Submitted twice in the same week → your cadence is measured from the most recent successful submission.

  • Submitted retroactive historical data → cadence is measured from the date Baselayer received the file, not the fraud-case dates inside it.


Viewing your submission history

Via the API

GET /consortium/submissions

Returns submissions across your entire organization (all applications under the org), most recent first. The response is a JSON array of submission objects; page through it with the limit, offset, and cursor query parameters.

[
  {
    "id": "9f3e8a2c-...",
    "name": "exclusions_2026_06.csv",
    "state": "COMPLETED",
    "submitted_records": 142,
    "valid_records": 139,
    "created_at": "2026-06-14T22:01:33Z"
  }
]

Re-downloading a submission

GET /consortium/submissions/{submission_id}/download

Returns a 307 redirect to a short-lived signed URL of the originally uploaded CSV. Useful for auditing what you sent or rebuilding a working file.


Data quality tips

  • Normalize your data before upload. Baselayer normalizes phones, emails, and websites at ingestion, but garbage-in / garbage-out still applies. Trimming whitespace, removing stray characters, and validating EIN format on your end will get you cleaner matches.

  • Include EIN whenever you have it. It's the single highest-signal field.

  • Include both owner and secondary owner when both signed. Fraudsters frequently rotate the "primary" guarantor across applications; capturing both massively improves catch rate.

  • Don't submit duplicates. The pipeline will dedupe, but pre-deduping makes your error reports cleaner.


Template files (available in the console)

  • CSV template: exclusion_template.csv — empty file with all column headers.

  • Field guide (plain text): field_guide.txt — quick reference for required/optional fields and enum values.