Skip to content

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

FieldTypeDescription
emailstringUnique email address with DNS verification (max 255 chars).
phonestringUnique phone number in international format with country code (e.g., +421901234567). See Phone Numbers.
passwordstringPassword (min 8 chars, must include letters and numbers, not compromised).
passwordConfirmationstringMust match password.
firstNamestringExpert's first name.
lastNamestringExpert's last name.
dateOfBirthobjectDate of birth object (see below).
billingAddressobjectBilling address object (see below).
companyobjectCompany information object (see below).
bankAccountobjectBank account object (see below).
registrationNumberstringExpert's professional registration number.
regionsarrayArray of region codes (min: 1, max: 8). See Regions.
newsletterSubscribedbooleanSubscribe to newsletters (true or false).
termsAgreedbooleanMust be true to accept terms of service.
verificationDocumentFrontfileFront of ID document (JPEG, PNG, JPG, max 10MB).
verificationDocumentBackfileBack of ID document (JPEG, PNG, JPG, max 10MB).
turnstileTokenstringCloudflare Turnstile verification token.

Date of Birth Object

FieldTypeDescription
dayintegerDay of month (1-31).
monthintegerMonth (1-12).
yearintegerYear of birth (1920-2010).
json
{
  "day": 15,
  "month": 6,
  "year": 1985
}

Address Object

FieldTypeRequiredDescription
firstNamestringNoContact's first name (for shipping addresses only).
lastNamestringNoContact's last name (for shipping addresses only).
line1stringYesStreet address (e.g., "Trieda Andreja Hlinku"). Max 255 characters.
line2stringNoAdditional address info (e.g., unit number). Max 255 characters.
citystringYesCity name. Max 255 characters.
postalCodestringYesPostal code. Max 255 characters.
countrystringYesISO 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 firstName and lastName fields for delivery contact
  • Checkout Address: All fields have a maximum length of 255 characters

Example (Shipping Address):

json
{
  "firstName": "Anton",
  "lastName": "Čomáš",
  "line1": "Trieda Andreja Hlinku",
  "line2": "1/14A",
  "city": "Nitra",
  "postalCode": "949 01",
  "country": "SK"
}

Example (Billing Address):

json
{
  "line1": "Trieda Andreja Hlinku",
  "line2": "1/14A",
  "city": "Nitra",
  "postalCode": "949 01",
  "country": "SK"
}

Company Object

For expert registration, the company object requires:

FieldTypeDescription
businessIdstringBusiness ID (IČO).
taxIdstringTax ID (DIČ).
vatIdstring, nullableVAT ID (IČ DPH), if applicable.

Bank Account Object

For expert registration, only IBAN is required:

FieldTypeDescription
ibanstringSlovak IBAN (must start with SK, 24 characters).

Regions

Experts must select 1-8 Slovak regions where they provide services:

CodeRegion
baBratislavský kraj
bbBanskobystrický kraj
keKošický kraj
nrNitriansky kraj
poPrešovský kraj
tnTrenčiansky kraj
ttTrnavský kraj
zaŽilinský kraj

Example Request

json
{
  "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

json
{
  "data": {
    "token": "5|mK2jX9nNwZ7vB4fQpR3tYhD8cS5aL1uE0iO6nM9vA3e1f7g2"
  }
}

The token is a Bearer token that must be included in the Authorization header for all authenticated requests:

plaintext
Authorization: Bearer 3|4UgEk8lXwa1D6rbYO8fqMfKhgnwdRuSqZb4Woz083ad0785f

Note: 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

json
{
  "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

json
{
  "message": "Access denied for authenticated users."
}