Стандартизация

Стандартизация приводит уже введённые данные в порядок: разбирает строку на части, исправляет регистр и опечатки, дополняет тем, чего в ней не было. Это пакетный разбор того, что уже лежит в базе или пришло из файла, — для автодополнения при вводе есть подсказки.

У каждого метода два адреса. Первый — наш: ответ приходит в нашем формате, со всеми полями. Второй — совместимый с DaData: тот же метод, но ответ в их формате, чтобы при переезде не переписывать разбор ответа. Оба адреса принимают одинаковое тело запроса.

Стандартизация адреса

POST/v1/clean/addressсовместимо с DaData: /api/v1/clean/address

Приводит свободную строку адреса к структуре — той же, что в разделе «Адреса». Для разбора выгрузок: на входе список строк, на выходе по одному разобранному адресу на каждую.

Параметры запроса

ПолеТипОписание
itemsrequiredarrayСтроки адреса для разбора, до 1 000 за запрос; либо тело запроса — сразу массив строк (ответ в формате DaData).
// к нам — свой формат ответа, пакет в items
POST /v1/clean/address
{ "items": ["мск тверская 7", "спб невский 1"] }

// совместимо с DaData — телом массив строк, ответ в их формате
POST /api/v1/clean/address
["мск тверская 7", "спб невский 1"]

Поля ответа

Поля описаны для записи внутри results — так отвечает наш адрес. По совместимому адресу приходит просто массив таких записей, без обёртки.

ПолеТипОписание
sourcestringИсходная строка адреса.
qcintegerКачество разбора: 0 — адрес распознан, иначе разобран частично.
unparsed_partsstringЧасти строки, которые не удалось разобрать; null — если разобрано полностью.
addressobjectРазобранный адрес — та же структура, что в разделе «Адреса» (value, full, components, codes, geo и т.д.).

Стандартизация ФИО

POST/v1/clean/fioсовместимо с DaData: /api/v1/clean/name

Разбирает ФИО на части, определяет пол и исправляет регистр. В нашем формате добавляет склонения по падежам — их можно сразу подставлять в документы. Для автодополнения при вводе есть подсказки ФИО.

Параметры запроса

ПолеТипОписание
itemsrequiredarrayСтроки ФИО для разбора, до 10 000 за запрос; либо тело запроса — сразу массив строк (ответ в формате DaData).
// к нам — свой формат ответа: пол male|female|unknown, падежи, признак транслитерации
POST /v1/clean/fio
{ "items": ["иванова мария сергеевна"] }

// совместимо с DaData — телом массив строк, ответ в их формате (пол М|Ж|НД, без падежей)
POST /api/v1/clean/name
["иванова мария сергеевна"]

Поля ответа

Поля описаны для записи внутри results — так отвечает наш адрес. По совместимому адресу приходит просто массив таких записей, без обёртки.

ПолеТипОписание
sourcestringИсходная строка ФИО из запроса — для сопоставления ответа со входом.
resultstringСтандартизированное ФИО в правильном порядке и регистре; null, если распознать не удалось.
surnamestringФамилия с корректной заглавной буквой; null, если не выделена.
namestringИмя с корректной заглавной буквой; null, если не выделено.
patronymicstringОтчество с корректной заглавной буквой; null, если отсутствует.
genderstringПол: male — мужской, female — женский, unknown — определить не удалось.
transliteratedbooltrue, если ввод был на латинице и приведён к кириллице (результат — реконструкция исходного написания).
qcintegerКод качества разбора: 0 — ФИО уверенно распознано, 1 — разобрано неуверенно (только фамилия, инициалы или часть определена по позиции).
casesobjectСклонения ФИО по падежам (ключи: nominative, genitive, dative, accusative, instrumental, prepositional) для подстановки в документы; null, если склонять нечего.
cases.{падеж}.surnamestringФамилия в соответствующем падеже; null, если не выделена.
cases.{падеж}.namestringИмя в соответствующем падеже; null, если не выделено.
cases.{падеж}.patronymicstringОтчество в соответствующем падеже; null, если отсутствует.

По совместимому адресу приходят поля source, result, surname, name, patronymic и qc; пол — как М, Ж или НД (нет данных). Полей cases и transliterated в нём нет.

Проверка телефона

Проверка номера и оператора

POST/v1/find/phone

Проверяет тип номера, регион и часовой пояс по плану нумерации. Текущий оператор, перенос, ИНН и коды MCC/MNC доступны на тарифах «Бизнес» и «Корпоративный» (грант phone_mnp); на остальных тарифах эти поля отсутствуют. Нужен секретный ключ с правом find:phone (в настройках ключа — «Проверка номера»). Метод входит в дневной лимит: каждый номер, в том числе в пакете, считается одним запросом. Совместимого метода DaData для этой проверки нет.

ПолеТипОписание
querystringОдин номер телефона. Нераспознанная строка возвращает пустой suggestions.
itemsarrayПакет номеров. Ответ results сохраняет порядок и число входных строк; нераспознанный номер возвращает карточку с qc и пустыми полями.
maskstringФормат вывода номера: e164, intl, national, intl_sp, dash, spaces, plain, plain8 или свой шаблон из 10 плейсхолдеров (#, X, x, 9, 0, N, n). Код страны и префикс задаются литералами. Например: +7 (XXX) XXX-XX-XX. Без маски — стандартный формат.

Для query ответ имеет вид {query, suggestions}: один найденный номер или пустой список. Для items ответ {results} содержит карточку на каждую входную строку в том же порядке; нераспознанные строки помечены qc. Поля карточки описаны ниже. ИНН, MCC и MNC передаются строками и могут быть null, если сведений в источнике нет.

Стандартизация номера

POST/v1/clean/phoneсовместимо с DaData: /api/v1/clean/phone

Нормализует номера РФ и зарубежных стран: определяет страну, тип (мобильный/городской) и валидность. Для РФ дополнительно — оператор (с учётом переноса номера), регион и часовой пояс.

Формат вывода задаётся полем mask в теле запроса. Допустимые значения: имя пресета из списка ниже ("mask": "intl") или пользовательский шаблон ("mask": "+7 (XXX) XXX-XX-XX"), где плейсхолдер цифры — X, # или 9; остальные символы сохраняются без изменений. Маска накладывается на национальный номер любой страны:

  • e164 → +79627302371
  • intl → +7 (962) 730-23-71
  • national → 8 (962) 730-23-71
  • intl_sp → +7 962 730-23-71
  • dash → +7-962-730-23-71
  • spaces → 8 962 730 23 71
  • plain → 9627302371
  • plain8 → 89627302371
  • свой шаблон, напр. +7 (XXX) XXX-XX-XX

Параметры запроса

ПолеТипОписание
itemsrequiredarrayСтроки телефона для разбора, до 10 000 за запрос; либо тело запроса — сразу массив строк (ответ в формате DaData).
maskstringФормат вывода номера: имя пресета (e164, intl, national, intl_sp, dash и др.) или свой шаблон вида +7 (XXX) XXX-XX-XX.
// mask — ИМЯ пресета (intl / e164 / national …) ИЛИ свой шаблон "+7 (XXX) XXX-XX-XX"
POST /v1/clean/phone
{ "items": ["89627302371", "+375 29 491-19-11"],
  "mask": "intl" }

// совместимо с DaData — телом массив строк, ответ в их формате
POST /api/v1/clean/phone
["89627302371", "+375 29 491-19-11"]

Поля ответа

Поля описаны для записи внутри results — так отвечает наш адрес. По совместимому адресу приходит просто массив таких записей, без обёртки.

ПолеТипОписание
sourcestringИсходная строка телефона в том виде, как она была передана.
phonestringТелефон в стандартизованном формате (для РФ — +7 (XXX) XXX-XX-XX, для других стран — международный формат); null, если номер не распознан.
typestringТип номера: mobile — мобильный, direct_mobile — прямой мобильный, landline — стационарный, toll_free — бесплатный (8-800), voip — IP-телефония, premium_rate — платный, unknown — не определён; null, если номер невалиден.
is_validboolВалиден ли номер по плану нумерации страны: true — валиден, false — распознан, но невалиден.
countrystringНазвание страны номера (например, Россия, Беларусь); null, если номер не распознан.
country_codestringТелефонный код страны без знака «+» (например, 7 — Россия, 375 — Беларусь); null, если номер не распознан.
city_codestringКод города/оператора — часть номера после кода страны; null, если у плана нумерации страны его нет или номер не распознан.
numberstringАбонентский номер без кода страны и кода города/оператора.
extensionstringДобавочный (внутренний) номер, если он был в исходной строке; иначе null.
operatorstringОператор связи номера с учётом переносимости (бренд, например МегаФон); только для номеров РФ.
operator_innstringИНН текущего оператора по плану нумерации или базе перенесённых номеров; null, если сведений нет.
operator_originalstringИсходный оператор по плану нумерации; присутствует только при факте переноса номера к другому оператору.
portedboolПризнак переноса номера к другому оператору: true — номер перенесён (текущий оператор отличается от исходного), false — не перенесён.
mccstringКод страны сети E.212, строка; заполняется вместе с mnc, иначе null.
mncstringКод мобильной сети E.212, строка с сохранением ведущих нулей; null, если код не определён.
regionstringРегион РФ, к которому относится номер; только для номеров РФ (для 8-800 пустой).
citystringГород номера (для стационарных номеров РФ); иначе null.
timezonestringЧасовой пояс региона номера в формате IANA (например, Europe/Moscow); только для номеров РФ.
qcintegerКод качества разбора: 0 — номер корректен и валиден, 1 — распознан с допущениями или невалиден по плану нумерации, 3 — пустой ввод или мусор.

Проверка email

POST/v1/clean/emailсовместимо с DaData: /api/v1/clean/email

Проверяет синтаксис, исправляет опечатки в домене и определяет тип адреса. По флагу check_mx проверяет ещё, принимает ли домен почту.

Параметры запроса

ПолеТипОписание
itemsrequiredarrayСтроки email для разбора, до 10 000 за запрос; либо тело запроса — сразу массив строк (ответ в формате DaData).
check_mxboolПроверить почтовый сервер домена (MX-запись) и заполнить поле mx. По умолчанию false. Проверка идёт в DNS, поэтому на весь запрос ждём её не дольше 1,5 с: домен, чей DNS не ответил, получает mx: null, ответ не задерживается. В формате DaData поля mx нет, и флаг там не действует.
// к нам — свой формат ответа
POST /v1/clean/email
{ "items": ["maria@hintdata.ru", "info@bad..ru"], "check_mx": true }

// совместимо с DaData — телом массив строк, ответ в их формате
POST /api/v1/clean/email
["maria@hintdata.ru", "info@bad..ru"]

Поля ответа

Поля описаны для записи внутри results — так отвечает наш адрес. По совместимому адресу приходит массив записей DaData без обёртки: source, email, local, domain, type (PERSONAL, CORPORATE, ROLE или DISPOSABLE) и qc с кодами DaData: 0 — корректен, 1 — некорректен, 2 — пусто или мусор, 3 — одноразовый, 4 — исправлены опечатки.

ПолеТипОписание
sourcestringИсходный адрес ровно в том виде, как он был передан на вход.
emailstringОчищенный и стандартизированный адрес; null, если адрес некорректен.
localstringЛокальная часть адреса до символа @; null, если адрес некорректен.
domainstringДоменная часть адреса после символа @; null, если адрес некорректен.
typestringКласс домена: personal — личный почтовый сервис, corporate — корпоративный домен; null, если адрес некорректен.
roleboolРолевой адрес (info@, sales@, noreply@ и т.п.): true — служебный, не персональный; false — обычный.
disposableboolОдноразовый временный домен: true — да, false — нет; null, если адрес некорректен.
mxboolДомен принимает почту (есть MX-запись): true — да, false — нет. Заполняется только при check_mx: true; null без флага, для некорректного адреса и если DNS домена не ответил за отведённое время.
correctedboolДомен исправлен: true — устранена опечатка в домене (gmial → gmail), false — без изменений.
normalizedboolАдрес нормализован: true — схлопнуты подряд идущие точки в локальной части, false — без изменений.
qcintegerКод качества: 0 — корректен без замечаний; 1 — корректен с замечанием (домен исправлен, нормализован, одноразовый или ролевой); 2 — некорректен; 3 — пустой ввод.

Стандартизация даты рождения

POST/v1/clean/birthdateсовместимо с DaData: /api/v1/clean/birthdate

Приводит дату к виду ДД.ММ.ГГГГ, раскладывает на год, месяц и день и считает возраст с признаком совершеннолетия. Понимает запись цифрами и словом. Что не удалось разобрать — видно по коду качества в ответе.

Параметры запроса

ПолеТипОписание
itemsrequiredarrayСтроки даты рождения для разбора, до 10 000 за запрос; либо тело запроса — сразу массив строк (ответ в формате DaData).
// к нам — свой формат ответа
POST /v1/clean/birthdate
{ "items": ["04 февраля 1985 г."] }

// совместимо с DaData — телом массив строк, ответ в их формате
POST /api/v1/clean/birthdate
["04 февраля 1985 г."]

Поля ответа

Поля описаны для записи внутри results — так отвечает наш адрес. По совместимому адресу приходит просто массив таких записей, без обёртки.

ПолеТипОписание
sourcestringИсходное значение даты в том виде, как оно было передано.
birthdatestringНормализованная дата рождения в формате ДД.ММ.ГГГГ; null, если дата не распознана.
yearintegerГод рождения числом; null, если дата не распознана.
monthintegerМесяц рождения числом 1–12; null, если дата не распознана.
dayintegerДень рождения числом 1–31; null, если дата не распознана.
ageintegerВозраст в полных годах на текущую дату; null, если дата не распознана.
is_adultboolСовершеннолетие: true — 18 лет и более, false — менее 18; null, если дата не распознана.
qcintegerКод качества разбора: 0 — распознана точно, 1 — распознана с допущением (двузначный год достроен до четырёхзначного либо день не указан и принят первым числом месяца), 2 — не распознана, 3 — пустой ввод.

Несколько полей одной записью

POST/api/v1/cleanсовместимо с DaData

Стандартизирует сразу несколько полей одной записи — ФИО, адрес, телефон, email и дату рождения — и возвращает результаты в том же порядке. Каждое поле обрабатывается так же, как отдельным методом этой страницы. Метод совместим с DaData, в том числе с их SDK для .NET.

В запросе одна запись. Полей одного типа — не больше: ФИО — 1, адресов — 3, телефонов — 3, email — 3, дат рождения — 1. Паспорт и транспортное средство не поддерживаются. Каждое поле, кроме AS_IS, оплачивается как отдельная стандартизация, а ключу нужен доступ к стандартизации всех типов полей в записи.

Параметры запроса

ПолеТипОписание
structurerequiredarrayТипы полей записи по порядку: NAME — ФИО, ADDRESS — адрес, PHONE — телефон, EMAIL — email, BIRTHDATE — дата рождения, AS_IS — поле без обработки, возвращается как есть.
datarequiredarrayОдна запись — массив строк в порядке structure, вложенный в массив: [["…", "…"]].
// совместимо с DaData — одна запись, поля по типам из structure
POST /api/v1/clean
{
  "structure": ["AS_IS", "NAME", "PHONE"],
  "data": [["id-1", "Федотов Алексей", "8 916 823 3454"]]
}

Поля ответа

ПолеТипОписание
structurearrayТипы полей — те же, что в запросе.
dataarrayЗапись — массив результатов в порядке structure. Результат поля — объект того же вида, что отдаёт отдельный метод этого типа в формате DaData; для AS_IS — только source.