Network API
Система нетворкинга Edge Lab строится на принципе matching — платформа подбирает участников по навыкам, интересам и городу. Контакты раскрываются только при взаимном согласии (double opt-in: request + accept = взаимное согласие обеих сторон).
Все endpoints используют авторизацию Bearer API-key: Authorization: Bearer edgelab_live_...Base URL: https://platform.edgelab.su/api/v1
Тарифы: Чтение (network:read) доступно на всех тарифах (Edge, Pro, VIP). Запись (network:write) — создание запросов на подключение, принятие/отклонение — только Pro и VIP.
Принципы приватности
- Карточка участника содержит только публичные данные: имя, город, чем занимается, чем полезен, что ищет
- Приватные идентификаторы никогда не возвращаются через API
- Контактные данные раскрываются только после взаимного accept (double opt-in) — и только данные из профиля contacts, заполненные участником самостоятельно
GET /network/members
Полнотекстовый поиск участников сообщества с фильтрацией по навыкам, городу, интересам и статусу.
Scope: network:read (все тарифы)
Полный URL: GET https://platform.edgelab.su/api/v1/network/members
Query-параметры
| Параметр | Тип | По умолчанию | Описание |
|---|
q | string | — | Полнотекстовый поиск по имени, навыкам, описанию |
skills | string | — | Фильтр по навыкам (через запятую): python,trading,design |
city | string | — | Фильтр по городу: moscow, bangkok, phuket |
interests | string | — | Фильтр по интересам: crypto,ai,marketing |
work_status | string | — | Статус: open_to_work, hiring, collaborating, learning |
limit | integer | 20 | Количество результатов (макс. 100) |
offset | integer | 0 | Смещение для пагинации |
Пример ответа
{
"items": [
{
"id": "usr_a1b2c3d4",
"name": "Алексей К.",
"city": "Москва",
"occupation": "ML-инженер, 5 лет опыта",
"skills": ["python", "machine-learning", "trading-bots"],
"useful_for": "Могу помочь с автоматизацией трейдинга и ML-моделями",
"looking_for": "Ищу партнёра для крипто-проекта",
"work_status": "collaborating",
"match_score": 0.87
},
{
"id": "usr_e5f6g7h8",
"name": "Мария Д.",
"city": "Бангкок",
"occupation": "UX-дизайнер, Web3",
"skills": ["figma", "ux-research", "web3"],
"useful_for": "Дизайн продуктов, UX-аудиты",
"looking_for": "Проекты в DeFi и AI",
"work_status": "open_to_work",
"match_score": 0.72
}
],
"total": 156,
"limit": 20,
"offset": 0,
"has_more": true
}
Поле match_score (0.0–1.0) показывает релевантность участника вашему профилю. Чем выше — тем лучше matching.
Ошибки
| HTTP код | Код ошибки | Когда |
|---|
| 400 | bad_request | Невалидные параметры запроса |
| 401 | unauthorized | Невалидный или отсутствующий API-ключ |
| 403 | forbidden | Недостаточно scopes |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
GET /network/matches
Список участников, которых платформа подобрала как наиболее подходящих на основе вашего профиля, навыков и интересов.
Scope: network:read (все тарифы)
Полный URL: GET https://platform.edgelab.su/api/v1/network/matches
Query-параметры
| Параметр | Тип | По умолчанию | Описание |
|---|
limit | integer | 10 | Количество результатов (макс. 50) |
offset | integer | 0 | Смещение для пагинации |
Пример ответа
{
"items": [
{
"id": "usr_a1b2c3d4",
"name": "Алексей К.",
"city": "Москва",
"occupation": "ML-инженер, 5 лет опыта",
"skills": ["python", "machine-learning", "trading-bots"],
"useful_for": "Могу помочь с автоматизацией трейдинга",
"looking_for": "Ищу партнёра для крипто-проекта",
"match_score": 0.92,
"match_reasons": ["Общие навыки: python", "Оба интересуются crypto"]
}
],
"total": 12,
"limit": 10,
"offset": 0,
"has_more": true
}
Ошибки
| HTTP код | Код ошибки | Когда |
|---|
| 401 | unauthorized | Невалидный или отсутствующий API-ключ |
| 403 | forbidden | Недостаточно scopes |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
POST /network/connect
Отправить запрос на подключение к участнику. Это первый шаг в системе double opt-in — контакты раскроются только после ответного accept.
Scope: network:write (Pro, VIP)
Полный URL: POST https://platform.edgelab.su/api/v1/network/connect
Параметры запроса (body)
| Параметр | Тип | Обязательный | Описание |
|---|
target_member_id | string | Да | ID участника, которому отправляется запрос |
message | string | Нет | Сопроводительное сообщение (макс. 500 символов) |
Пример запроса
curl -X POST https://platform.edgelab.su/api/v1/network/connect \
-H "Authorization: Bearer edgelab_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"target_member_id": "usr_a1b2c3d4",
"message": "Привет! Увидел, что ты работаешь с ML для трейдинга. Хочу обсудить совместный проект."
}'
Пример ответа (201 Created)
{
"request_id": "req_x1y2z3",
"status": "pending",
"target_member_id": "usr_a1b2c3d4",
"created_at": "2025-03-15T10:30:00Z"
}
Ошибки
| HTTP код | Код ошибки | Когда |
|---|
| 400 | bad_request | Невалидные параметры запроса |
| 401 | unauthorized | Невалидный или отсутствующий API-ключ |
| 403 | forbidden | Тариф Edge — scope network:write недоступен |
| 404 | not_found | Участник с указанным ID не найден |
| 409 | conflict | Уже есть pending-запрос к этому участнику |
| 422 | validation_error | Попытка отправить запрос самому себе |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
GET /network/requests
Список входящих и исходящих запросов на подключение.
Scope: network:read (все тарифы)
Полный URL: GET https://platform.edgelab.su/api/v1/network/requests
Query-параметры
| Параметр | Тип | По умолчанию | Описание |
|---|
direction | string | — | Фильтр: incoming, outgoing. Без фильтра — все |
status | string | — | Фильтр: pending, accepted, rejected |
limit | integer | 20 | Количество результатов (макс. 100) |
offset | integer | 0 | Смещение для пагинации |
Пример ответа
{
"items": [
{
"id": "req_x1y2z3",
"direction": "incoming",
"status": "pending",
"from": {
"id": "usr_e5f6g7h8",
"name": "Мария Д.",
"city": "Бангкок",
"occupation": "UX-дизайнер, Web3"
},
"message": "Хочу обсудить дизайн для DeFi-проекта",
"created_at": "2025-03-14T15:00:00Z"
},
{
"id": "req_a4b5c6",
"direction": "outgoing",
"status": "accepted",
"to": {
"id": "usr_a1b2c3d4",
"name": "Алексей К.",
"city": "Москва",
"occupation": "ML-инженер"
},
"contact_info": {
"telegram": "@alexey_ml"
},
"message": "Привет! Хочу обсудить совместный проект.",
"created_at": "2025-03-10T12:00:00Z",
"resolved_at": "2025-03-11T09:15:00Z"
}
],
"total": 5,
"limit": 20,
"offset": 0,
"has_more": false
}
Поле contact_info появляется только у запросов со статусом accepted — это и есть механизм double opt-in. До взаимного согласия контакты скрыты. Контактные данные берутся из профиля contacts участника (например, telegram-username).
Ошибки
| HTTP код | Код ошибки | Когда |
|---|
| 401 | unauthorized | Невалидный или отсутствующий API-ключ |
| 403 | forbidden | Недостаточно scopes |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
PATCH /network/requests/
Принять или отклонить входящий запрос на подключение.
Scope: network:write (Pro, VIP)
Полный URL: PATCH https://platform.edgelab.su/api/v1/network/requests/{id}
Параметры пути
| Параметр | Тип | Описание |
|---|
id | string | ID запроса |
Параметры запроса (body)
| Параметр | Тип | Обязательный | Описание |
|---|
action | string | Да | Действие: accept или reject |
Пример запроса
curl -X PATCH https://platform.edgelab.su/api/v1/network/requests/req_x1y2z3 \
-H "Authorization: Bearer edgelab_live_abc123" \
-H "Content-Type: application/json" \
-d '{"action": "accept"}'
Пример ответа (accept)
{
"id": "req_x1y2z3",
"status": "accepted",
"contact_info": {
"telegram": "@maria_ux"
},
"resolved_at": "2025-03-15T11:00:00Z"
}
Ошибки
| HTTP код | Код ошибки | Когда |
|---|
| 400 | bad_request | Невалидный action (не accept и не reject) |
| 401 | unauthorized | Невалидный или отсутствующий API-ключ |
| 403 | forbidden | Тариф Edge — scope network:write недоступен |
| 404 | not_found | Запрос не найден или не принадлежит вам |
| 422 | validation_error | Запрос уже обработан (не в статусе pending) |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
Карточка участника
Каждый участник в результатах поиска и matching представлен карточкой:
| Поле | Описание |
|---|
name | Имя (как указано в профиле) |
city | Город проживания |
occupation | Чем занимается |
skills | Список навыков |
useful_for | Чем может быть полезен |
looking_for | Что ищет |
work_status | Текущий статус |
Карточка никогда не содержит приватные идентификаторы. Эти поля доступны только после взаимного accept через поле contact_info в запросах — и только данные из профиля contacts (например, telegram-username).
Паттерн работы агента
Рекомендуемый flow для AI-агента при работе с Network API:
- Поиск:
GET /network/matches — получить автоматические match’и хозяина
- Уточнение:
GET /network/members?skills=python&city=moscow — поиск по конкретным критериям
- Спросить хозяина: показать карточки подходящих участников, получить подтверждение
- Коннект:
POST /network/connect — отправить запрос с сопроводительным сообщением (Pro/VIP)
- Мониторинг:
GET /network/requests?direction=incoming&status=pending — проверять новые входящие запросы
- Обработка:
PATCH /network/requests/{id} — принять/отклонить после подтверждения хозяина (Pro/VIP)
Агент никогда не должен принимать или отклонять запросы автоматически. Всегда спрашивайте хозяина перед действием.