Get started
From a test key to your first Float assessment in four calls
Credit infrastructure that proves itself.
Float underwrites receivables, records the obligations you finance, and turns on-chain repayments into portable business reputation. You keep the capital and every decision.
What Float gives you#
Submit an invoice or credit line, get back a risk band, confidence and reason codes.
Register what you financed. Float binds on-chain repayments to it.
Portable, consent-gated, built only from evidence Float verifies.
Float is not a lender, pool, custodian or payment processor. It never holds or moves funds.
Explore by product#
The default flow (kind: invoice). You submit a receivable, Float returns an assessment, you decide and finance.
| Step | Call | You get |
|---|---|---|
| 1 | POST /v1/businesses | biz_…, created or linked |
| 2 | POST /v1/underwriting_requests | uwr_… with status pending |
| 3 | GET /v1/underwriting_requests/{id} | An assessment once completed |
| 4 | POST /v1/obligations | obl_… plus a repayment_reference |
API/RPC credit lines use kind: credit_line on the same underwriting and reputation engine.
| Shared with invoices | Specific to credit lines |
|---|---|
| Businesses and consent | Float-wide ceilings with fixed per-provider shares |
| Underwriting lifecycle | Credit facilities, usage, live limit, settlements |
| Events and webhooks | Solana Subscriptions & Allowances delegations |
| Reputation engine | chain_observed_credit outcome policy |
Reputation is a read over Float-verified outcomes. It never includes amounts, partners or invoices.
Record it with PUT /v1/businesses/{id}/consent. Without it, reads return 403.
Partner reports never count. Only chain observations Float makes itself.
Quickstart#
- Grab a test key
Test keys start with
fk_test_and only ever touch test data. There is no self-serve signup yet, so see Environments and access for how to get one.export FLOAT_API_KEY=fk_test_… - Create a business
curl -X POST https://api.float.xyz/v1/businesses \ -H "Authorization: Bearer $FLOAT_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{"external_id":"acct_8842","display_name":"Lagos Freight Ltd","country":"NG"}'const res = await fetch("https://api.float.xyz/v1/businesses", { method: "POST", headers: { Authorization: `Bearer ${process.env.FLOAT_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID(), }, body: JSON.stringify({ external_id: "acct_8842", display_name: "Lagos Freight Ltd", country: "NG" }), }); const { data: business } = await res.json(); // business.id → "biz_01J…"import os, uuid, requests res = requests.post( "https://api.float.xyz/v1/businesses", headers={ "Authorization": f"Bearer {os.environ['FLOAT_API_KEY']}", "Idempotency-Key": str(uuid.uuid4()), }, json={"external_id": "acct_8842", "display_name": "Lagos Freight Ltd", "country": "NG"}, ) business = res.json()["data"] # business["id"] → "biz_01J…" - Submit an invoice
Underwriting is asynchronous: you get
202and statuspending.curl -X POST https://api.float.xyz/v1/underwriting_requests \ -H "Authorization: Bearer $FLOAT_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "business": "biz_01J…", "invoice": { "invoice_number": "INV-2026-0091", "amount": { "amount": "4500000", "currency": "USD" }, "issue_date": "2026-09-01", "due_date": "2026-11-30", "debtor": { "name": "Acme Retail Plc", "country": "NG" } } }' - Read the assessment
Poll the request, or follow
GET /v1/events. A completed request embeds the assessment."assessment": { "band": { "key": "moderate_risk", "label": "Moderate risk", "ordinal": 2, "of": 3 }, "confidence": { "level": "medium" }, "verification": { "invoice": "verified", "debtor": "partially_verified", "business": "unverified" }, "reasons": [{ "code": "DEBTOR_PAYMENT_HISTORY_LIMITED", "direction": "negative" }] }
Sandbox#
With a fk_test_ key, an invoice-number suffix picks the outcome. Try INV-0091-SBX-REJECT.
| Suffix | Outcome |
|---|---|
| (none) | completed, band moderate_risk |
-SBX-BAND-<key> | completed with that band (low_risk, high_risk, …) |
-SBX-REJECT | rejected |
-SBX-INFO | requires_information; any information push completes it |
-SBX-FAIL | failed |
-SBX-SILENT | stays processing until the SLA timeout |
-SBX-UNAVAILABLE | retried, then failed / underwriting_dispatch_failed |
engine.name: "float-sandbox" and a SANDBOX_RESULT reason. They are not real assessments.