Create users
Register Cobru users from your product, fetch categories, and complete email and phone verification.
This page consolidates legacy Cobru documentation. Before using it in production, confirm current required fields, document codes, and verification behavior with your Cobru team.
Creation endpoint
POST https://dev.cobru.co/user/This endpoint registers a new user in the platform.
brand field
The brand field identifies the brand under which the user is registered. This value links
the registration to a company, partner, or specific product.
{
"brand": "MY_BRAND"
}username field
During registration, username is sent with the user's phone number or another identifier if
your integration requires it.
{
"username": "09906786442"
}After the user is created, Cobru may return the username with the brand prefix.
{
"username": "MY_BRAND-09906786442"
}The brand prefix on username applies in the response or final stored value, not in the
initial creation payload.
Categories and subcategories
Before registering the user, fetch the categories and subcategories that will be sent in the payload.
Get categories
GET https://prod.cobru.co/category/{
"error": false,
"message": [
{
"id": 99,
"name": "Actividades De Organizaciones Y Entidades Extraterritoriales."
},
{
"id": 98,
"name": "Actividades No Diferenciadas De Los Hogares Individuales Como Productores De Bienes Y Servicios Para Uso Propio."
},
{
"id": 97,
"name": "Actividades De Los Hogares Individuales Como Empleadores De Personal Doméstico."
},
{
"id": 96,
"name": "Otras Actividades De Servicios Personales."
}
]
}Get subcategories by category
GET https://prod.cobru.co/subcategory?category_id=66{
"error": false,
"message": [
{
"id": 556,
"name": "6630 Actividades De Administración De Fondos."
},
{
"id": 555,
"name": "663 Actividades De Administración De Fondos."
},
{
"id": 554,
"name": "6629 Evaluación De Riesgos Y Daños, Y Otras Actividades De Servicios Auxiliares."
}
]
}Category rules
categorymust be sent with the selected categoryid.subcategorymust be sent with the matching subcategoryid.- Subcategories must be fetched with the previously selected
category_id.
Natural person example payload
{
"username": "09906786442",
"first_name": "Test Testeo",
"last_name": "Apellido Testeo",
"email": "Teste@testecobruuuuu.com",
"password": "12345678",
"phone": "09906786442",
"document_type": "0",
"document_number": "11111122223",
"country_code": "+57",
"gender": 2,
"date_birth": "2001-08-08",
"type_person": 1,
"date_expiration": "2019-08-08",
"subcategory": 745,
"profile_picture": "url_profile",
"documents": [
{
"id": 2,
"url": "url_documento"
},
{
"id": 1,
"url": "url_documento"
},
{
"id": 3,
"url": "url_documento"
}
],
"category": 99,
"platform": "ios",
"referal_code": "",
"brand": "MY_BRAND"
}Legal entity example payload
To register a company, send type_person: 2. In this case, first_name contains the company
name, document_type is sent as "3", and document_number contains the NIT. Fields with the
_legal suffix belong to the legal representative.
{
"username": "3001234567",
"first_name": "ACME S.A.S.",
"last_name": "",
"email": "admin@acme.com",
"password": "Password123*",
"phone": "3001234567",
"document_type": "3",
"document_number": "901234567",
"country_code": "+57",
"gender": 1,
"date_birth": "1990-05-15",
"type_person": 2,
"date_expiration": "2015-06-20",
"gender_legal": 1,
"subcategory": 12,
"profile_picture": "https://...",
"document_type_legal": "1",
"document_number_legal": "1045672890",
"name_legal": "Carlos Alberto",
"last_name_legal": "Pérez Gómez",
"date_birth_legal": "1990-05-15",
"date_expiration_legal": "2015-06-20",
"documents": [],
"category": 4,
"platform": "ios",
"referal_code": "",
"brand": "MY_BRAND"
}Main fields
| Field | Type | Description |
|---|---|---|
username | string | User sent during registration, usually the phone number. |
first_name | string | User first name, or company name when type_person is 2. |
last_name | string | User last name. For legal entities, this can be sent empty. |
email | string | User email address. |
password | string | User password. |
phone | string | Phone number. |
document_type | string | Document type. For legal entities, send "3". |
document_number | string | Document number. For legal entities, this is the NIT. |
country_code | string | Country calling code. |
gender | number | User gender. |
date_birth | string | Birth date. |
type_person | number | Person type: 1 for natural person, 2 for legal entity. |
date_expiration | string | Issue or expiration date according to system logic. |
gender_legal | number | Legal representative gender for legal entities. |
subcategory | number | Selected subcategory ID. |
profile_picture | string | Profile picture URL. |
document_type_legal | string | Legal representative document type. |
document_number_legal | string | Legal representative document number. |
name_legal | string | Legal representative given names. |
last_name_legal | string | Legal representative last names. |
date_birth_legal | string | Legal representative birth date. |
date_expiration_legal | string | Legal representative document issue or expiration date. |
documents | array | User document array. |
category | number | Selected category ID. |
platform | string | Platform where the user is registered. |
referal_code | string | Referral code, if applicable. |
brand | string | Brand identifier associated with the registration. |
Person and gender values
Use these numeric values for type_person, gender, and gender_legal.
| Field | Value | Meaning |
|---|---|---|
type_person | 1 | Natural person. |
type_person | 2 | Legal entity. |
gender / gender_legal | 0 | None. |
gender / gender_legal | 1 | Female. |
gender / gender_legal | 2 | Male. |
documents structure
The documents field receives an array of objects for the user's documents. Each object must
include:
id: document type identifier.url: uploaded document URL.
[
{
"id": 2,
"url": "url_documento"
},
{
"id": 1,
"url": "url_documento"
}
]Expected response
When the information is valid and the process completes successfully, the user is created with
a 201 response.
{
"error": false,
"message": {
"email": "Teste@testecobruuuuu.com",
"first_name": "Edeiver Testeo",
"gender": null,
"gender_legal": null,
"id": 2093,
"last_name": "Apellido Testeo",
"username": "MY_BRAND-09906786442"
},
"status": 201
}Email and phone confirmation
To send confirmation codes, call the confirmation request service first.
POST http://dev.cobru.co/request_confirmation/
Content-Type: application/json| Field | Type | Description |
|---|---|---|
phone | boolean | Indicates whether the code will be sent to the phone. |
email | boolean | Indicates whether the code will be sent to the email address. |
Then confirm each channel with a separate API call.
Confirm email
POST http://dev.cobru.co/verify_email/
Content-Type: application/json| Field | Type | Description |
|---|---|---|
code | integer | Code received by email. |
Confirm phone
POST http://dev.cobru.co/verify_phone/
Content-Type: application/json| Field | Type | Description |
|---|---|---|
code | integer | Code received by phone. |
Important notes
documentsmust be sent as an array of objects.- For an initial legal entity registration,
documentscan be sent as an empty array; document validation is handled later from the Home card. - Each document must be sent with a valid URL in the
urlfield. profile_picturemust also be sent as a valid URL.brandmust contain the brand identifier associated with the registration.- The initial payload
usernameis sent without the brand prefix. - Cobru may return or store the final
usernamewith the brand prefix after registration. - Categories and subcategories must be fetched beforehand so the correct IDs are sent.
- For legal entities,
categoryandsubcategorycome from the activity or category selectors.
Use the user in transfers
After registration and verification, you can use the user in money transfer flows:
The user sending money must have email and phone in a verified state.