Bit Capital

The Bit Capital Developer Hub

Welcome to the Bit Capital developer hub. You'll find comprehensive guides and documentation to help you start working with Bit Capital as quickly as possible, as well as support if you get stuck. Let's jump right in!

Guides    API Reference

Document Verification

To ensure the account holder is the one requesting the sign up, we require you to upload its documents for automated verification. The list of required documents depends on your business model, but usually just an identification document with photo is enough.

Uploading Documents

To upload a document you need to know the User ID and its Document Type enum.

Document Types:

  • brl_individual_reg (front / back / both_sides / selfie)
  • brl_drivers_license (front / back / both_sides / selfie)
  • brl_address_statement (front / selfie)
  • passport (front / selfie)
import fs from 'fs';
import util from 'util';

const open = uitl.promisify(;

// Gather information for upload
const type = DocumentType.BRL_INDIVIDUAL_REG;
const userId = '9a07b821-c143-4e7f-bfda-9adf48c836ee';

// Open image file using FS
const file = await open('photo.png', 'r');

// Upload document
const document = await bitcapital
	.uploadPicture(userId, type, file);

Some platforms may have problems handling binary files and Form Data, so you may send a base64 encoded image string instead. This is not desirable as it may increase the payload size, but may be useful in the integration steps.

// Gather information for upload
const type = DocumentType.BRL_INDIVIDUAL_REG;
const userId = '9a07b821-c143-4e7f-bfda-9adf48c836ee';

// The number associated with this document, depending on ins type
// Usually an unique code printed in the front, such as RG number or CPF
const number = '1234567890';

// Get image from Base64 string

// Upload document
const document = await bitcapital
	.uploadPictureFromBase64(userId, type, number, imageStr);
curl --location --request POST '' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 0000000000000000000000000000000000000000'\
--data-raw '{
	"number": "123456"

After all required documents are uploaded, the consumer will be sent to a queue automatically with the state "processing_documents". All state changes will be notified with Domain postbacks.

After all checks, if the user is approved it will be sent to the "processing_wallets" states, for automated account creation in the network. After all automated processing is done, it will be the "ready" state, fully operational.

Failure States

If anything fails, it may be sent to:

  • rejected, if the consumer was checked and the result was denied for compliance reasons,
  • invalid_documents, when documents are not valid for checking in this instance,
  • manual_verification, when additional documents or further checking is required in this instance,
  • provider_failed, if something went wrong in the external custody provider after the internal checks passed, contact the support.

Updating existing documents

To override previously sent documents, just upload new sides to a document with the same type. We keep track of document updates, but only the latest submitted version will be considered for any verification purpose.

Manual Verification

Some users cannot be verified in a fully automated algorithm, so in some cases your signup might go to the manual_verification state. This usually happens with blurred documents, or some mistyped information by the users.

Some other cases might be more complex and require a full compliance analysis, on which we might request you some additional documents:

  • A valid and official address statement to verify the card delivery destination
  • A valid tax revenue report or equivalent Receita Federal / IRS document.

You can check the reason and the actions available in the Consumer States. We encourage opening a ticket in the Help Desk for further support, whenever needed.

Updated 6 days ago

Document Verification

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.