Внешнее API Worki предоставляет возможности для автоматизированного добавления новых вакансий, управления статусами вакансий, получения списка откликов и управления статусами откликов.
VAS
- Value Added Service. Услуга, которую мы предоставляем. VAS'ы бывают:
- размещение вакансии. Код:
job_publication
. - поднятие вакансии в поиске. Код
job_refresh
. - выделение вакансии на 24 часа. Код
job_highlight
. - вакансия дня на 1/3/7 дней. Код 7 дней -
elevation_plus
, 3 дней -elevation_3d
, 1 день -elevation_1d
. - просмотр контакта кандидата. Код
contact_view
.
OTVAS
- One Time VAS. Единоразово покупаемые VAS'ы, которые начисляются на баланс компании. Имеют срок жизни в 30 дней с момента последней покупки OTVAS'ов.
В данном API реализовано несколько сущностей, которые могут быть описаны следующими схемами:
Модель Job
служит для хранения информации о вакансии и в общем случае имеет следующие атрибуты:
id
- первичный ключ, идентификатор вакансии в API Workistatus
- статус вакансии, константа, строка, принимающее только одно значение из словаря:active
- вакансия открыта,closed
- вакансия закрыта,expired
- срок действия вакансии закончился)title
- обязательный атрибут, заголовок вакансии, строка, обычно - название компанииdescription
- обязательный атрибут, описание вакансии, текстовое поле, не должно содержать более 200 символов, не допускаются номера телефонов, адреса сайтов и прочая информация, которая может быть рассмотрена как контактная информацияlat
- обязательный атрибут, широта географической точки вакансии - вещественное число, принимающее значение от -90 до 90long
- обязательный атрибут, долгота географической точки вакансии - вещественное число, принимающее значение от -180 до 180address
- обязательный атрибут, строка - полный адрес вакансииprofession_id
- обязательный атрибут, идентификатор профессии из справочника профессийsalary_from
- необязательный атрибут, целое число, нижняя планка заработной платы профессииsalary_to
- необязательный атрибут, целое число, верхняя планка заработной платы профессииsalary_period
- необязательный атрибут, строка, устанавливает тип оплаты и принимает только одно значение из словаря:hourly
- суммыsalary_from/salary_to
оплата за час,daily
- оплата за день/смену,monthly
- месячная заработная платаautoreply_text
- текст автоответаhas_autoreply
- включён ли автоответcontact_phone
- контактный телефон конкретной вакансии в формате7XXXXXXXXXX
expires_at
- дата истечения времени публикации вакансииauto_renew
- флаг автоматического продления вакансииremote
- удаленная работа
Модель Profession
служит для хранения справочника вакансий в API Worki и имеет следующие атрибуты:
id
- первичный ключ, идентификатор профессии в API Workititle
- обязательный атрибут, название профессии, строка
Модель Application
служит для хранения информации об отклике, устанавливает связь между вакансией (модель Job
) и кандидатом (модель Candidate
) и имеет следующие атрибуты:
id
- первичный ключ, идентификатор отклика в API Workijob_id
- обязательный атрибут, идентификатор вакансииcandidate_id
- обязательный атрибут, идентификатор кандидатаrecruiter_id
- обязательный атрибут, идентификатор работодателяstatus
- обязательный атрибут, строка, устанавливает статус отклика и может принимать только одно значение из словаря:unread
- непрочитанный отклик,declined
- кандидату отказно,read
- отклик в работе,selected
- кандидат выбран для дальнейшей обработки,improper
- кандидат не подошел,rejected
- кандидату отказано,invited
- кандидат приглашен на собеседование,reserved
- кандидат зарезервирован для дальнейшего прохождения собеседования,missed
- кандидат не пришел на собеседование и получил отказ,closed
- служебный статус для откликов на закрытые вакансии, которые были не обработаныcreated_at
- обязательный атрибут, дата и время создания отклика
В каждый момент времени один кандидат может иметь только один отклик на одну вакансию.
Модель Candidate
служит для хранения информации о кандидате и имеет следующие атрибуты:
id
- идентификатор пользователя в системеfirst_name
- обязательный атрибут, строка, имя кандидатаlast_name
- обязательный атрибут, строка, фамилия кандидатаphone
- обязательный атрибут, строка, телефон кандидатаdescription
- обязательный атрибут, текстовое описание информации кандидата о себеlat
- обязательный атрибут, широта географической точки местоположения кандидата - вещественное число, принимающее значение от -90 до 90long
- обязательный атрибут, долгота географической точки местоположения кандидата - вещественное число, принимающее значение от -180 до 180address
- обязательный атрибут, строка - полный адрес местоположения кандидатаeducation
- необязательный атрибут, текстовая информация об образовании кандидатаlanguages
- необязательный атрибут, текстовая информация о владении языками кандидатаlast_online_time
- необязательный атрибут, время последнего входа в приложение Workicreated_at
- обязательный атрибут, дата и время регистрации кандидатаupdated_at
- обязательный атрибут, дата и время последнего обновления кандидатом информации о себеemail
- необязательный атрибут, строка, контактный email кандидатаbirthday
- необязательный атрибут, дата рождения кандидадаdriving_license_categories
- необязательный атрибут, массив строк с информации об открытых категориях водительских прав кандидатаmedical_record
- необязательный атрибут, флаг, сигнализирующий о наличии медицинской книжки у кандидатаactive_candidate
- обязательный атрибут, флог, сигнализирующий о том, что кандидат действительно рассматривает предложения и активен в системеaccept_calls
- обязательный атрибут, флаг, сигнализирующий о желании кандидата получать входящие звонки от работодателейavatar
- необязательный атрибут, строка, ссылка на фотографию кандидатаbackground
- необязательный атрибут, строка, ссылка на дополнительную фотографию кандидатаexperiences
- необязательный атрибут, массив с информацией о прошлом опыте работы, имеет следущую структуру:title
- обязательный атрибут, строка, название места работыdescription
- обязательный атрибут, текстовое описание рабочих обязанностейduration
- необязательный атрибут, число месяцев работы на данном местеcurrent
- обязательный атрибут, флаг, сигнализирующий, что данное место работы является текущим
nationality
- необязательный атрибут, строка, информация о национальности кандидатаvideo_resume
- необязательный атрибут, строка, ссылка на видеорезюме кандидата
Модель Company
служит для хранения информации о компании, балансе денежных средств и OTVAS'ов.
id
- идентификатор компании в системеotvas_jobs_limit
- количество доступных размещений вакансийotvas_highlights_limit
- количество доступных выделений вакансийotvas_refreshes_limit
- количество доступных поднятий в поискеotvas_elevations_plus_limit
- количество доступных вакансий дня на 7 днейotvas_elevation_3d_limit
- количество доступных вакансий дня на 3 дняotvas_elevation_1d_limit
- количество доступных вакансий дня на 1 деньviews_limit
- количество доступных просмотров контактов пользователейbalance
- баланс кошелька компании в копейкахwallet_id
- номер кошелька компанииotvas_expires_at
- дата истечения срока жизни OTVAS'ов
Модель Vas Transaction
служит для хранения данных об изменениях баланса VAS'ов.
created_at
- дата создания транзакцииupdated_at
- дата изменения транзакцииsubscriptable_type
- тип VAS'а, который тратится(MVAS, OTVAS, BVAS)creator
- автор транзакцииapplied_changes
- массив совершенных изменений
Модель Paid Action
является служебной для возвращения данных о только что примененных/использованных VAS'ах.
error_message
- текст сообщения об ошибке(если ошибки нет -null
)status
- статус применения VAS'a. (success
|failed
)origin
- исходный запросaction
- код VAS'acount
- при применении VAS'a нормализуется до 1job_id
- id вакансии, к которой применяется VAS.
job
- вакансия, к которой применялся VAS.
Здесь и далее необязательные атрибуты могут принимать значение null
, быть пустыми массивами а также не требоваться для создания новых объектов, обязательные атрибуты всегда имеют значение не null
и должны передаваться для создания новых объектов.
В качестве схемы аутентификации в API Worki используется JSON Web Tokens (JWT). Для доступа к ресурсам API Worki в запросе необходимо отправить заголовок следующего вида:
Authorization: Worki <token>
где token
- полученный сессионый токен.
В случае успешной аутентификации будет произведено запрашиваемое действие. В случае невалидного или отсутствующего токена методы API будут отдавать:
$ curl -i https://api.iconjob.co/api/external/v1/jobs
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
{"errors":[{"detail":"Invalid JWT Token"}]}
Для получения сессионного токена необходимо отправить POST-запрос по адресу /api/external/v1/session
и передать параметры login
и password
.
При отсутствии параметров login
и password
будет возвращена следующая ошибка:
$ curl -i -XPOST https://api.iconjob.co/api/external/v1/session
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
{"errors":[{"detail":"Invalid Login"}]}
В случае некорректных значений параметров login
и password
будет возвращена следующая ошибка:
$ curl -i -XPOST https://api.iconjob.co/api/external/v1/session -d 'login=test&password=wrong'
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
{"errors":[{"detail":"Invalid Auth params"}]}
В случае корректных значений login
и password
будет возвращен токен в следующем виде:
$ curl -i -XPOST https://api.iconjob.co/api/external/v1/session -d 'login=test&password=correct'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJBcGlVc2VyIiwiZXhwIjoxNTMwMjI5NDI5fQ.DOmtBLljWXtk7bcvER_NCz-X1tmNoyLxWyfgTTukQbU"}
Для получение списка вакансий необходимо отправить GET-запрос на /api/external/v1/jobs
.
Результатом будет в следующем виде (JSON API-ответ отформатирован для наглядности)
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/jobs
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "254",
"type": "job",
"attributes": {
"title": "Первая тестовая вакансия",
"description": "Описание первой тестовой вакансии",
"status": "active",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"salary_from": null,
"salary_to": null,
"salary_period": null,
"expires_at": "2019-03-11T9:21:19.001+03:00"
}
},
{
"id": "270",
"type": "job",
"attributes": {
"title": "Вторая тестовая вакансия",
"description": "Описание второй тестовой вакансии",
"status": "active",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"salary_from": 10000,
"salary_to": 50000,
"salary_period": "monthly",
"expires_at": "2019-03-14T10:37:22.813+03:00",
"remote": false
}
}
]
}
Для получения списка профессий необходимо отправить GET-запрос на /api/external/v1/professions
. Результатом будет список профессий с идентификаторами, которые необходимо использовать при создании вакансии:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/professions
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"professions": [
{
"id": 85,
"title": "актер"
},
{
"id": 93,
"title": "массовка"
},
{
"id": 79,
"title": "рекламщик"
},
{
"id": 87,
"title": "GO-GO DANCE"
},
{
"id": 74,
"title": "IT-специалист"
}
]
}
Для создания вакансии необходимо отправить POST-запрос на /api/external/v1/jobs
. В ответе будет либо JSON-представление созданной вакансии, либо сообщение об ошибке.
Пример успешного создания вакансии:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/jobs -H 'Content-Type: application/json' -d '{"job": { "title": "Тестовая вакансия", "description": "Тестовое описание", "lat": 55.35, "long": 37.55, "address": "Москва. Солянка ул., 9", "remote": true}, "profession_id": 3}'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"data":{"id":"651","type":"job","attributes":{"title": "Тестовая вакансия", "description": "Тестовое описание", "lat": 55.35, "long": 37.55, "address": "Москва. Солянка ул., 9","salary_from":null,"salary_to":null,"salary_period":null,"expires_at": "2019-04-11T12:41:29.237+03:00", "remote": true}}}
Пример ошибки при создании вакансии:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/jobs -H 'Content-Type: application/json' -d '{"job": { "title": "test title" }}'
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
{"errors":[{"detail":"Возникли ошибки: Поле 'Адрес' не может быть пустым"}]}
Для изменения вакансии необходимо отправить PUT-запрос на /api/external/v1/jobs/<id>
, где - идентификатор вакансии. В ответе будет либо JSON-представление созданной вакансии, либо сообщение об ошибке.
Пример успешного обновления вакансии:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/jobs/122 -H 'Content-Type: application/json' -d '{"job": { "title": "Новая тестовая вакансия" }}'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"data":{"id":"122","type":"job","attributes":{"title": "Новая тестовая вакансия", "description": "Тестовое описание", "lat": 55.35, "long": 37.55, "address": "Москва. Солянка ул., 9","salary_from":null,"salary_to":null,"salary_period":null,"expires_at": "2019-03-14T22:17:56.961+03:00","remote": true}}}
Для получения информации о конкретной вакансии, необходимо отправить GET-запрос на /api/external/v1/jobs/<id>
, где - идентификатор вакансии. В ответе будет JSON-представление вакансии либо сообщение об ошибке, если такой вакансии не существует.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "254",
"type": "job",
"attributes": {
"title": "Первая тестовая вакансия",
"description": "Описание первой тестовой вакансии",
"status": "active",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"salary_from": null,
"salary_to": null,
"salary_period": null,
"expires_at": "2019-03-22T18:02:13.462+03:00",
"remote": true
}
}
}
Для того, чтобы снять вакансию из ленты, необходимо отправить POST-запрос вида /api/external/v1/jobs/<id>/close
, где <id>
- идентификатор вакансии, а также параметр reason
, который должен принимать одно из следующих значений:
closed_found
- вакансия закрыта, кандидат найденclosed_irrelevant
- вакансия более неактуальна
В ответе будет JSON-представление закрытой вакансии либо сообщение об ошибке.
Для того, чтобы продлить вакансию, необходимо отправить POST-запрос вида /api/external/v1/jobs/<id>/revive
, где <id>
- идентификатор вакансии.
В ответе будет JSON-представление закрытой вакансии либо сообщение об ошибке.
Несмотря на то, что при создании нового отклика API Worki производит запрос во внешнюю учетную систему, для синхронизации разных источников данных можно получить список всех откликов на все вакансии.
Для получение списка вакансий необходимо отправить GET-запрос на /api/external/v1/applications
.
Результат будет в следующем виде (JSON API-ответ отформатирован для наглядности):
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/applications
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "1",
"type": "application",
"attributes": {
"id": 1,
"recruiter_id": 888,
"job_id": 298,
"status": "reserved",
"created_at": "2017-10-11T20:57:43.411+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
{
"id": "2",
"type": "application",
"attributes": {
"id": 2,
"recruiter_id": 888,
"job_id": 648,
"status": "read",
"created_at": "2018-06-21T21:10:43.256+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
],
"included": [
{
"id": "889",
"type": "candidate",
"attributes": {
"id": 889,
"first_name": "Иван",
"last_name": "Петров",
"phone": "79995225324",
"description": "Небольшой текст о себе",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"education": "Среднее образование",
"languages": "Pусский",
"last_online_time": "2017-06-28 11:17:13 +0300",
"created_at": "2017-09-30T17:03:46.313+03:00",
"updated_at": "2017-10-10T20:00:54.754+03:00",
"email": null,
"birthday": null,
"driving_license_categories": [],
"medical_record": null,
"active_candidate": true,
"accept_calls": false
},
"relationships": {
"avatar": {
"data": null
},
"background": {
"data": null
},
"experiences": {
"data": [
{
"id": "360",
"type": "experience"
},
{
"id": "361",
"type": "experience"
}
]
},
"nationality": {
"data": null
},
"video_resume": {
"data": null
}
}
},
{
"id": "360",
"type": "experience",
"attributes": {
"title": "Первое место работы",
"description": "Чем-то там занимался",
"duration": null,
"current": true
},
"relationships": {
"profession": {
"data": null
}
}
},
{
"id": "361",
"type": "experience",
"attributes": {
"title": "Второе место работы",
"description": "Чем-то и на нем занимался",
"duration": null,
"current": false
},
"relationships": {
"profession": {
"data": null
}
}
}
]
}
Также можно воспользоваться фильтром по вакансии, передав параметр job_id
:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/applications?job_id=199
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "1",
"type": "application",
"attributes": {
"id": 1,
"recruiter_id": 888,
"job_id": 199,
"status": "reserved",
"created_at": "2017-10-11T20:57:43.411+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
],
"included": [
{
"id": "889",
"type": "candidate",
"attributes": {
"id": 889,
"first_name": "Иван",
"last_name": "Петров",
"phone": "79995225324",
"description": "Небольшой текст о себе",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"education": "Среднее образование",
"languages": "Pусский",
"last_online_time": "2017-06-28 11:17:13 +0300",
"created_at": "2017-09-30T17:03:46.313+03:00",
"updated_at": "2017-10-10T20:00:54.754+03:00",
"email": null,
"birthday": null,
"driving_license_categories": [],
"medical_record": null,
"active_candidate": true,
"accept_calls": false
},
"relationships": {
"avatar": {
"data": null
},
"background": {
"data": null
},
"experiences": {
"data": [
{
"id": "360",
"type": "experience"
},
{
"id": "361",
"type": "experience"
}
]
},
"nationality": {
"data": null
},
"video_resume": {
"data": null
}
}
},
{
"id": "360",
"type": "experience",
"attributes": {
"title": "Первое место работы",
"description": "Чем-то там занимался",
"duration": null,
"current": true
},
"relationships": {
"profession": {
"data": null
}
}
},
{
"id": "361",
"type": "experience",
"attributes": {
"title": "Второе место работы",
"description": "Чем-то и на нем занимался",
"duration": null,
"current": false
},
"relationships": {
"profession": {
"data": null
}
}
}
]
}
Также можно воспользоваться фильтром по статусу отклика, передав параметр status
(допускается передавать массив статусов):
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/applications?status[]=reserved&status[]=improper
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "1",
"type": "application",
"attributes": {
"id": 1,
"recruiter_id": 888,
"job_id": 298,
"status": "reserved",
"created_at": "2017-10-11T20:57:43.411+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
],
"included": [
{
"id": "889",
"type": "candidate",
"attributes": {
"id": 889,
"first_name": "Иван",
"last_name": "Петров",
"phone": "79995225324",
"description": "Небольшой текст о себе",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"education": "Среднее образование",
"languages": "Pусский",
"last_online_time": "2017-06-28 11:17:13 +0300",
"created_at": "2017-09-30T17:03:46.313+03:00",
"updated_at": "2017-10-10T20:00:54.754+03:00",
"email": null,
"birthday": null,
"driving_license_categories": [],
"medical_record": null,
"active_candidate": true,
"accept_calls": false
},
"relationships": {
"avatar": {
"data": null
},
"background": {
"data": null
},
"experiences": {
"data": [
{
"id": "360",
"type": "experience"
},
{
"id": "361",
"type": "experience"
}
]
},
"nationality": {
"data": null
},
"video_resume": {
"data": null
}
}
},
{
"id": "360",
"type": "experience",
"attributes": {
"title": "Первое место работы",
"description": "Чем-то там занимался",
"duration": null,
"current": true
},
"relationships": {
"profession": {
"data": null
}
}
},
{
"id": "361",
"type": "experience",
"attributes": {
"title": "Второе место работы",
"description": "Чем-то и на нем занимался",
"duration": null,
"current": false
},
"relationships": {
"profession": {
"data": null
}
}
}
]
}
Или же фильтровать отлики по дате создания, используя параметр created_from
:
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/applications?created_from=2019-03-01+00%3A00%3A00
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "12",
"type": "application",
"attributes": {
"id": 12,
"recruiter_id": 888,
"job_id": 298,
"status": "reserved",
"created_at": "2019-03-07T20:57:43.411+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
],
"included": [
{
"id": "889",
"type": "candidate",
"attributes": {
"id": 889,
"first_name": "Иван",
"last_name": "Петров",
"phone": "79995225324",
"description": "Небольшой текст о себе",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"education": "Среднее образование",
"languages": "Pусский",
"last_online_time": "2017-06-28 11:17:13 +0300",
"created_at": "2017-09-30T17:03:46.313+03:00",
"updated_at": "2017-10-10T20:00:54.754+03:00",
"email": null,
"birthday": null,
"driving_license_categories": [],
"medical_record": null,
"active_candidate": true,
"accept_calls": false
},
"relationships": {
"avatar": {
"data": null
},
"background": {
"data": null
},
"experiences": {
"data": [
{
"id": "360",
"type": "experience"
},
{
"id": "361",
"type": "experience"
}
]
},
"nationality": {
"data": null
},
"video_resume": {
"data": null
}
}
},
{
"id": "360",
"type": "experience",
"attributes": {
"title": "Первое место работы",
"description": "Чем-то там занимался",
"duration": null,
"current": true
},
"relationships": {
"profession": {
"data": null
}
}
},
{
"id": "361",
"type": "experience",
"attributes": {
"title": "Второе место работы",
"description": "Чем-то и на нем занимался",
"duration": null,
"current": false
},
"relationships": {
"profession": {
"data": null
}
}
}
]
}
Для изменения статуса отклика необходимо сделать POST-запрос на /api/external/v1/applications/<application_id>/proceed
. В ответе будет JSON API представление выбранного отклика либо сообщение об ошибке. В параметрах необходимо передать статус отклика, который может принимать одно из значений атрибута status
модели Application
, описанных выше.
Пример запроса с успешным изменением статуса:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": {
"id": "1",
"type": "application",
"attributes": {
"id": 1,
"recruiter_id": 888,
"job_id": 298,
"status": "invited",
"created_at": "2017-10-11T20:57:43.411+03:00"
},
"relationships": {
"candidate": {
"data": {
"id": "889",
"type": "candidate"
}
}
}
},
"included": [
{
"id": "889",
"type": "candidate",
"attributes": {
"id": 889,
"first_name": "Иван",
"last_name": "Петров",
"phone": "79995225324",
"description": "Небольшой текст о себе",
"lat": 55.7346276065292,
"long": 37.5734168663621,
"address": "Москва, улица Еланского, 2",
"education": "Среднее образование",
"languages": "Pусский",
"last_online_time": "2017-06-28 11:17:13 +0300",
"created_at": "2017-09-30T17:03:46.313+03:00",
"updated_at": "2017-10-10T20:00:54.754+03:00",
"email": null,
"birthday": null,
"driving_license_categories": [],
"medical_record": null,
"active_candidate": true,
"accept_calls": false
},
"relationships": {
"avatar": {
"data": null
},
"background": {
"data": null
},
"experiences": {
"data": [
{
"id": "360",
"type": "experience"
},
{
"id": "361",
"type": "experience"
}
]
},
"nationality": {
"data": null
},
"video_resume": {
"data": null
}
}
},
{
"id": "360",
"type": "experience",
"attributes": {
"title": "Первое место работы",
"description": "Чем-то там занимался",
"duration": null,
"current": true
},
"relationships": {
"profession": {
"data": null
}
}
},
{
"id": "361",
"type": "experience",
"attributes": {
"title": "Второе место работы",
"description": "Чем-то и на нем занимался",
"duration": null,
"current": false
},
"relationships": {
"profession": {
"data": null
}
}
}
]
}
Пример запроса с неуспешным изменением статуса:
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
{"errors":[{"detail":"Неизвестный статус"}]}
Для получение баланса VAS'ов необходимо отправить GET-запрос на /api/external/v1/company
.
Результатом будет в следующем виде (JSON API-ответ отформатирован для наглядности)
curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/company
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": {
"id": "1",
"type": "company",
"attributes": {
"id": 1,
"otvas_expires_at": null,
"balance": "10000000.0",
"wallet_id": null,
"otvas_user_limit": 1,
"otvas_jobs_limit": 0,
"otvas_refreshes_limit": 1,
"otvas_highlights_limit": 0,
"otvas_views_limit": 1,
"otvas_elevations_plus_limit": 1,
"otvas_elevations_1d_limit": 0,
"otvas_elevations_3d_limit": 0
}
}
}
Для получение списка транзакций необходимо отправить GET-запрос на /api/external/v1/vas_transactions
.
Опциональные параметры: * page - параметры для пагинации * number - номер страницы * size - количество элементов на странице
Результатом будет в следующем виде (JSON API-ответ отформатирован для наглядности)
$ curl -i -H 'Authorization: Worki <JWT Token>' https://api.iconjob.co/api/external/v1/vas_transactions?page[number]=1&page[size]=10
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "4",
"type": "vas_transaction",
"attributes": {
"created_at": "2011-11-11T00:00:00.000+04:00",
"updated_at": "2011-11-11T00:00:00.000+04:00",
"subscriptable_type": "OTVAS",
"creator": "Внешний пользователь(ibs) #4",
"applied_changes": [
"Размещение вакансии: -1"
]
}
},
{
"id": "5",
"type": "vas_transaction",
"attributes": {
"created_at": "2011-11-11T00:00:00.000+04:00",
"updated_at": "2011-11-11T00:00:00.000+04:00",
"subscriptable_type": "OTVAS",
"creator": "Внешний пользователь(ibs) #4",
"applied_changes": [
"Выделение вакансии: -1"
]
}
}
],
"meta": {
"total": 2
}
}
Для применения VAS'ов необходимо отправить POST-запрос на /api/external/v1/paid_actions
.
Параметры:
* actions
- применяемые действия, массив
* action
- действие, которое применяется. Желательно брать код из раздела "Аббревиатуры".
* job_id
- id вакансии, к которому применяется VAS(если необходимо)
* user_id
- id кандидата, с которым создается диалог/чей телефон просматривается(если необходимо)
* use_account
- баланс, с которого идет списание. Принимает значения bonus
(оплата бонусами), company
(оплата с кошелька). По умолчанию company
В ответе возвращаются применные действия и текущее состояние подписки(поле meta
->company
).
Результатом будет в следующем виде (JSON API-ответ отформатирован для наглядности)
$ curl -i -H 'Authorization: Worki <JWT Token>' -d '{"actions":[{"action":"job_highlight", "job_id": "1"]}' -H "Content-Type: application/json" -X POST https://api.iconjob.co/api/external/v1/paid_actions
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"data": [
{
"id": "0",
"type": "paid_action",
"attributes": {
"id": 0,
"error_message": null,
"status": "success",
"origin": {
"action": "job_highlight",
"count": 1,
"job_id": "1"
},
"job": {
"data": {
"id": "1",
"type": "job",
"attributes": {
"title": "job_title_1",
"description": "Приходите работать в Бабушкины яички",
"status": "active",
"lat": 11.23,
"long": 31.53,
"address": "Москва, туту",
"expires_at": "2011-11-12T00:00:00.000+04:00",
"salary_from": null,
"salary_to": null,
"salary_period": null,
"contact_phone": null,
"call_only": false,
"auto_renew": null,
"refreshed_at": "2011-11-11T00:00:00.000+04:00",
"refreshable": false,
"refreshable_at": "2011-11-16T00:00:00.000+04:00",
"today_views_count": 0,
"external_id": null,
"revivable": true,
"published_at": "2011-11-11T00:00:00.000+04:00",
"highlighted": true,
"highlighted_till": "2011-11-12T00:00:00.000+04:00",
"parttime": false,
"watch": false,
"no_experience": false,
"disabilities": false,
"public_link": "https://worki.ru/vacancy/WJAUJZ"
},
"relationships": {
"profession": {
"data": {
"id": "1",
"type": "profession"
}
}
}
}
}
}
}
],
"meta": {
"company": {
"data": {
"id": "1",
"type": "company",
"attributes": {
"id": 1,
"otvas_expires_at": null,
"balance": "10000000.0",
"wallet_id": null,
"otvas_user_limit": 1,
"otvas_jobs_limit": 0,
"otvas_refreshes_limit": 1,
"otvas_highlights_limit": 0,
"otvas_views_limit": 1,
"otvas_elevations_plus_limit": 1,
"otvas_elevations_1d_limit": 0,
"otvas_elevations_3d_limit": 0
}
}
}
}
}