Register Expert
Registers a new expert with complete business details, identity verification, and returns an authentication token.
Important: Expert registration requires significantly more information than client registration, including business details, bank account, identity documents, and service regions.
Bot Protection
This endpoint requires a valid Cloudflare Turnstile token when bot protection is enabled. See the Turnstile Integration Guide for frontend setup instructions.
HTTP Request
POST /api/v1/auth/register/expert
This endpoint requires multipart/form-data encoding due to file uploads.
Required Fields
| Field | Type | Description |
|---|---|---|
email | string | Unique email address with DNS verification (max 255 chars). |
phone | string | Unique phone number in international format with country code (e.g., +421901234567). See Phone Numbers. |
password | string | Password (min 8 chars, must include letters and numbers, not compromised). |
passwordConfirmation | string | Must match password. |
firstName | string | Expert's first name. |
lastName | string | Expert's last name. |
dateOfBirth | object | Date of birth object (see below). |
billingAddress | object | Billing address object (see below). |
company | object | Company information object (see below). |
bankAccount | object | Bank account object (see below). |
registrationNumber | string | Expert's professional registration number. |
regions | array | Array of region codes (min: 1, max: 8). See Regions. |
newsletterSubscribed | boolean | Subscribe to newsletters (true or false). |
termsAgreed | boolean | Must be true to accept terms of service. |
verificationDocumentFront | file | Front of ID document (JPEG, PNG, JPG, max 10MB). |
verificationDocumentBack | file | Back of ID document (JPEG, PNG, JPG, max 10MB). |
turnstileToken | string | Cloudflare Turnstile verification token. |
Date of Birth Object
| Field | Type | Description |
|---|---|---|
| day | integer | Day of month (1-31). |
| month | integer | Month (1-12). |
| year | integer | Year of birth (1920-2010). |
{
"day": 15,
"month": 6,
"year": 1985
}Address Object
| Field | Type | Required | Description |
|---|---|---|---|
firstName | string | No | Contact's first name (for shipping addresses only). |
lastName | string | No | Contact's last name (for shipping addresses only). |
line1 | string | Yes | Street address (e.g., "Trieda Andreja Hlinku"). Max 255 characters. |
line2 | string | No | Additional address info (e.g., unit number). Max 255 characters. |
city | string | Yes | City name. Max 255 characters. |
postalCode | string | Yes | Postal code. Max 255 characters. |
country | string | Yes | ISO 3166-1 Alpha-2 country code (e.g., "SK", "CZ", "HU"). 2 chars. |
Address Types
- Billing Address: Contains core address fields only (no name fields)
- Shipping Address: Includes optional
firstNameandlastNamefields for delivery contact - Checkout Address: All fields have a maximum length of 255 characters
Example (Shipping Address):
{
"firstName": "Anton",
"lastName": "Čomáš",
"line1": "Trieda Andreja Hlinku",
"line2": "1/14A",
"city": "Nitra",
"postalCode": "949 01",
"country": "SK"
}Example (Billing Address):
{
"line1": "Trieda Andreja Hlinku",
"line2": "1/14A",
"city": "Nitra",
"postalCode": "949 01",
"country": "SK"
}Company Object
For expert registration, the company object requires:
| Field | Type | Description |
|---|---|---|
businessId | string | Business ID (IČO). |
taxId | string | Tax ID (DIČ). |
vatId | string, nullable | VAT ID (IČ DPH), if applicable. |
Bank Account Object
For expert registration, only IBAN is required:
| Field | Type | Description |
|---|---|---|
iban | string | Slovak IBAN (must start with SK, 24 characters). |
Regions
Experts must select 1-8 Slovak regions where they provide services:
| Code | Region |
|---|---|
ba | Bratislavský kraj |
bb | Banskobystrický kraj |
ke | Košický kraj |
nr | Nitriansky kraj |
po | Prešovský kraj |
tn | Trenčiansky kraj |
tt | Trnavský kraj |
za | Žilinský kraj |
Example Request
{
"email": "expert@example.com",
"phone": "+421901234567",
"password": "SecurePass123",
"passwordConfirmation": "SecurePass123",
"firstName": "Ján",
"lastName": "Novák",
"dateOfBirth": {
"day": 15,
"month": 6,
"year": 1985
},
"billingAddress": {
"line1": "Trieda Andreja Hlinku 1",
"line2": "14A",
"city": "Nitra",
"postalCode": "949 01",
"country": "SK"
},
"company": {
"businessId": "12345678",
"taxId": "2023456789",
"vatId": "SK2023456789"
},
"bankAccount": {
"iban": "SK3112000000198742637541"
},
"registrationNumber": "REG123456",
"regions": ["nr", "tt", "ba"],
"newsletterSubscribed": true,
"termsAgreed": true,
"verificationDocumentFront": <file>,
"verificationDocumentBack": <file>
}Note: When sending as
multipart/form-data, nested objects should be sent as JSON strings or flattened fields (e.g.,dateOfBirth[day]=15).
Response
201 Created
{
"data": {
"token": "5|mK2jX9nNwZ7vB4fQpR3tYhD8cS5aL1uE0iO6nM9vA3e1f7g2"
}
}The token is a Bearer token that must be included in the Authorization header for all authenticated requests:
Authorization: Bearer 3|4UgEk8lXwa1D6rbYO8fqMfKhgnwdRuSqZb4Woz083ad0785fNote: After registration, a verification email is sent. The expert receives immediate API access with the token, but may need email verification for certain account features. Identity documents are reviewed before the expert can accept testimonies.
Error Handling
For invalid data:
422 Unprocessable Entity
{
"message": "The email field must be a valid email address. (and 4 more errors)",
"errors": {
"email": [
"The email field must be a valid email address."
],
"phone": [
"The phone has already been taken."
],
"password": [
"The password field must be at least 8 characters.",
"The password field confirmation does not match."
],
"termsAgreed": [
"The terms agreed field must be accepted."
],
"bankAccount.iban": [
"The bank account.iban field must be a valid Slovak (SK) IBAN."
]
}
}If a user is already authenticated:
403 Forbidden
{
"message": "Access denied for authenticated users."
}