Download OpenAPI specification:Download
This API allows the Business Registry (Ariregister) to reserve .ee domain names
on behalf of entrepreneurs during the company registration process.
| Term | Description |
|---|---|
| Registration code (password) | A unique secret code returned when a domain is reserved. The entrepreneur must provide this code to an accredited .ee registrar to complete the domain registration via the EPP protocol. Without this code, the domain cannot be registered. |
| user_unique_id | A 10-character identifier generated for each reservation request. It links a user session to their reserved domains. Must be stored by the Business Registry portal to retrieve reservation details later. |
| invoice_number | An invoice identifier generated by the billing system for paid (long-term) reservations. Must be stored together with user_unique_id to check payment status. |
| linkpay_url | A one-time Everypay payment page URL. The Business Registry portal should redirect the user to this URL to complete the payment. No automatic callback redirect — use the status endpoint to poll for payment completion. |
The Business Registry portal sends the organization name to the API.
The API generates domain variants (with and without hyphens, across all .ee zones),
removes common legal forms (AS, OU, FIE, MTU, etc.), checks availability in the domain registry,
and returns only the domains that are both unregistered and not already reserved.
Endpoint: GET /api/v1/business_registry/domain_names/{organization_name}
The user picks one or more domain names from the suggestions. The Business Registry portal sends them to one of the reservation endpoints:
POST /api/v1/business_registry/reserve_domainspassword) for each domainuser_unique_id to retrieve reservation details laterPOST /api/v1/business_registry/long_reserve_domainslinkpay_url)pending status until payment is completedinvoice_number and user_unique_id to check payment status laterGET /api/v1/business_registry/reserve_domains/{user_unique_id}GET /api/v1/business_registry/long_reserve_domains_status?invoice_number=...&user_unique_id=...paid, the response includes registration codes for each domainThe entrepreneur takes the registration code (password) to any accredited .ee registrar
and registers the domain via the EPP protocol. Once registered, the domain is removed
from the reserved list.
Both status endpoints (/reserve_domains/{user_unique_id} and /long_reserve_domains_status)
return a status field for each domain, allowing the Business Registry portal to show
only the domains that still need action:
| Status | Meaning | Fields present |
|---|---|---|
reserved |
Domain is reserved and waiting for registration | name, status, password, expire_at |
registered |
Domain has been registered through a registrar | name, status |
expired |
Reservation has expired (domain is no longer held) | name, status |
Typical usage: Filter the response to show only domains with status: "reserved" —
these are the domains the user still needs to register.
user_unique_idAll endpoints require two forms of authentication:
Authorization header must contain a valid API tokenAuthorization: Bearer <your-api-token>
[\p{L}\p{N}\-\.]+ (letters, numbers, hyphens, dots)[\p{L}\p{N}\s\-]+Generates domain name variants based on the organization name and returns only those that are currently available for registration.
How it works:
examplecompany) and hyphenated (example-company).ee zone originsNote: Expired reservations are automatically cleaned up during the availability check, so a previously reserved domain may become available again after its reservation period ends.
| organization_name required | string <= 100 characters ^[\p{L}\p{N}\s\-]+$ Example: Example Company OU Name of the organization to generate domain variants for. Common legal forms (AS, OU, FIE, MTU, etc.) are automatically removed before generating variants. |
{- "variants": [
- "examplecompany.ee",
- "example-company.ee"
]
}Creates free short-term domain reservations (7 days). Reserved domains receive a unique
registration code (password) that the entrepreneur must use to register the domain
at an accredited .ee registrar.
Important behaviors:
422 error is returnedWhat to store: Save the user_unique_id from the response. You will need it to retrieve
the registration codes later via GET /reserve_domains/{user_unique_id}.
| domain_names required | Array of strings [ 1 .. 20 ] items Array of domain names to reserve. Must include the zone (e.g., |
{- "domain_names": [
- "examplecompany.ee",
- "example-company.ee"
]
}{- "message": "Domains reserved successfully",
- "reserved_domains": [
- {
- "name": "examplecompany.ee",
- "password": "0b23bf0decfb2724ebd37e46715b63d8",
- "expire_at": "2025-03-13T14:30:00.000+02:00"
}, - {
- "name": "example-company.ee",
- "password": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
- "expire_at": "2025-03-13T14:30:00.000+02:00"
}
], - "user_unique_id": "f8d51313-b"
}Retrieves the current state of domains from a short-term (free) reservation.
Each domain in the response includes a status field that reflects its current state:
reserved — Domain is still reserved. The response includes the password (registration code)
and expire_at date. The entrepreneur can use the registration code to register the domain at a registrar.registered — Domain has already been registered through a registrar using the registration code.
No password or expire_at is returned.expired — The 7-day reservation period has ended. The domain is no longer held and may be
taken by someone else. No password or expire_at is returned.Typical usage: Display only domains with status: "reserved" to the user —
these are the ones that still need to be registered at a registrar.
Note: For long-term (paid) reservations, use
GET /api/v1/business_registry/long_reserve_domains_status instead.
| user_unique_id required | string Example: f8d51313-b The unique identifier returned in the |
[- {
- "name": "examplecompany.ee",
- "status": "reserved",
- "password": "0b23bf0decfb2724ebd37e46715b63d8",
- "expire_at": "2025-03-13T14:30:00.000+02:00"
}, - {
- "name": "example-company.ee",
- "status": "reserved",
- "password": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
- "expire_at": "2025-03-13T14:30:00.000+02:00"
}
]Creates a paid long-term domain reservation (1 year). This endpoint does not reserve the domains immediately — it creates an invoice and returns a payment link.
Flow:
linkpay_url, invoice_number, and user_unique_idlinkpay_url to complete payment in EverypayGET /long_reserve_domains_status?invoice_number=...&user_unique_id=... to check payment statusImportant behaviors:
available_domains field in the response shows which domains were actually includedWhat to store: Save both invoice_number and user_unique_id — they are required
to check payment status and retrieve registration codes later.
| domain_names required | Array of strings [ 1 .. 20 ] items Array of domain names to reserve. Must include the zone (e.g., |
{- "domain_names": [
- "examplecompany.ee",
- "example-company.ee"
]
}{- "message": "Domains are in pending status. Need to pay for domains.",
- "invoice_number": 1234567,
- "user_unique_id": "a1b2c3d4e5",
- "available_domains": [
- "examplecompany.ee",
- "example-company.ee"
]
}Checks the payment status of a long-term domain reservation invoice and returns registration codes once paid.
How to use:
status changes to paid, the registration codes are availablereserved_domains array to the user, filtering by status: "reserved"Response variants:
paid — Invoice is paid. The response includes reserved_domains with registration codes
and domain statuses (reserved, registered, or expired).pending, unpaid, failed, error, cancelled) — Invoice is not yet paid.
The response includes the names array (plain list of domain names without registration codes).Side effect: When the invoice status is paid, calling this endpoint also triggers
the creation of reserved domain records if they haven't been created yet (idempotent operation).
Note: For short-term (free) reservations, use
GET /api/v1/business_registry/reserve_domains/{user_unique_id} instead.
| invoice_number required | string Example: invoice_number=1234567 Invoice number returned by |
| user_unique_id required | string Example: user_unique_id=a1b2c3d4e5 Unique identifier returned by |
{- "status": "paid",
- "message": "Payment received",
- "reserved_domains": [
- {
- "name": "examplecompany.ee",
- "status": "reserved",
- "password": "0b23bf0decfb2724ebd37e46715b63d8",
- "expire_at": "2026-03-06T14:30:00.000+02:00"
}, - {
- "name": "example-company.ee",
- "status": "reserved",
- "password": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
- "expire_at": "2026-03-06T14:30:00.000+02:00"
}
]
}