How KYC works
- Create an account with identity and contact information
- Upload identity documents (government-issued ID, proof of address)
- Bluum verifies the documents against the identity information
- Account is approved or rejected
Document types
| Type | Description | Required |
|---|---|---|
id_verification | Government-issued photo ID (passport, driver’s license, national ID) | Yes |
proof_of_address | Utility bill, bank statement, or tax document showing current address | Situational |
w9_form | W-9 tax form | Situational |
Upload a document
account_id sets the document’s owner to that investor; omit it to attach the document to the tenant directly. Use user_id to attach to a dashboard user instead.
Supported file formats: JPEG, PNG, PDF. Maximum file size: 10MB.
Document statuses
| Status | Meaning |
|---|---|
processing | Document uploaded, verification in progress |
approved | Verification successful |
rejected | Verification failed — upload a new document |
Checking document status
Poll the document endpoint or use webhooks:Handling rejections
When a document is rejected, the response includes a reason. Common rejection reasons:| Reason | Resolution |
|---|---|
| Document is blurry or illegible | Re-upload with higher quality image |
| Document is expired | Upload a current, non-expired document |
| Name mismatch | Ensure the name on the document matches the account identity |
| Document type not accepted | Use a supported government-issued photo ID |
Compliance workflow statuses
For more complex compliance scenarios, Bluum uses a multi-step compliance workflow:| Status | Meaning |
|---|---|
IN_PROGRESS | Compliance checks are running |
PENDING_REVIEW | Requires manual review |
APPROVED | All checks passed |
REJECTED | One or more checks failed |
SUSPENDED | Account compliance suspended |
EXPIRED | Compliance window expired, re-verification needed |
Key endpoints
| Method | Path | Description |
|---|---|---|
POST | /documents | Upload a document (multipart) |
GET | /documents | List documents (filter by account_id, user_id, purpose, status) |
GET | /documents/{document_id} | Get document detail |
GET | /documents/{document_id}/download | Download the document bytes |
DELETE | /documents/{document_id} | Delete a document |