White-label & branding
Your name, logo and colour on the consent flow, the e-mails and the portal; the agency named where the law puts it.
Livehttps://api.offendersearch.appSandboxhttps://sandbox.offendersearch.appThree modes, one engine
Every FCRA partner runs on the same orders, controls, evidence, signed reports, disputes and consumer portal. The mode on your agreement decides who the consumer reporting agency is and therefore who runs the consumer-facing steps.
| Mode | You are | The consumer reporting agency is | Who runs consent, notices and the portal |
|---|---|---|---|
direct | An employer, landlord or organization screening for itself | Us | We do, in your branding |
platform | A platform, staffing firm or property manager screening for its clients | Us | We do, in your branding; each client is an end user you register |
cra | A consumer reporting agency | You | You do, in your own flow; we furnish the records, controls, evidence and the dispute channel |
You choose the mode on the application (dashboard → FCRA → Settings, or POST /v1/fcra/application); the agreement fixes it. GET /v1/fcra/partner reports it as kind.
What the consumer sees, surface by surface
In direct and platform mode the consumer sees you as the requester and sees the agency where the Fair Credit Reporting Act requires the consumer reporting agency to be identified. That is the whole of the white-label rule: your brand up front, the agency’s legal name where the law puts it.
| Surface | Your brand | The agency’s legal name |
|---|---|---|
| Invitation e-mail and reminder | Sender name, header logo, button colour, reply-to | Footer: who prepares the report, consumer contact |
Hosted consent page (/apply/…) | Logo or name at the top, button colour, “[Your name] has asked for your authorization” | Named in the disclosure and the authorization as the agency; the page footer |
| Disclosure and authorization texts | “[End user] may obtain a consumer report about you…” | “The report will be prepared by [agency]…” with the consumer contact |
| Copy of the report e-mail | Sender name, header, colour | Footer, and the portal it links to |
| Consumer portal | Your logo or name at the top; “Requested by [your name]” | “Prepared by [agency], a consumer reporting agency” with the dispute contact |
| Pre- and post-adverse notices | Sender name, header, colour; “[End user] is considering a decision…” | Named as the agency that prepared the report, with address and contact, as § 1681m requires |
| The report PDF and receipt | Your end user and reference on the report | The agency as the furnisher; the signed receipt |
- Links go to
offendersearch.app/apply/…and the portal atoffendersearch.app/consumer/report. A custom domain for those pages is not available yet. - Want the consent step inside your own product? Create the invitation with
sendEmail: falseand presentapplyUrlyourself; the page still carries your branding. - Platform partners: register each client as an end user. Its name is what the consumer reads as the requester in the disclosure; your branding frames the page.
Set your branding
From the dashboard: FCRA → Settings → Branding (account admins). From the API: PUT /v1/fcra/branding with any of the fields below; what you send replaces what is stored. Our team seeds displayName and website from your application when it is approved.
curl -X PUT "https://api.offendersearch.app/v1/fcra/branding" \
-H "X-API-Key: $OFFENDERSEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"displayName": "Acme Staffing",
"logoUrl": "https://acme.example/logo.png",
"primaryColor": "#0f766e",
"supportEmail": "screening@acme.example",
"website": "https://acme.example",
"replyTo": "screening@acme.example"
}'| Field | Where it shows | Notes |
|---|---|---|
displayName | E-mail sender name, page header, portal, “Requested by” | Up to 120 characters |
logoUrl | E-mail header, consent page header, portal header | An https URL to a PNG, JPEG or SVG; rendered up to 48 px tall on a white background, so a horizontal logo works best |
primaryColor | Buttons and highlights on the consent page and in e-mails | #rrggbb |
supportEmail, supportPhone | Where the consumer can reach you about the request itself (not about the report) | The pre-adverse notice tells the consumer to respond to you here |
website | Linked from your name | https |
replyTo | Reply-to on every e-mail we send on your behalf | Defaults to supportEmail |
Set your branding — PUT /v1/fcra/branding
Replaces your branding. From the dashboard, an account admin only.
Request
| Field | Type | Description |
|---|---|---|
| displayName optional | string or null | The name the consumer sees as the requester. Example "Acme Staffing" |
| logoUrl optional | string or null | An https logo shown at the top of the hosted flow and e-mails. |
| primaryColor optional | string or null | A hex colour for buttons and highlights. Example "#0f766e" |
| supportEmail optional | string or null | Where the consumer can reach you about the request itself. |
| supportPhone optional | string or null | A phone number to show consumers. null clears it. |
| website optional | string or null | Your public website (https://…). null clears it. |
| replyTo optional | string or null | The reply-to address on e-mails we send on your behalf. |
Response
The body is the BrandingStatus object. Your branding, your partner kind, and the agency named on every disclosure.
| Status | Code | When |
|---|---|---|
| 401 | — | No valid X-API-Key (the body is { "detail": "…" }, a string). |
| 403 | fcra_not_enabled | This account has no active FCRA partner agreement. |
| 403 | fcra_not_on_trial | FCRA orders are not available on a trial account. |
| 403 | — | A non-admin seat on a dashboard session (string detail). |
| 422 | — | A colour that is not #rrggbb, or a URL that is not https. |
The BrandingStatus object
Your branding, your partner kind, and the agency named on every disclosure.
Returned or accepted by GET /v1/fcra/branding, PUT /v1/fcra/branding.
| Field | Type | Description |
|---|---|---|
| branding | Branding | As stored (empty when none). |
| kind | string one of "cra", "direct", "platform" | cra (you are the CRA), direct (we are the CRA; you are the end user) or platform (we are the CRA; you order for your clients under your brand). |
| agency | Agency | The consumer reporting agency named on every disclosure, report and notice. |
The Branding object — how the consumer sees you
Your branding on the hosted consent flow, the e-mails and the portal header.
Returned or accepted by GET /v1/fcra/partner, GET /v1/consumer/portal/report, GET /v1/fcra/branding, PUT /v1/fcra/branding, GET /v1/apply/{token}.
| Field | Type | Description |
|---|---|---|
| displayName | string or null | The name the consumer sees as the requester. Example "Acme Staffing" |
| logoUrl | string or null | An https logo shown at the top of the hosted flow and e-mails. |
| primaryColor | string or null | A hex colour for buttons and highlights. Example "#0f766e" |
| supportEmail | string or null | Where the consumer can reach you about the request itself. |
| supportPhone | string or null | A phone number shown to consumers on the hosted consent page and in notices. null to show none. |
| website | string or null | Your public website, linked from the hosted consent page and the consumer portal. null for none. |
| replyTo | string or null | The reply-to address on e-mails we send on your behalf. |
Your branding — GET /v1/fcra/branding
Request
Response
The body is the BrandingStatus object. Your branding, your partner kind, and the agency named on every disclosure.
| Status | Code | When |
|---|---|---|
| 401 | — | No valid X-API-Key (the body is { "detail": "…" }, a string). |
| 403 | fcra_not_enabled | This account has no active FCRA partner agreement. |
| 403 | fcra_not_on_trial | FCRA orders are not available on a trial account. |
Preview it
On a sandbox key every account is a direct partner: set the branding, create an invitation with sendEmail: false, and open applyUrl to see the consent page exactly as a consumer would, in your colours, with the agency named in the disclosure. The sandbox sends no e-mail; the notices list shows what would have gone.
Test FCRA orders on the sandbox server
With a test key (os_test_…) every account is a sandbox FCRA partner on the sandbox server, with the same last-name rules. Register an end user, then place orders against it; nothing is billed. An order finishes right after the 202: read it once with GET /v1/fcra/orders/{orderId}.
- Base URL
https://sandbox.offendersearch.appNothttps://api.offendersearch.app, which takes live keys only.- Test key
- In the dashboard, Developers → API keys → Create test key. Test keys begin
os_test_; send yours in theX-API-Keyheader.
curl -X POST "https://sandbox.offendersearch.app/v1/fcra/end-users" \
-H "X-API-Key: $OFFENDERSEARCH_TEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Sample Staffing LLC",
"permissiblePurposes": [
"employment"
],
"certification": {
"text": "End user certifies it will use reports only for employment purposes.",
"version": "v1",
"certifiedAt": "2026-10-01T12:00:00Z"
}
}'curl -X POST "https://sandbox.offendersearch.app/v1/fcra/orders" \
-H "X-API-Key: $OFFENDERSEARCH_TEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"endUserId": "{endUserId}",
"permissiblePurpose": "employment",
"consent": {
"obtainedAt": "2026-10-01T12:00:00Z",
"method": "esign"
},
"subject": {
"firstName": "Pat",
"lastName": "Records",
"dob": "1980-01-01"
},
"searches": [
{
"type": "sex_offender"
},
{
"type": "criminal"
}
]
}'Try it here
Pick a scenario, edit the request, and run it against the sandbox from this page. The explorer accepts os_test_ keys only and never reaches the live host, so nothing here is billed; the “production” code it copies is for your own backend with a live key.
Copy this request as code
Sandbox code uses your test key. Production code calls the live host and is billed per call; run it from your backend with an os_live_… key.
curl -X POST https://sandbox.offendersearch.app/v1/fcra/end-users \
-H "X-API-Key: $OFFENDERSEARCH_TEST_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Sample Staffing LLC", "permissiblePurposes": [ "employment" ], "certification": { "text": "End user certifies it will use reports only for employment purposes.", "version": "v1", "certifiedAt": "2026-10-01T12:00:00Z" } }'Every test name: FCRA API sandbox ordersPostman collectionFCRA API sandbox