Skip to main content

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-параметры

ПараметрТипПо умолчаниюОписание
qstringПолнотекстовый поиск по имени, навыкам, описанию
skillsstringФильтр по навыкам (через запятую): python,trading,design
citystringФильтр по городу: moscow, bangkok, phuket
interestsstringФильтр по интересам: crypto,ai,marketing
work_statusstringСтатус: open_to_work, hiring, collaborating, learning
limitinteger20Количество результатов (макс. 100)
offsetinteger0Смещение для пагинации

Пример ответа

{
  "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 кодКод ошибкиКогда
400bad_requestНевалидные параметры запроса
401unauthorizedНевалидный или отсутствующий API-ключ
403forbiddenНедостаточно scopes
429rate_limit_exceededПревышен лимит запросов

GET /network/matches

Список участников, которых платформа подобрала как наиболее подходящих на основе вашего профиля, навыков и интересов. Scope: network:read (все тарифы) Полный URL: GET https://platform.edgelab.su/api/v1/network/matches

Query-параметры

ПараметрТипПо умолчаниюОписание
limitinteger10Количество результатов (макс. 50)
offsetinteger0Смещение для пагинации

Пример ответа

{
  "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 кодКод ошибкиКогда
401unauthorizedНевалидный или отсутствующий API-ключ
403forbiddenНедостаточно scopes
429rate_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_idstringДаID участника, которому отправляется запрос
messagestringНетСопроводительное сообщение (макс. 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 кодКод ошибкиКогда
400bad_requestНевалидные параметры запроса
401unauthorizedНевалидный или отсутствующий API-ключ
403forbiddenТариф Edge — scope network:write недоступен
404not_foundУчастник с указанным ID не найден
409conflictУже есть pending-запрос к этому участнику
422validation_errorПопытка отправить запрос самому себе
429rate_limit_exceededПревышен лимит запросов

GET /network/requests

Список входящих и исходящих запросов на подключение. Scope: network:read (все тарифы) Полный URL: GET https://platform.edgelab.su/api/v1/network/requests

Query-параметры

ПараметрТипПо умолчаниюОписание
directionstringФильтр: incoming, outgoing. Без фильтра — все
statusstringФильтр: pending, accepted, rejected
limitinteger20Количество результатов (макс. 100)
offsetinteger0Смещение для пагинации

Пример ответа

{
  "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 кодКод ошибкиКогда
401unauthorizedНевалидный или отсутствующий API-ключ
403forbiddenНедостаточно scopes
429rate_limit_exceededПревышен лимит запросов

PATCH /network/requests/

Принять или отклонить входящий запрос на подключение. Scope: network:write (Pro, VIP) Полный URL: PATCH https://platform.edgelab.su/api/v1/network/requests/{id}

Параметры пути

ПараметрТипОписание
idstringID запроса

Параметры запроса (body)

ПараметрТипОбязательныйОписание
actionstringДаДействие: 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 кодКод ошибкиКогда
400bad_requestНевалидный action (не accept и не reject)
401unauthorizedНевалидный или отсутствующий API-ключ
403forbiddenТариф Edge — scope network:write недоступен
404not_foundЗапрос не найден или не принадлежит вам
422validation_errorЗапрос уже обработан (не в статусе pending)
429rate_limit_exceededПревышен лимит запросов

Карточка участника

Каждый участник в результатах поиска и matching представлен карточкой:
ПолеОписание
nameИмя (как указано в профиле)
cityГород проживания
occupationЧем занимается
skillsСписок навыков
useful_forЧем может быть полезен
looking_forЧто ищет
work_statusТекущий статус
Карточка никогда не содержит приватные идентификаторы. Эти поля доступны только после взаимного accept через поле contact_info в запросах — и только данные из профиля contacts (например, telegram-username).

Паттерн работы агента

Рекомендуемый flow для AI-агента при работе с Network API:
  1. Поиск: GET /network/matches — получить автоматические match’и хозяина
  2. Уточнение: GET /network/members?skills=python&city=moscow — поиск по конкретным критериям
  3. Спросить хозяина: показать карточки подходящих участников, получить подтверждение
  4. Коннект: POST /network/connect — отправить запрос с сопроводительным сообщением (Pro/VIP)
  5. Мониторинг: GET /network/requests?direction=incoming&status=pending — проверять новые входящие запросы
  6. Обработка: PATCH /network/requests/{id} — принять/отклонить после подтверждения хозяина (Pro/VIP)
Агент никогда не должен принимать или отклонять запросы автоматически. Всегда спрашивайте хозяина перед действием.