club - instasport/club-api GitHub Wiki
Информация о клубе
Через интерфейс системы можно получить информацию о клубе:
- Название, описание клуба, обложку клуба, логотип
- Список залов клуба с адресами и расположением на карте
- Расписание тренировок в залах и кто тренирует
- Абонементы клуба
- Анонсы мероприятий клуба
- Статьи клуба (блог)
- Информацию о товарах из магазина клуба
Общая информация о клубе
Для получения информации о клубе в заголовке авторизации обязательно нужно указать ключ и клуб.
Можно запрашивать только те поля, которые нужны.
Список полей
title - длинное название клуба (может быть слоган)
titleShort - короткое название клуба
icon - логотип клуба (ссылка на графический файл в формате 1:1)
image - обложка клуба (ссылка на графический файл в формате 3:1)
slug - название клуба в системе (часть URL)
descriptionHeader - заголовок описания клуба
description - описание клуба. Может быть просто текст, а может содержать HTML
descriptionHtml - описание клуба в HTML или нет (true|false)
rules - правила клуба (текст)
phone - телефон клуба
address - адрес клуба без указания города
clubStatus - статус клуба, int
clubStatusDetail - статус клуба, string
0 - "Тест"
1 - "Настройка"
2 - "Открыт"
3 - "В архиве"
4 - "Запрещен"
5 - "На проверке"
city - город, где расположен клуб
slug - название города, как URL
title - название города, как текст
halls - список залов клуба
title - название зала
image - обложка зала (ссылка на графический файл в формате 3:1)
description - описание зала. Может быть просто текст, а может содержать HTML
descriptionHtml - описание зала в HTML или нет (true|false)
phone - телефон зала
address - адрес зала без указания города
latitude - широта (для отображения на карте)
longitude - долгота (для отображения на карте)
timeOpen - время открытия зала
timeClose - время закрытия зала
zones - зоны клуба
instructors - список инструкторов, у которых есть запланированые тренировки
title - название зоны
zoneType - тип зоны (1 - общая зона, 2 - зона для тренировок)
activities - спортивные направления тренировок клуба
activities(hallId: 208) - спортивные направления тренировок зала
slug - название направления, как URL
title - название направления
description - описание направления
image - обложка направления (ссылка на графический файл в формате 2:1)
advantages - блок преимущества клуба
title - название преимущества (максимум 50 символов)
description - описание преимущества (максимум 300 символов)
image - изображение. Размер 200x200 px
discoverClubChoices - варианты выбора откуда клиент узнал о клубе
id
title - название варианта
discoverClubRequired - обязательный выбор клиентом откуда он узнал о клубе при принятии правил
darkTheme - темная тема или нет
primaryColor - основной фон
secondaryColor - дополнительный фон
primaryTextColor - цвет текста (хорошо виден на обоих фонах)
secondaryTextColor - акцентированный цвет текста (хорошо виден на обоих фонах)
cardOpenpriceEnabled - показывать цены на абонементы без регистрации
blogEnabled - наличие блогов
announceEnabled - наличие будущих анонсов
storeEnabled - наличие товаров в магазине
pilotEnabled - разрешены пробные тренировки
qrEnabled - клуб использует промокод
googleTag - Google Tag ID
facebookPixel - Facebook Pixel ID
Ссылки на соц сети клуба
contactFacebook
contactInstagram
contactYoutube
contactTelegram
contactLinkedin
GraphQL запрос
query Club {
club {
id
title
titleShort
icon
image
slug
descriptionHeader
description
descriptionHtml
rules
city {
id
slug
title
}
halls {
id
title
image
description
descriptionHtml
address
phone
latitude
longitude
timeOpen
timeClose
instructors {
id
firstName
lastName
instructorImage
}
zones(zoneType: 1) {
id
title
zoneType
}
}
activities {
id
slug
title
description
image
}
advantages {
title
description
image
}
primaryColor
primaryTextColor
secondaryColor
secondaryTextColor
primaryColorIntensity
secondaryColorIntensity
blogEnabled
announceEnabled
storeEnabled
pilotEnabled
qrEnabled
googleTag
facebookPixel
contactFacebook
contactInstagram
contactYoutube
contactTelegram
contactViber
contactLinkedin
contactTiktok
phoneRequired
cardEnabled
clubScheduleEnabled
cardOpenpriceEnabled
cashbackLimit
}
}
Запросы из командной строки
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ club {id, title, titleShort, icon, image} }" }' https://instasport.co/api/
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ club {id activities {id slug title image}}}" }' https://instasport.co/api/
Информация о зале
Для получения информации о зале в заголовке авторизации обязательно нужно указать ключ и клуб.
Необязательные параметры
Эти параметры используются для получения списка инструкторов и направлений тренировок зала за период времени.
startDate - начало периода. Например 2021-03-03
endDate - конец периода. Например 2021-03-07
Список полей
startDate - Время первой тренировки в зале(за все время)
endDate - Время последней, на данный момент, тренировки в зале
instructors - список всех инструкторов зала. В запрос можно передавать необязательные парамтры startDate и endDate,
для фильтрации инструктовов по датам тренировок в зале.
Например если передать startDate: "2021-03-03", endDate: "2021-03-07", в список инструкторов будут включены инстукторы,
которые имеют тренировки в указанный промежуток времени.
activities - список направлений тренировок зала. Для получения направлений в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.
Если startDate и endDate не указаны, то список будет содержать все направления для будущих тренировок зала.
zones - список зон клуба. Для получения тренировочных зон необходимо передать параметр zoneType со значением 2, общие зоны - 1.
Если не указывать параметр zoneType, то будут возвращены все зоны.
eventComplexities - список сложностей тренировок. Для получения сложностей в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.
eventGenders - список полов посетителей тренировок. Для получения полов в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.
query Hall {
hall(id: 5, startDate: "2021-03-03", endDate: "2021-03-07") {
id
title
image
description
descriptionHtml
address
phone
latitude
longitude
timeOpen
timeClose
startDate
endDate
eventGenders
instructors{
id
firstName
lastName
instructorImage
}
activities{
id
title
slug
image
}
zones(zoneType: 1) {
id
title
}
eventComplexities {
id
title
}
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ hall(id: 5) {id title image instructors {firstName lastName}} }" }' https://instasport.co/api/
Расписание
Для получения расписания в заголовке авторизации обязательно нужно указать ключ и клуб.
Чтобы выбрать конкретный зал в расписании нужно при вызове функции указать номер зала.
query Events {
events(hall: 5) {
id
date
title
activity {
id
slug
title
description
image
}
description
descriptionHtml
image
instructors {
id
firstName
lastName
instructorImage
}
hall
color
textColor
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ events(hall: 5) {id date title activity {slug title image} instructors {id firstName lastName instructorImage} color textColor}}" }' https://instasport.co/api/
Получение данных об одной тренировке
query Event {
event(id: 50000) {
id
date
title
activity {
id
slug
title
description
image
}
description
descriptionHtml
image
instructors {
id
firstName
lastName
instructorImage
}
hall
color
textColor
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ event(id: 50000) {id date title activity {slug title image} instructors {id firstName lastName avatar} color textColor}}" }' https://instasport.co/api/
Блог
Для получения статей блога в заголовке авторизации обязательно нужно указать ключ и клуб.
query Blogs {
blogs {
slug
date
title
subtitle
introduction
content
coverImage
ads
bannerImage
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ blogs { date slug title }}" }' https://instasport.co/api/
Запрос конкретной статьи по slug. slug статьи - уникальный для всей системы
query BlogArticle {
blog(slug: "ioga-na-rassvete-11") {
slug
date
title
subtitle
introduction
content
coverImage
ads
bannerImage
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ blog(slug: \"ioga-na-rassvete-11\") { date slug title subtitle introduction content coverImage }}" }' https://instasport.co/api/
Анонсы событий
Анонсы содержат дату, название, короткое описание и полное описание, кроме этого они еще могут ссылаться на тренировку (но это необязательно)
Для получения анонсов событий в заголовке авторизации обязательно нужно указать ключ и клуб.
enrollEnabled - bool, показывает возможность записи на событие без тренировки.
eventEnrollEnabled - bool, показывает наличие тренировки в анонсе события.
isEnrolled - bool, True если клиент уже записан на событие без тренировки, False в других случаях.
Если в анонсе указна тренировка (enrollEnabled в таком случае будет False, eventEnrollEnabled - True),то запись происходит на тренировку, возможность записи и способы оплаты можно получить в поле event.
Если в анонсе не указана тренировка (enrollEnabled - True, eventEnrollEnabled - False), то поле enrollEnabled отображает возможность записи на событие.
query Announces {
announces {
date
title
shortDescription
description
descriptionHtml
enrollEnabled
eventEnrollEnabled
isEnrolled
event {
template {
headline
}
}
image
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ announces { date title shortDescription description descriptionHtml event { template { headline }} image }}" }' https://instasport.co/api/
Запись на анонсированые события
Запись на событие без тренировки
Параметры
announce - Id анонса, обязательный параметр
familyProfileId - Id профиля для записи семейных профилей
mutation AnnounceEnroll {
announceEnroll(announce:258) {
announce{
id
}
}
}
Отмена записи на событие без тренировки
mutation AnnounceDecline {
announceDecline(announce:258) {
announce {
id
}
}
}
Запись и отмена записи на событие с тренировкой
Запись на такие события происходит как на обычные тренировки https://github.com/instasport/club-api/wiki/visit. Необходимую информацию можно получить в поле event.
Товары
Секции товаров
Все товары разбиты на секции товаров, который одинаковые для всех клубов (на подобии спортивных направлений)
query ProductSections {
productSections {
id
title
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ productSections {id title} }" }' https://instasport.co/api/
Категории товаров
В клубе товары разбиты по категориям (эти категории уникальны для каждого клуба). Для получения категории товаров в заголовке авторизации обязательно нужно указать ключ и клуб.
query Categories {
productCategories {
id
title
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ productCategories {id title} }" }' https://instasport.co/api/
Все товары
Для получения товаров в заголовке авторизации обязательно нужно указать ключ и клуб.
query Products {
products {
id
title
description
price
section {
id
title
}
category {
id
title
}
imageProduct {
id
image
}
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ products {id title section {id title}} }" }' https://instasport.co/api/
Подробнее о товаре по id
Для получения сведений о товаре в заголовке авторизации обязательно нужно указать ключ и клуб.
query Product {
product(id: 515) {
id
title
description
price
section {
id
title
}
category {
id
title
}
imageProduct {
id
image
}
}
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ product(id: 515) {id title section {id title}} }" }' https://instasport.co/api/
Зоны клуба
Запрос на получение зoны по id
id - int, обязательный параметр, id зоны
Список полей
id - ID зоны
zoneType - тип зоны, 1 - общая зона, 2 - зона для тренировки
title - название зоны
criteria - массив критериев оценивания для зоны. PortalCriterionType
id - id критерия
title - название критерия
markHistory - история оценок зоны
id - id истории оценки
mark - оценка
comment - комментарий
portalCriterion - критерий оценивания. PortalCriterionType
id - id критерия
title - название критерия
Запроc для получения массива зон
Параметры запроса
zoneType - int, тип зоны. 2 - зоны для тренировок (для расписания), 1 - общие зоны. Необязательный параметр.
hall - int, ID зала. Используется для получения зон для конкретного зала. Необязательный параметр
query zone {
zone(id: 8){
id
title
criteria {
id
title
}
markHistory {
id
mark
comment
portalCriterion {
id
title
}
}
}
}
Список зон клуба
query zone {
zones(hall:208, zoneType:1){
id
title
criteria {
id
title
}
markHistory {
id
mark
comment
portalCriterion {
id
title
}
}
}
}
Оценить зону клуба
Параметры запроса
Все параметры обязательные
zoneId - id зоны
marks - данные полученные от пользователя
id - id критерия оценивания
mark - оценка от 1 до 5
comment - комментарий
mutation MarkZone {
markZone(zoneId: 8, marks: "[{"id": "4", "mark": "4", "comment": "comment text"}, {"id": "5", "mark": "5", "comment": "text"}]") {
zone {
id
markHistory {
id
portalCriterion{
title
}
mark
comment
}
}
}
}
Редактироване оценки зоны
Параметры запроса
Все параметры обязательные
zoneId - id зоны
marks - данные полученные от пользователя
id - id оценки
mark - оценка от 1 до 5
comment - комментарий
mutation UpdateZoneMark {
updateZoneMark(zoneId: 8, marks: "[{"id": "4", "mark": "4", "comment": "comment text"}, {"id": "5", "mark": "5", "comment": "text"}]") {
zone {
id
markHistory {
id
portalCriterion{
title
}
mark
comment
}
}
}
}
Удалить оценку
mutation {
deleteZoneMark(zoneId: 8 markId: 58) {
zone{
id
}
}
}
В результате запросов markZone deleteZoneMark будет возвращен объект zone - ZoneType, с полями аналогичными query zone