INN/OGRN/BIK Suggestions via DaData on Website
DaData — de-facto standard for auto-filling organization details on Russian sites. Service knows by incomplete INN or organization name to return list of companies with full details: OGRN, KPP, legal address, director name, status (active/liquidated). Similarly for banks — by BIK returns bank name, correspondent account, address.
Getting Token
Register at dadata.ru, "Personal Account" → "API Keys". Two keys: Token (for requests) and Secret (for some methods like standardization). For suggestions, only Token needed.
Free tier: 10,000 requests per day. For most registration/request forms sufficient.
Organization Suggestions
Endpoint: POST https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party
function suggestParty(string $query): array
{
$response = Http::withHeaders([
'Authorization' => 'Token ' . config('services.dadata.token'),
'Content-Type' => 'application/json',
])->post('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party', [
'query' => $query,
'count' => 5,
'status' => ['ACTIVE'], // only active
]);
return $response->json('suggestions', []);
}
Response for one organization:
{
"value": "LLC \"YANDEX\"",
"unrestricted_value": "LLC \"YANDEX\"",
"data": {
"inn": "7736207543",
"kpp": "770401001",
"ogrn": "1027700229193",
"name": {
"full_with_opf": "LIMITED LIABILITY COMPANY \"YANDEX\""
},
"management": {
"name": "VOLOZH ARKADIY YURIEVICH",
"post": "CEO"
},
"address": {
"value": "г Moscow, ул Leo Tolstoy, д 16"
},
"state": {
"status": "ACTIVE"
}
}
}
Selecting company from list auto-fills form: INN, KPP, OGRN, legal address, director name — all from one response.
Search by Exact INN or OGRN
When user enters digits (INN — 10 or 12 chars, OGRN — 13), DaData recognizes type automatically. For exact INN query:
$response = Http::withHeaders([
'Authorization' => 'Token ' . config('services.dadata.token'),
'Content-Type' => 'application/json',
])->post('https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party', [
'query' => '7736207543', // exact INN
]);
$party = $response->json('suggestions.0.data');
findById method returns extended response — including director change history, all KPP for head office etc.
Bank Suggestions (BIK)
Endpoint similar: /suggest/bank or /findById/bank.
$response = Http::withHeaders([
'Authorization' => 'Token ' . config('services.dadata.token'),
'Content-Type' => 'application/json',
])->post('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/bank', [
'query' => '044525225',
]);
$bank = $response->json('suggestions.0.data');
// $bank['bic'] => '044525225'
// $bank['correspondent_account'] => '30101810400000000225'
// $bank['name']['payment'] => 'Sberbank'
Frontend Without Backend Proxy
DaData supports direct browser requests. For this, add domain to allowed sources in settings. Then request goes directly from JS:
import { DaDataSuggestions } from 'react-dadata';
import 'react-dadata/dist/react-dadata.css';
<DaDataSuggestions
token="YOUR_TOKEN"
type="party"
onChange={(suggestion) => {
setInn(suggestion?.data?.inn ?? '');
setKpp(suggestion?.data?.kpp ?? '');
setOgrn(suggestion?.data?.ogrn ?? '');
}}
/>
react-dadata library — ready React component, no UI from scratch. Analogs exist for Vue and vanilla JS.
Direct requests downside: token visible in client code. If unacceptable — make backend proxy (controller with caching) not exposing key.
Caching
Organization suggestions worth caching — organization data changes rarely. Simple Laravel variant:
$data = Cache::remember("party_{$inn}", now()->addHours(24), function () use ($inn) {
return $this->fetchFromDadata($inn);
});
Cache reduces quota spending and speeds repeat requests. 24-hour retention — reasonable compromise.
Typical Implementation Scenario
Legal entity registration form on site: field "INN or company name" with DaData suggestions. Selecting from list auto-fills remaining fields (KPP, OGRN, address, director). Removes input errors and cuts form-fill time from 3–5 minutes to 30 seconds.
Integration takes 2–4 hours: token getting, proxy controller writing, frontend component connection, edge cases testing (LLC vs IP, liquidated companies).







