URL: http://38.54.122.209:5000/api
Для аутентификации при запросах используется токен доступа, который необходимо передавать в заголовке Authorization вместе с префиксом Bearer. Получить токен можно при помощи запроса на эндпоинт /login.
Authorization: Bearer <access_token>
URL: /login
Метод: POST
Доступ: admin, user
Тело запроса:
{
"username": "testuser",
"password": "testpassword"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
username |
Строка | Имя пользователя | Да | 50 |
password |
Строка | Пароль | Да | 120 |
Ответ в случае успеха
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"user": {
"domains": [],
"email": "test2@test.com",
"id": 7,
"telegram": "testtelegram",
"username": "testuser-2"
}
}*access_token - токен доступа, который необходимо использовать для авторизации в других запросах.
URL: /users/register
Метод: POST
Доступ: admin
Тело запроса:
{
"username": "testuser",
"email": "test@test.com",
"password": "testpassword",
"telegram": "testtelegram",
"role": "user"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
username |
Строка | Уникальное имя пользователя | Да | 50 |
email |
Строка | Уникальный Email | Да | 120 |
password |
Строка | Пароль | Да | 120 |
telegram |
Строка | Telegram | Нет | 35 |
role |
Строка | Роль пользователя (user или admin) |
Да | 20 |
Ответ в случае успеха:
{
"message": "User registered successfully."
}URL: /users
Метод: GET
Доступ: admin
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по username/email/telegram пользователя |
Нет |
Ответ:
{
"users": [
{
"allowed_apps": [
{
"id": 18,
"title": "Test App 1"
}
],
"domains": [
{
"domain": "test.com",
"id": 1
},
{
"domain": "test2.com",
"id": 2
}
],
"email": "test@test.com",
"id": 1,
"telegram": "testtelegram",
"username": "testuser",
"status": "active",
"balance": 0.00,
"role": "user"
},
{
"allowed_apps": [],
"domains": [],
"email": "test2@test.com",
"id": 2,
"telegram": "testtelegram2",
"username": "testuser2",
"status": "active",
"balance": 0.00,
"role": "admin"
}
]
}URL: /users/<int:user_id>
Метод: GET
Доступ: admin, user c user.id = user_id
Ответ:
{
"user": {
"allowed_apps": [],
"domains": [],
"email": "test@test.com",
"id": 1,
"username": "testuser",
"telegram": "testtelegram",
"status": "active",
"balance": 0.00,
"role": "user"
}
}URL: /users/update_status
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"status": "inactive"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID пользователя | Да | |
status |
Строка | Статус пользователя (active или inactive) |
Да | 20 |
Ответ в случае успеха:
{
"message": "User status updated successfully."
}URL: /users/update_role
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"role": "admin"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID пользователя | Да | |
role |
Строка | Роль пользователя (user или admin) |
Да | 20 |
Ответ в случае успеха:
{
"message": "User role updated successfully."
}URL: /users/add_balance
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"amount": 100
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID пользователя | Да | |
amount |
Число с плавающей запятой | Сумма пополнения | Да |
Ответ в случае успеха:
{
"message": "User balance added successfully."
}URL: /users/subtract_balance
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"amount": 100
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID пользователя | Да | |
amount |
Число с плавающей запятой | Сумма списания | Да |
Ответ в случае успеха:
{
"message": "User balance subtracted successfully."
}URL: /users/<int:user_id>/transactions
Метод: GET
Доступ: admin, user c user.id = user_id
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| search_query | Строка | Поиск по причине транзакции (domain purchase, conversion install, conversion registration, conversion deposit) |
Нет |
Ответ:
{
"transactions": [
{
"id": 1,
"transaction_type": "+",
"amount": 100.00,
"reason": "admin deposit",
"geo": null,
"app_id": null,
"os": null,
"timestamp": "Tue, 17 Oct 2023 00:00:00 GMT"
},
{
"id": 2,
"transaction_type": "-",
"amount": 15.00,
"reason": "domain purchase",
"geo": "US",
"app_id": null,
"os": null,
"timestamp": "Tue, 17 Oct 2023 00:00:00 GMT"
},
{
"id": 3,
"transaction_type": "-",
"amount": 0.10,
"reason": "conversion install",
"geo": "US",
"app_id": 1,
"os": "ios",
"timestamp": "Tue, 17 Oct 2023 00:00:00 GMT"
}
]
}URL: /users/<int:user_id>/api_key
Метод: GET
Доступ: admin, user c user.id = user_id
Ответ:
{
"success": true,
"api_key": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}URL: /users/<int:user_id>/update_api_key
Метод: PATCH
Доступ: admin, user c user.id = user_id
Ответ:
{
"api_key": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"message": "API key updated successfully.",
"success": true,
}URL: /users/update_password
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"password": "newpassword"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID пользователя | Да | |
password |
Строка | Новый пароль | Да | 120 |
Ответ в случае успеха:
{
"message": "New password set successfully."
}URL: /users/subusers
Метод: GET
Доступ: admin, user
Ответ:
{
"subusers": [
{
"name": "subuser1",
"color": "#000000",
"id": 1,
"description": "subuser1 description"
},
{
"name": "subuser2",
"color": "#000000",
"id": 2,
"description": "subuser2 description"
}
]
}URL: /users/subusers/add
Метод: POST
Доступ: admin, user
Тело запроса:
{
"name": "subuser1",
"color": "#000000",
"description": "subuser1 description"
}Ответ в случае успеха:
{
"message": "Subuser added successfully."
}URL: /users/<int:user_id>/statistics
Метод: GET
Доступ: admin, user c user.id = user_id
Параметры запроса:
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| period | Строка | Период статистики (day, week, month, year, all) |
Нет, default:month |
|
| campaign_hash | Строка | Хэш код кампании для выборки её событий | Нет | |
| app_hash | Строка | Хэш код приложения для выборки его событий | Нет |
Ответ:
{
"success": true,
"data": null
}{
"success": true,
"data": {
"campaign_events": {
"total": 9,
"offer": {
"total": 1,
"events": [
{
"id": 12,
"campaign_name": "AT EGYPT TAG",
"subuser_hash": null,
"clid": "36171967f7",
"domain": "septemoni.online",
"request_parameters": {
"psa": "2"
},
"user_ip": "188.163.96.228",
"country": "ua",
"city": "zaporizhzhya",
"device": "ios",
"event_result": "offer",
"app_id": null,
"landing_id": 1,
"redirect_url": null
}
]
},
"emergency": {
"total": 0,
"events": []
},
"landing": {
"total": 0,
"events": []
},
"app": {
"total": 0,
"events": []
},
},
"app_events": {
"total": 0,
"view": {
"total": 0,
"events": []
},
"install": {
"total": 0,
"events": []
},
"register": {
"total": 0,
"events": []
},
"deposit": {
"total": 0,
"events": []
},
"entry": {
"total": 0,
"events": []
}
}
}
}URL: /upload_file
Метод: POST
Тело запроса:
{
"file": "image1.png"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
file |
Файл | Загружаемый файл | Да |
Примечание: если загружается архив, в нём должен находиться файл index.html, иначе будет возвращена ошибка 400.
Ответ в случае успеха:
{
"file": "1697372400249729.png",
"folder": "static/img/uploads"
}URL: /apps/tags
Метод: GET
Доступ: admin, user
Ответ:
{
"tags": [
{
"id": 1,
"tag": "tag1",
"apps": [
1,
2,
3
]
},
{
"id": 2,
"tag": "tag2",
"apps": [
4
]
}
]
}URL: /apps/tags/add
Метод: POST
Доступ: admin
Тело запроса:
{
"tag": "tag5"
}Ответ в случае успеха:
{
"message": "Tag added successfully."
}URL: /apps
Метод: GET
Доступ: admin, user (список активных приложений)
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по title/tags приложения |
Нет |
Ответ для admin:
{
"apps": [
{
"allowed_users": [
{
"id": 1,
"username": "test_admin"
},
{
"id": 2,
"username": "test_user"
}
],
"created_at": "Tue, 17 Oct 2023 00:00:00 GMT",
"id": 1,
"title": "My App",
"url": "https://myapp.com",
"image": "static/img/uploads/1697372400249729.png",
"operating_system": "ios",
"tags": ["tag1", "tag2"],
"description": "My App description",
"status": "active",
"is_deleted": false,
"views": 0,
"installs": 0,
"registrations": 0,
"deposits": 0,
"install_price": 0.00,
"conversion_price": 0.00,
},
{
"allowed_users": [],
"created_at": "Tue, 17 Oct 2023 00:00:00 GMT",
"id": 2,
"title": "Another App",
"url": "https://anotherapp.com",
"image": "static/img/uploads/1697382997814109.png",
"operating_system": "android",
"tags": ["tag3", "tag4"],
"description": "Another App description",
"status": "inactive",
"is_deleted": false,
"views": 0,
"installs": 0,
"registrations": 0,
"deposits": 0,
"install_price": 0.00,
"conversion_price": 0.00,
}
]
}Ответ для user:
{
"apps": [
{
"id": 1,
"title": "My App",
"image": "static/img/uploads/1697372400249729.png",
"operating_system": "ios",
"tags": ["tag1", "tag2"]
},
{
"id": 2,
"title": "Another App",
"image": "static/img/uploads/1697382997814109.png",
"operating_system": "android",
"tags": ["tag3", "tag4"]
}
]
}URL: /apps/<int:app_id>
Метод: GET
Доступ: admin, user, если приложение активно и разрешено для пользователя
Ответ для admin
{
"app": {
"allowed_users": [
{
"id": 1,
"username": "test_admin"
},
{
"id": 2,
"username": "test_user"
}
],
"created_at": "Tue, 17 Oct 2023 00:00:00 GMT",
"id": 1,
"title": "My App",
"url": "https://myapp.com",
"image": "static/img/uploads/1697372400249729.png",
"operating_system": "ios",
"tags": ["tag1", "tag2"],
"unique_tag": "myapp",
"description": "My App description",
"status": "active",
"is_deleted": false,
"views": 0,
"installs": 0,
"registrations": 0,
"deposits": 0,
"install_price": 0.00,
"conversion_price": 0.00,
}
}Ответ для user
{
"app": {
"id": 1,
"title": "My App",
"image": "static/img/uploads/1697372400249729.png",
"operating_system": "ios",
"tags": ["tag1", "tag2"]
}
}URL: apps/check_title
Метод: POST
Тело запроса:
{
"title": "My App"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
title |
Строка | Название приложения | Да | 120 |
Ответ в случае успеха:
{
"message": "App title is unique."
}Ответ в случае ошибки:
{
"error": "An app with this title already exists."
}URL: apps/check_url
Метод: POST
Тело запроса:
{
"url": "https://myapp.com"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
url |
Строка | URL приложения | Да | 120 |
Ответ в случае успеха:
{
"message": "App URL is unique."
}Ответ в случае ошибки:
{
"error": "An app with this URL already exists."
}URL: /apps/add
Метод: POST
Доступ: admin
Тело запроса:
{
"title": "My New App",
"url": "https://mynewapp.com",
"image": "image3.png",
"image_folder": "static/img/uploads",
"operating_system": "ios",
"tags": ["control", "test"],
"description": "My New App description",
"status": "active",
"install_price": 0.00,
"conversion_price": 0.00
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
title |
Строка | Название приложения | Да | 120 |
url |
Строка | URL приложения | Да | 120 |
image |
Строка | Файл изображения | Нет | 25 |
image_folder |
Строка | Папка с изображением | Нет | 230 |
operating_system |
Строка | Операционная система, для которой предназначено приложение | Да | 20 |
tags |
Список строк | Список тегов, связанных с приложением | Нет | 25 символов/tag |
description |
Строка | Описание приложения | Нет | 256 |
status |
Строка | Статус приложения (active или inactive) |
Да | 20 |
install_price |
Число с плавающей запятой | Цена за установку | Нет | |
conversion_price |
Число с плавающей запятой | Цена за конверсию | Нет |
Ответ в случае успеха:
{
"message": "App added successfully."
}Ответы в случае ошибки:
{
"error": "An app with this title already exists."
}{
"error": "An app with this unique tag already exists."
}{
"error": "An app with this URL already exists."
}URL: /apps/update_status
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"status": "inactive"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID приложения | Да | |
status |
Строка | Статус приложения (active, inactive, banned) |
Да | 20 |
Ответ в случае успеха:
{
"message": "App status updated successfully."
}URL: /apps/allow_for_users
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"users": [
1,
2,
3
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID приложения | Да | |
users |
Список | Список ID пользователей | Да |
Ответ в случае успеха:
{
"message": "App allowed for users successfully."
}URL: /apps/disallow_for_users
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"users": [
1,
2,
3
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID приложения | Да | |
users |
Список | Список ID пользователей | Да |
Ответ в случае успеха:
{
"message": "App disallowed for users successfully."
}URL: /apps/delete
Метод: DELETE
Доступ: admin
Тело запроса:
{
"id": 1
"deleted": true
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| id | Целое число | ID приложения | Да | |
| deleted | Булево | Удалить приложение (true, false) |
Нет |
Ответ в случае успеха:
{
"message": "App deleted successfully."
}URL: /campaigns
Метод: GET
Доступ: admin (список всех кампаний), user (список кампаний пользователя)
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по title кампании |
Нет | |
| archived | Булево | Показать архивные/неархивные/все кампании (true, false, null) |
Нет (default: null) |
Ответ:
{
"campaigns": [
{
"apps": [
{
"description": "My New App 2 description",
"id": 2,
"image": "image2.png",
"operating_system": "Android",
"status": "inactive",
"tags": [
"tag1",
"tag3"
],
"title": "My New App 2",
"unique_tag": "mynewapp2",
"url": "https://mynewapp2.com"
}
],
"archived": false,
"custom_parameters": {},
"description": "My Campaign description",
"geo": "US",
"hash_code": "eb1d81ece0abb0e2850ba90949581c1a01dbc2de9ce32f46175600cf110f09e0",
"id": 6,
"landing_page": "landing2.php",
"status": null,
"title": "My Campaign",
"user_id": 1,
"user_name": "testuser",
"subuser": {
"id": 1,
"name": "subuser1",
"color": "#000000",
"description": "subuser1 description"
}
},
{
"apps": [
{
"description": "My New App description",
"id": 9,
"image": "image3.png",
"operating_system": "iOS",
"status": "active",
"tags": [
"tag1",
"tag2"
],
"title": "My New App 4",
"unique_tag": "mynewapp4",
"url": "https://mynewapp4.com"
},
{
"description": "My New App description",
"id": 8,
"image": "image3.png",
"operating_system": "iOS",
"status": "active",
"tags": [
"tag1",
"tag2"
],
"title": "My New App 3",
"unique_tag": "mynewapp3",
"url": "https://mynewapp3.com"
}
],
"archived": true,
"custom_parameters": {
"param1": "value1",
"param2": "value2"
},
"description": "My New Campaign description",
"geo": "US",
"hash_code": "b85b82bcae58c39ea585e99c1362b098d1604f6f639bd697c9454aed945557b8",
"id": 7,
"landing_page": "landing2.php",
"status": "inactive",
"title": "My New Campaign",
"user_id": 1,
"user_name": "testuser",
"subuser": null
}
]
}URL: /campaigns/<int:campaign_id>
Метод: GET
Доступ: admin, user c user_id = campaign.user_id
Ответ:
{
"campaign": {
"apps": [
{
"description": "My New App description",
"id": 9,
"image": "image3.png",
"operating_system": "iOS",
"status": "active",
"tags": [
"tag1",
"tag2"
],
"title": "My New App 4",
"unique_tag": "mynewapp4",
"url": "https://mynewapp4.com"
},
{
"description": "My New App description",
"id": 8,
"image": "image3.png",
"operating_system": "iOS",
"status": "active",
"tags": [
"tag1",
"tag2"
],
"title": "My New App 3",
"unique_tag": "mynewapp3",
"url": "https://mynewapp3.com"
}
],
"apps_stats": [
{
"id": 9,
"visits": 0,
"weight": 50
},
{
"id": 8,
"visits": 0,
"weight": 20
},
{
"id": null,
"visits": 0,
"weight": 30
}
],
"archived": false,
"custom_parameters": {
"param1": "value1",
"param2": "value2"
},
"description": "My New Campaign description",
"geo": "US",
"hash_code": "b85b82bcae58c39ea585e99c1362b098d1604f6f639bd697c9454aed945557b8",
"id": 7,
"landing_page": "landing2.php",
"status": "inactive",
"title": "My New Campaign",
"user_id": 1,
"user_name": "testuser"
}
}URL: /campaigns/add
Метод: POST
Доступ: admin, user
Тело запроса:
{
"title": "My New Campaign",
"user": 1,
"subuser_id": 1,
"geo": "US",
"description": "My New Campaign description",
"offer_url": "https://mynewcampaign.com/offer",
"landing_page": 1,
"custom_parameters": {"param1": "value1", "param2": "value2"},
"status": "active",
"apps": [
{
"id": 1,
"weight": 50
},
{
"id": 2,
"weight": 20
}
],
или "tags" вместо "apps":
"tags": [
"tag1",
"tag2"
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
title |
Строка | Название кампании | Да | 120 |
user |
Целое число | ID пользователя, создавшего кампанию | Да | |
subuser_id |
Целое число | ID подпользователя | Нет | |
geo |
Строка | География кампании | Да | 2 |
apps |
Список | Список словарей с ID приложений и их весом в % | Да, если не передан список тегов приложений | |
tags |
Список | Список тегов приложений | Да, если не передан список приложений | |
description |
Строка | Описание кампании | Нет | 256 |
offer_url |
Строка | URL оффера | Да | 256 |
landing_page |
Целое число | ID лендинга | Да | |
custom_parameters |
Словарь | Словарь пользовательских параметров | Нет | |
status |
Строка | Статус кампании (active или inactive) |
Да | 20 |
Ответ в случае успеха:
{
"message": "Campaign added successfully."
}URL: /campaigns/update_status
Метод: PATCH
Доступ: admin, user c user_id = campaign.user_id
Тело запроса:
{
"id": 1,
"status": "inactive"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID кампании | Да | |
status |
Строка | Статус кампании (active или inactive) |
Да | 20 |
Ответ в случае успеха:
{
"message": "Campaign status updated successfully."
}URL: /campaigns/send_to_archive
Метод: PATCH
Доступ: admin, user c user_id = campaign.user_id
Тело запроса:
{
"id": 1,
"archived": true
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID кампании | Да | |
archived |
Булево | Статус архивации кампании (true или false) |
Да |
Ответ в случае успеха:
{
"message": "Campaign archived successfully."
}{
"message": "Campaign restored from archive successfully."
}URL: /campaigns/update_subuser
Метод: PATCH
Доступ: admin с campaign.user_id = user.id, user c campaign.user_id = user.id
Тело запроса:
{
"id": 1,
"subuser_id": 1
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID кампании | Да | |
subuser_id |
Целое число | ID подпользователя | Нет. Если не передан, то подпользователь будет удалён из кампании. |
Ответ в случае успеха:
{
"message": "Campaign subuser assigned successfully."
}{
"message": "Campaign subuser unassigned successfully."
}
URL: /campaigns/update_info
Метод: PATCH
Доступ: admin, user c user_id = campaign.user_id
Тело запроса:
{
"id": 1,
"title": "My New Campaign",
"subuser_id": 1,
"geo": "US",
"description": "My New Campaign description",
"offer_url": "https://mynewcampaign.com/offer",
"landing_page": 1,
"custom_parameters": {"param1": "value1", "param2": "value2"},
"status": "active"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID кампании | Да | |
title |
Строка | Название кампании | Нет | 120 |
subuser_id |
Целое число | ID подпользователя | Нет | |
geo |
Строка | География кампании | Нет | 2 |
description |
Строка | Описание кампании | Нет | 256 |
offer_url |
Строка | URL оффера | Нет | 256 |
landing_page |
Целое число | ID лендинга | Нет | |
custom_parameters |
Словарь | Словарь пользовательских параметров | Нет | |
status |
Строка | Статус кампании (active или inactive) |
Нет | 20 |
Ответ в случае успеха:
{
"message": "Campaign info updated successfully."
}URL: /campaigns/<int:campaign_id>/stats
Метод: GET
Доступ: admin, user c user_id = campaign.user_id
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| search_query | Строка | Поиск по event события |
Нет |
Ответ:
{
"success": true,
"logs": [
{
"id": 1,
"clid": "a1b2f4",
"campaign_id": 1,
"event": "install",
"message": "Installed app 1",
"timestamp": "Tue, 17 Oct 2023 00:00:00 GMT",
}
],
"total_count": 1,
"stats": {
"clicks": 1,
"installs": 0,
"registrations": 0,
"deposits": 0
}
}URL: /campaigns/delete/<int:campaign_id>
Метод: DELETE
Доступ: admin, user c user_id = campaign.user_id
Ответ в случае успеха:
{
"message": "Campaign deleted successfully."
}URL: /domains/top
Метод: GET
Доступ: admin
Ответ:
{
"success": true,
"top_domains": [
".store",
".online",
".shop"
]
}URL: /domains
Метод: GET
Доступ: admin (список всех доменов), user (список доменов пользователя)
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по domain домена |
Нет |
Ответ:
{
"domains": [
{
"created": "Tue, 17 Oct 2023 00:00:00 GMT",
"domain": "mydomain.store",
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 1,
"redirected": false,
"status": "inactive",
"user_id": null
},
{
"created": "Tue, 17 Oct 2023 00:00:00 GMT",
"domain": "mydomaain.store",
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 1,
"redirected": true,
"status": "active",
"user_id": 1
}
]
}URL: /users/<int:user_id>/domains
Метод: GET
Доступ: admin, user c user_id = domain.user_id
Ответ:
{
"domains": [
{
"created": "Tue, 17 Oct 2023 00:00:00 GMT",
"domain": "mydomain.store",
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 1,
"redirected": false,
"status": "inactive",
"user_id": 1
},
{
"created": "Tue, 17 Oct 2023 00:00:00 GMT",
"domain": "mydomaain.store",
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 1,
"redirected": true,
"status": "active",
"user_id": 1
}
]
}URL: /domains/<int:domain_id>
Метод: GET
Доступ: admin, user c user_id = domain.user_id
Ответ:
{
"domain": {
"created": "Tue, 17 Oct 2023 00:00:00 GMT",
"domain": "mydomaain.store",
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 1,
"redirected": true,
"status": "active",
"users": []
}
}URL: domains/check_domains
Метод: POST
Доступ: admin, user
Тело запроса:
{
"domains": ["mydomain.store", "mydomain2.store"]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domains |
Список | Список доменов (допустимые TLD: .online, .store) |
Да | 70 символов/домен |
Ответ:
{
"domains": [
{
"available": false,
"domain": "mydomain.store"
},
{
"available": true,
"domain": "mydomain2.store"
}
]
}URL: /domains/add
Метод: POST
Доступ: admin
Тело запроса:
{
"domains": [
"mydomain.online",
"mydomain2.store",
"mydomain3.store"
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domains |
Список словарей | Домен (допустимые TLD: .online, .store) с необязательным списком поддоменов |
Да | 50 доменов; 70 символов/домен |
Ответ:
{
{
"domains": [
{
"domain": "mydomain.online",
"proxied": true,
"redirected": true,
"registered": true,
"success": true,
"subdomains": [
"subdomain",
"subdomain2"
]
},
{
"domain": "mydomain2.store",
"error": "Domain is not available.",
"success": false
},
{
"domain": "mydomain3.store",
"error": "Domain is not available.",
"success": false
}
]
}
}URL: /domains/update_status
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"status": "inactive"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID домена | Да | |
status |
Строка | Статус домена (active или inactive) |
Да | 20 |
Ответ в случае успеха:
{
"message": "Domain status updated successfully."
}URL: /domains/update_dns_hosts
Метод: POST
Доступ: admin
Тело запроса:
{
"domain": "mydomain.store"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domain |
Строка | Домен (допустимые TLD: .online, .store) |
Да | 70 |
Ответ в случае успеха:
{
"message": "Domain hosts updated successfully."
}URL: /domains/assign_to_user
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"user_id": 2
}Ответ в случае успеха:
{
"message": "Domain assigned successfully."
}URL: /domains/purchase
Метод: POST
Доступ: admin, user
Тело запроса:
{
"id": 1
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| id | Целое число | ID домена, если нужно купить определённый | Нет |
Ответ в случае успеха:
{
"message": "Domain purchased successfully."
}URL: /domains/update_subuser
Метод: PATCH
Доступ: admin c user_id = domain.user_id, user c user_id = domain.user_id
Тело запроса:
{
"id": 1,
"subuser_id": 2
}Ответ в случае успеха:
{
"message": "Domain subuser updated successfully."
}URL: /domains/delete/<int:domain_id>
Метод: DELETE
Доступ: admin
Ответ в случае успеха:
{
"message": "Domain deleted successfully."
}URL: /subdomains
Метод: GET
Доступ: admin (список всех поддоменов), user (список поддоменов пользователя)
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по subdomain поддомена |
Нет |
Ответ:
{
"subdomains": [
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 2,
"status": "inactive",
"subdomain": "subdomain.mydomain.store",
"user_id": null,
"is_paid": false
},
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 3,
"status": "active",
"subdomain": "subdomain2.mydomain.store",
"user_id": 2,
"is_paid": true
}
]
}URL: /domains/<int:domain_id>/subdomains
Метод: GET
Доступ: admin, user c user_id = domain.user_id
Ответ:
{
"subdomains": [
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 2,
"status": "inactive",
"subdomain": "subdomain.mydomain.store",
"user_id": null,
"is_paid": false
},
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 3,
"status": "active",
"subdomain": "subdomain2.mydomain.store",
"user_id": 2,
"is_paid": true
}
]
}URL: /users/<int:user_id>/subdomains
Метод: GET
Доступ: admin, user c user_id = user_id
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по subdomain поддомена |
Нет |
Ответ:
{
"subdomains": [
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 2,
"status": "inactive",
"subdomain": "subdomain.mydomain.store",
"user_id": null,
"is_paid": false
},
{
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 3,
"status": "active",
"subdomain": "subdomain2.mydomain.store",
"user_id": 2,
"is_paid": true
}
]
}URL: /subdomains/<int:subdomain_id>
Метод: GET
Доступ: admin, user c user_id = subdomain.user_id
Ответ:
{
"subdomain": {
"domain_id": 1,
"expires": "Thu, 17 Oct 2024 00:00:00 GMT",
"id": 3,
"status": "active",
"subdomain": "subdomain.mydomaain.store",
"user_id": 2,
"is_paid": true
}
}Устаревший метод
URL: subdomains/check_subdomain
Метод: POST
Тело запроса:
{
"domain": "mydomain.store",
"subdomain": "subdomain"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domain |
Строка | Домен (допустимые TLD: .online, .store) |
Да | 70 |
subdomain |
Строка | Поддомен | Да | 70 |
Ответ:
{
"message": "Subdomain is available."
}Устаревший метод
URL: /subdomains/add
Метод: POST
Тело запроса:
{
"domain": "mydomain.store",
"subdomain": "subdomain",
"user_id": 3
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domain |
Строка | Домен (допустимые TLD: .online, .store) |
Да | 70 |
subdomain |
Строка | Поддомен | Да | 70 |
user_id |
Целое число | ID пользователя, которому принадлежит поддомен | Нет |
Ответ в случае успеха:
{
"message": "Subdomain added successfully."
}URL: /subdomains/update_status
Метод: PATCH
Доступ: admin, user c user_id = subdomain.user_id
Тело запроса:
{
"id": 1,
"status": "inactive"
}Ответ в случае успеха:
{
"message": "Subdomain status updated successfully."
}URL: /landings
Метод: GET
Доступ: admin, user
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) | |
| search_query | Строка | Поиск по title/tags/geo лендинга |
Нет |
Ответ:
{
"landings": [
{
"id": 1,
"title": "My New Landing",
"description": "My New Landing description",
"geo": "US",
"status": "active",
"tags": [
"php",
"test"
]
},
{
"id": 2,
"title": "My New Landing 2",
"description": "My New Landing 2 description",
"geo": "PL",
"status": "inactive",
"tags": [
"html"
]
}
]
}URL: /landings/<int:landing_id>
Метод: GET
Доступ: admin, user
Ответ:
{
"landing": {
"id": 1,
"title": "My New Landing",
"description": "My New Landing description",
"geo": "US",
"status": "active",
"tags": [
"php",
"test"
]
}
}URL: /landings/add
Метод: POST
Доступ: admin
Тело запроса:
{
"title": "My New Landing",
"description": "My New Landing description",
"geo": "US",
"working_directory": "static/landings/1698058817792564",
"zip_file": "1698058817792564.zip",
"status": "active",
"tags": [
"php",
"test"
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
title |
Строка | Название лендинга | Да | 120 |
description |
Строка | Описание лендинга | Нет | 1500 |
geo |
Строка | География лендинга | Да | 2 |
working_directory |
Строка | Рабочая директория лендинга | Да | 255 |
zip_file |
Строка | Файл архива лендинга (zip или 7z) |
Да | 255 |
status |
Строка | Статус лендинга (active или inactive) |
Да | 20 |
tags |
Список строк | Список тегов, связанных с лендингом | Нет | 25 символов/tag |
Ответ в случае успеха:
{
"message": "Landing added successfully."
}URL: /landings/update_status
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"status": "inactive"
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID лендинга | Да | |
status |
Строка | Статус лендинга (active или inactive) |
Да | 20 |
Ответ в случае успеха:
{
"message": "Landing status updated successfully."
}URL: /landings/update
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"title": "My New Landing 3",
"description": "My New Landing 3 description",
"working_directory": "static/landings/1698058817792321",
"zip_file": "1698058817792321.zip",
"status": "inactive",
"tags": [
"html"
]
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
id |
Целое число | ID лендинга | Да | |
title |
Строка | Название лендинга | Нет | 120 |
description |
Строка | Описание лендинга | Нет | 1500 |
working_directory |
Строка | Рабочая директория лендинга | Нет | 255 |
zip_file |
Строка | Файл архива лендинга (zip или 7z) |
Нет | 255 |
status |
Строка | Статус лендинга (active или inactive) |
Нет | 20 |
tags |
Список строк | Список тегов, связанных с лендингом | Нет | 25 символов/tag |
Ответ в случае успеха:
{
"message": "Landing updated successfully."
}URL: /generate_campaign_link
Метод: POST
Доступ: admin, user
Тело запроса:
{
"domain_id": 1,
"campaign_id": 1,
"additional_parameters": {
"param1": "value1",
"param2": "value2"
}
}{
"subdomain_id": 10,
"campaign_id": 6,
"additional_parameters": {
"param1": "value1",
"param2": "value2"
}
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
domain_id |
Целое число | ID домена | Да, если выбран домен | |
subdomain_id |
Целое число | ID поддомена | Да, если выбран поддомен | |
campaign_id |
Целое число | ID кампании | Да | |
additional_parameters |
Словарь | Словарь дополнительных параметров | Нет |
Ответ в случае успеха:
{
"message": "Campaign link generated successfully.",
"ready_link": "https://subdomain.mydomain.store/?uchsik=eb1d81ece0abb0e2850ba90949581c1a01dbc2de9ce32f46175600cf110f09e0¶m1=value1¶m2=value2"
}URL: /geo_prices
Метод: GET
Доступ: admin, user
Ответ в случае успеха:
{
"geo_prices": [
{
"id": 1,
"geo": "ua",
"install_price": 0.05,
"conversion_price": 0.10
},
{
"id": 3,
"geo": "us",
"install_price": 0.05,
"conversion_price": 0.10
}
]
}URL: /geo_prices/add
Метод: POST
Доступ: admin
Тело запроса:
{
"geo": "ua",
"install_price": 0.05,
"conversion_price": 0.10
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| geo | Строка | Гео | Да | 2 |
| install_price | Число | Цена за установку | Да | |
| conversion_price | Число | Цена за конверсию | Да |
Ответ в случае успеха:
{
"message": "Geo price added successfully."
}URL: /geo_prices/update
Метод: PATCH
Доступ: admin
Тело запроса:
{
"id": 1,
"install_price": 0.05,
"conversion_price": 0.10
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| id | Целое число | ID прайса | Да | |
| install_price | Число | Цена за установку | Да | |
| conversion_price | Число | Цена за конверсию | Да |
Ответ в случае успеха:
{
"message": "Geo price updated successfully."
}URL: /google_conversions/add
Метод: POST
Доступ: admin, user
Тело запроса:
{
"name": "My Google Conversion",
"gtag": "AW-123456789",
"install_clabel": "123456789",
"reg_clabel": "123456789",
"dep_clabel": "123456789",
}| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| name | Строка | Название конверсии | Да | 120 |
| gtag | Строка | Google Tag ID | Да | 255 |
| install_clabel | Строка | Google Conversion Label для установки | Да | 255 |
| reg_clabel | Строка | Google Conversion Label для регистрации | Да | 255 |
| dep_clabel | Строка | Google Conversion Label для депозита | Да | 255 |
Ответ в случае успеха:
{
"success": true,
"message": "Google conversion added successfully.",
"data": {
"id": 1,
"name": "My Google Conversion",
"rma": "abc123def456",
"gtag": "AW-123456789",
"install_clabel": "123456789",
"reg_clabel": "123456789",
"dep_clabel": "123456789",
}
}URL: /google_conversions
Метод: GET
Доступ: admin, user c user_id = google_conversion.user_id
Параметры запроса:
| Параметр | Тип | Описание | Обязательный | Максимальная длина |
|---|---|---|---|---|
| page | Целое число | Номер страницы | Нет (default: 1) | |
| per_page | Целое число | Количество записей на странице | Нет (default: 50) |
Ответ в случае успеха:
{
"success": true,
"tolal_count": 1,
"google_conversions": [
{
"id": 1,
"name": "My Google Conversion",
"rma": "abc123def456",
"gtag": "AW-123456789",
"install_clabel": "123456789",
"reg_clabel": "123456789",
"dep_clabel": "123456789",
}
]
}Ответ может содержать следующие ошибки:
404 Not Found: запрашиваемый ресурс не найден.400 Bad Request: запрос содержит некорректные данные или отсутствуют обязательные параметры.401 Unauthorized: запрос не содержит авторизационных данных или они некорректны.403 Forbidden: запрос отклонен из-за отсутствия прав доступа.500 Internal Server Error: внутренняя ошибка сервера.