API Upwork Поиск
Состояние API
- Состояние за 24 ч
- 99%
- Среднее время за 24 ч
- 12.00 s
- Стабильно / норма
- Доступно
- Ограничено
- Почти недоступно
Последние 24 часа
Последние 30 дней
Находите заказы на Upwork по навыку. Получите бюджет или диапазон почасовой ставки, уровень опыта, число откликов, а также расходы, рейтинг и статус проверки оплаты клиента. Фильтруйте по job_type, experience_level или датам публикации. Отклики не отправляются, и результаты не означают, что заказ достанется вам.
Upwork Search находит заказы, размещённые клиентами на Upwork, по keyword и возвращает для каждого название, описание, бюджет или диапазон почасовой ставки, тип контракта, требуемый уровень опыта, загрузку, ожидаемую длительность, число откликов, число нанимаемых специалистов, время публикации и теги, а также профиль клиента: имя, местоположение, рейтинг, общие расходы, долю найма, среднюю выплаченную почасовую ставку и признак верификации способа оплаты. Фрилансеры и агентства используют эту возможность, чтобы находить проекты, на которые стоит откликнуться, а аналитики — чтобы изучать спрос и ставки по навыку.
Эта возможность выдаёт заказы, а не фрилансеров. Фильтруйте по job_type, experience_level и периоду публикации в since и until, а порядок задавайте в sort. У заказов с фиксированной ценой есть budget с валютой в budget_currency, а у почасовых — hourly_rate_min и hourly_rate_max. Большое значение proposals означает сильную конкуренцию, а client_total_spent лучше любого другого поля показывает, надёжен ли клиент.
Цена: $1.39 за 1 000 запросов ($0.001389 за вызов). Неудачные вызовы и пустые результаты не оплачиваются. Синхронный режим. Для долгих задач добавьте в тело запроса "mode": "async", получите job_id и опрашивайте статус.
Промпт для ИИ
Помогите мне написать скрипт для сбора данных через эндпоинт EveryInfra Upwork Поиск (upwork/search).
Как работает эндпоинт:
- Запрос: POST https://api.everyinfra.com/api/v1/social с заголовком Authorization: Bearer <API key>. Читайте ключ из переменной окружения EVERYINFRA_API_KEY и никогда не прописывайте его в коде.
- В теле запроса укажите platform: upwork и action: search, а параметры передайте в params.
- Обязательные параметры:
- keyword: В search ищет заказы на аутсорсинг, а в freelancers ищет исполнителей. Один и тот же навык в этих двух действиях соответствует спросу заказчиков и профилям фрилансеров.
- Необязательные параметры:
- exclude_keywords: Ключевые слова заказов, исключаемые в search. Это не чёрный список исполнителей и не минимальные требования к навыкам.
- experience_level: Фильтрует заказы по уровню опыта: entry_level, intermediate_level или expert_level. (допустимые значения: entry_level / expert_level / intermediate_level)
- job_type: Тип оплаты контракта для search: hourly или fixed_price, а не полная или частичная занятость. (допустимые значения: fixed_price / hourly)
- since: Начальная дата публикации заказа для search, а не дата регистрации заказчика.
- sort: Порядок сортировки заказов для search: newest, oldest или relevance. Срабатывание oldest гарантируется не во всех случаях. (допустимые значения: newest / oldest / relevance)
- until: Конечная дата публикации заказа для search; используется вместе с since. Это не дата окончания контракта.
- limit: Максимальное число записей в этом вызове, целое число от 1 до 100. Если параметр не указан, применяется значение по умолчанию; вызов может вернуть меньше записей. (по умолчанию: 20)
- Возвращает список записей. Основные поля каждой записи: id, url, title, text, budget, budget_currency, hourly_rate_min, hourly_rate_max, job_type, experience_level, engagement_type, duration; всего полей: 27, полный список: https://api.everyinfra.com/api/v1/social/catalog?platform=upwork.
- Пример тела запроса:
{
"platform": "upwork",
"action": "search",
"params": {
"keyword": "Python automation"
}
}
- Цена: $1.39 за 1 000 запросов; неудачные и пустые результаты не оплачиваются.
- Для десятков или сотен целей добавьте в тело запроса "mode": "async": вы сразу получите job_id и сможете опрашивать GET https://api.everyinfra.com/api/v1/jobs/{job_id}, чтобы получить результат.
- При ответе 422 исправьте запрос, используя предложенные в ошибке имена параметров и допустимые значения; при ответе 429 или 503 подождите указанное в Retry-After время и повторите попытку.
Прежде чем писать код, спросите меня, какие цели мне нужны, сколько их будет, какие поля мне нужны и в каком формате вывести результат; затем согласуйте со мной план и примерную стоимость.Параметры запроса
| Имя | Расположение | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|---|
Authorization | header | string | Да | - | Укажите Bearer, а после него — ваш API-ключ. Создайте ключ в консоли; никогда не указывайте его в URL и не храните в репозитории кода. |
platform | body | string | Да | upwork | Идентификатор платформы, фиксированное значение. |
action | body | string | Да | search | Идентификатор возможности, фиксированное значение. |
keyword | body.params | string | Да | - | В search ищет заказы на аутсорсинг, а в freelancers ищет исполнителей. Один и тот же навык в этих двух действиях соответствует спросу заказчиков и профилям фрилансеров. |
exclude_keywords | body.params | object | Нет | - | Ключевые слова заказов, исключаемые в search. Это не чёрный список исполнителей и не минимальные требования к навыкам. |
experience_level | body.params | string (enum) | Нет | - | Фильтрует заказы по уровню опыта: entry_level, intermediate_level или expert_level.Допустимые значенияentry_levelexpert_levelintermediate_level |
job_type | body.params | string (enum) | Нет | - | Тип оплаты контракта для search: hourly или fixed_price, а не полная или частичная занятость.Допустимые значенияfixed_pricehourly |
since | body.params | date | Нет | - | Начальная дата публикации заказа для search, а не дата регистрации заказчика. |
sort | body.params | string (enum) | Нет | - | Порядок сортировки заказов для search: newest, oldest или relevance. Срабатывание oldest гарантируется не во всех случаях.Допустимые значенияnewestoldestrelevance |
until | body.params | date | Нет | - | Конечная дата публикации заказа для search; используется вместе с since. Это не дата окончания контракта. |
limit | body.params | integer (1–100) | Нет | 20 | Максимальное число записей в этом вызове, целое число от 1 до 100. Если параметр не указан, применяется значение по умолчанию; вызов может вернуть меньше записей. При значениях выше максимума эндпоинт возвращает ошибку 422 до списания средств. |
Примеры кода
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
-H "Authorization: Bearer $EVERYINFRA_API_KEY" \
-H 'Content-Type: application/json' \
--data-raw '{
"platform": "upwork",
"action": "search",
"params": {
"keyword": "Python automation"
}
}'Спецификация OpenAPI (JSON)Примеры читают ключ из переменной окружения EVERYINFRA_API_KEY; скопированный код никогда не содержит ваш ключ.
Пример ответа
Получено September 26, 2026 at 08:56 (UTC) вызовом этого API с параметрами из примера кода выше. results и count — реальный ответ этого вызова, из которого удалены персональные данные (имена, никнеймы, аватары, ссылки на профили, контакты); в списке оставлены первые 2. id, billing и quota меняются при каждом вызове, поэтому показана только их структура.
{
"id": "req_…",
"platform": "upwork",
"action": "search",
"results": [
{
"id": "•••",
"url": "https://www.upwork.com/jobs/~022103162557197640589",
"title": "Part-Time Automation and Systems Builder",
"text": "# Part-Time Automation & Systems Builder\n\n**The role**\n\nWe’re looking for someone who can turn operational problems into dependable systems our team uses every day. You’ll build automations, internal tools, and reporting workflows that reduce manual work as we grow.\n\nOur technica…",
"budget_currency": "USD",
"hourly_rate_min": 20,
"hourly_rate_max": 30,
"job_type": "HOURLY",
"experience_level": "IntermediateLevel",
"engagement_type": "FULL_TIME",
"duration": "More than 6 months",
"proposals": 173,
"persons_to_hire": 1,
"posted_at": "2026-09-24T16:40:48.454000+00:00",
"tags": [
"Business Process Automation",
"API Integration",
"Google Apps Script"
],
"client_location": "United States",
"client_rating": 4.91,
"client_review_count": 16,
"client_total_spent": 13591.13,
"payment_verified": true,
"platform": "upwork"
},
{
"id": "•••",
"url": "https://www.upwork.com/jobs/~022103697282534705588",
"title": "Python automation script to batch-generate illustrated storybooks (Claude API + image API)",
"text": "I'm a children's story creator. I need a Python script that runs on its own on my Mac while I'm away.\n\nWhat it should do:\n\nRead a list of story concepts from a file.\nRead one fixed style spec file (format, page count, characters, tone), used in every call.\nCall the Claude API to …",
"budget": 1000,
"budget_currency": "USD",
"hourly_rate_min": 1000,
"hourly_rate_max": 1000,
"job_type": "FIXED",
"experience_level": "IntermediateLevel",
"duration": "1 to 3 months",
"proposals": 45,
"persons_to_hire": 1,
"posted_at": "2026-09-26T07:05:29.443000+00:00",
"tags": [
"Python",
"Automation",
"Scripting"
],
"client_location": "Singapore",
"client_rating": 0,
"client_review_count": 0,
"client_total_spent": 0,
"payment_verified": true,
"platform": "upwork"
}
],
"count": 20,
"billing": {
"charged": …,
"charged_usd": …,
"balance_after_usd": …,
…
},
"quota": { … }
}Поля ответа
Бизнес-данные находятся в results. В таблице перечислены поля, которые может содержать запись; значения, которые платформа не показывает, никогда не выдумываются.
| Поле | Значение |
|---|---|
id | Уникальный ID записи на платформе. Уникален только в пределах одной платформы; на разных платформах ID могут повторяться. |
url | Ссылка на запись на платформе. |
title | Заголовок. null, если на платформе нет заголовков (например, у текстовых постов). |
text | Основной текст без HTML возвращается полностью и никогда не обрезается (на нескольких платформах результаты списковых запросов содержат только фрагмент; это указано в примечаниях к полям платформы). |
budget | Трактуется так же, как на самой платформе |
budget_currency | Трактуется так же, как на самой платформе |
hourly_rate_min | Трактуется так же, как на самой платформе |
hourly_rate_max | Трактуется так же, как на самой платформе |
job_type | Трактуется так же, как на самой платформе |
experience_level | Трактуется так же, как на самой платформе |
engagement_type | Трактуется так же, как на самой платформе |
duration | Трактуется так же, как на самой платформе |
proposals | Трактуется так же, как на самой платформе |
persons_to_hire | Трактуется так же, как на самой платформе |
posted_at | Время публикации в ISO 8601, UTC (например, 2026-08-07T12:34:56+00:00). Нестандартные строки платформы передаются как есть, поэтому учитывайте это при разборе. null означает, что платформа его не раскрывает. |
tags | Массив тегов. Если тегов нет, это пустой массив, а не null. |
client_name | Трактуется так же, как на самой платформе |
client_location | Трактуется так же, как на самой платформе |
client_rating | Трактуется так же, как на самой платформе |
client_review_count | Трактуется так же, как на самой платформе |
client_total_spent | Трактуется так же, как на самой платформе |
client_hire_rate | Трактуется так же, как на самой платформе |
client_avg_hourly_rate | Трактуется так же, как на самой платформе |
payment_verified | Трактуется так же, как на самой платформе |
email | Контактный адрес электронной почты передаётся как есть. |
emails | Контактные адреса электронной почты (у записи их может быть несколько) передаются как есть, без дубликатов. |
phone | Контактный номер телефона передаётся без нормализации формата. |
platform | Идентификатор исходной платформы. Совпадает со значением platform в запросе (например, xiaohongshu, tiktok). |
FAQ
Можно ли искать фрилансеров, а не заказы?
С помощью этой возможности нельзя: keyword ищет заказы, размещённые клиентами. Чтобы найти исполнителей, используйте возможность Upwork Freelancers: она принимает ключевое слово навыка и может сужать результаты по континенту и статусу Top Rated.
Как исключить заказы, в которых упоминается определённое слово?
Передайте exclude_keywords объектом, а не простой строкой, например {"keywords": ["WordPress"], "matchTitle": true, "matchDescription": true, "matchSkills": true}. Список содержит слова для исключения, а три переключателя определяют, искать ли их в названии заказа, в описании и в списке навыков.
Как понять, стоит ли откликаться на заказ клиента?
Начните с client_total_spent, общих расходов клиента на Upwork: это самый надёжный отдельный признак благонадёжного клиента. Затем проверьте payment_verified, поскольку при неверифицированном способе оплаты выше риск не получить деньги, и client_hire_rate: низкая доля означает, что клиент часто публикует заказы, никого не нанимая. Смотрите client_rating вместе с client_review_count.
Ошибки и оплата
- 401
- Ключ отсутствует или недействителен.
- 402
- Недостаточно средств на балансе. Сначала пополните баланс.
- 422
- Недопустимое имя или значение параметра. Исправьте запрос по подсказкам в сообщении об ошибке. Без списания.
- 429
- Достигнут лимит запросов в минуту. Подождите указанное в Retry-After время, затем повторите попытку.
- 503
- Не удалось выполнить. Зарезервированная сумма возвращается на баланс. Если результат неизвестен, проверьте его перед повторной попыткой.
- 200 (пусто)
- Нет данных. Без списания.
Официальные источники
Используются только для проверки объектов и терминов. Они не означают, что платформа разрешила или одобрила работу EveryInfra.
- Upwork: почасовые контракты и контракты с фиксированной ценой ↗
Upwork различает контракты с почасовой оплатой и контракты с фиксированной ценой за весь объём проекта или за этапы. Параметр job_type в этом действии задаёт категорию вакансии; он не даёт официальных функций платформы, таких как учёт времени, оплата через эскроу или управление этапами.
Проверено 2026-09-04