API

Документація API

OpenAPI-специфікація для публічного розкладу, цін, заявок із сайту та MCP tools у scope акаунта.

OpenAPI JSON
get Public schedule

Returns upcoming public group classes for a studio location.

/api/v1/public/{accountSlug}/{locationSlug}/schedule

get Public schedule

Alias for the public schedule endpoint.

/api/v1/public/{accountSlug}/{locationSlug}/classes

get Public prices

Returns active public price groups for a studio location.

/api/v1/public/{accountSlug}/{locationSlug}/price

get Mobile studio

Returns public studio metadata and customer authentication methods for the native mobile app.

/api/v1/mobile/studios/{accountSlug}

post Mobile auth

Authenticates a studio owner or staff member and returns one mobile session token per accessible studio account.

/api/v1/mobile/auth/staff/login

post Mobile auth

Authenticates or creates a studio customer with email and password, then returns a mobile customer session.

/api/v1/mobile/auth/customer/email-login

post Mobile auth

Sends an OTP challenge for customer phone login when the studio customer auth settings allow OTP.

/api/v1/mobile/auth/customer/otp/send

post Mobile auth

Verifies a customer OTP challenge and returns a mobile customer session.

/api/v1/mobile/auth/customer/otp/verify

get Mobile auth

Starts Google OAuth for a customer and redirects to Google.

/api/v1/mobile/auth/customer/google/{accountSlug}/redirect

get Mobile auth

Receives the Google OAuth callback and redirects to the mobile return URL with a one-time exchange code.

/api/v1/mobile/auth/customer/google/callback

post Mobile auth

Exchanges a one-time Google mobile login code for a customer mobile session.

/api/v1/mobile/auth/customer/google/exchange

get Mobile auth

Returns the current mobile session profile, account, actor, and permissions.

/api/v1/mobile/me

post Mobile auth

Revokes the current mobile session token.

/api/v1/mobile/logout

post Mobile auth

Registers or updates a mobile push notification token for the current mobile session.

/api/v1/mobile/device-tokens

get Mobile schedule

Returns account-scoped scheduled classes for the mobile actor. Customer sessions see public group classes only; trainer sessions are narrowed to the linked trainer.

/api/v1/mobile/schedule

get Mobile schedule

Returns one account-scoped scheduled class for the mobile actor.

/api/v1/mobile/classes/{scheduledClass}

post Mobile bookings

Books the current customer into a public group class.

/api/v1/mobile/classes/{scheduledClass}/customer-booking

post Mobile bookings

Creates or reactivates a booking for a selected customer. Requires the manage_bookings studio permission.

/api/v1/mobile/classes/{scheduledClass}/staff-bookings

patch Mobile bookings

Updates booking status from a staff session. Setting cancelled before the cutoff releases the class-pass session and keeps the booking in history.

/api/v1/mobile/bookings/{classBooking}

delete Mobile bookings

Cancels a booking before the cutoff and releases the class-pass session while keeping the booking in history. Staff need manage_bookings.

/api/v1/mobile/bookings/{classBooking}

get Mobile customer

Returns the current customer booking history for the session account.

/api/v1/mobile/customer/bookings

get Mobile customer

Returns the current customer class passes for the session account.

/api/v1/mobile/customer/passes

put Mobile customer

Updates the current customer profile for the session account. If the phone belongs to another customer in this studio, returns a validation response with code phone_verification_required.

/api/v1/mobile/customer/profile

post Mobile customer

Sends an OTP challenge to confirm a duplicate profile phone before merging customer identities.

/api/v1/mobile/customer/profile/phone/send

post Mobile customer

Resends an OTP challenge for the pending duplicate profile phone confirmation.

/api/v1/mobile/customer/profile/phone/resend

post Mobile customer

Verifies a duplicate profile phone OTP, merges the temporary email or Google identity into the existing phone customer, and returns the refreshed customer session.

/api/v1/mobile/customer/profile/phone/verify

get Mobile customer

Searches account customers for staff booking flows. Requires manage_bookings or manage_clients.

/api/v1/mobile/staff/customers

post Website leads

Creates a website lead for the studio identified by the bearer token with the website_leads:create ability.

/api/v1/website-leads

post MCP

Calls Ladna studio MCP tools through JSON-RPC in the bearer token account scope.

/mcp/ladna-studio

Авторизація

Заявки з сайту та MCP використовують bearer token із розділу Загальні налаштування → API. Публічний розклад і ціни не потребують авторизації.

Authorization: Bearer ladna_your_token

Публічний розклад

GET /api/v1/public/{accountSlug}/{locationSlug}/schedule

PHP
$response = (new \GuzzleHttp\Client())->request('GET', 'https://ladna.app/api/v1/public/ladna-demo/demo-location/schedule', [
    'headers' => ['Accept' => 'application/json'],
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'GET',
    'https://ladna.app/api/v1/public/ladna-demo/demo-location/schedule',
    headers={'Accept': 'application/json'},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/api/v1/public/ladna-demo/demo-location/schedule', {
  method: 'GET',
  headers: { 'Accept': 'application/json' },
});

const data = await response.json();

Публічні ціни

GET /api/v1/public/{accountSlug}/{locationSlug}/price

PHP
$response = (new \GuzzleHttp\Client())->request('GET', 'https://ladna.app/api/v1/public/ladna-demo/demo-location/price', [
    'headers' => ['Accept' => 'application/json'],
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'GET',
    'https://ladna.app/api/v1/public/ladna-demo/demo-location/price',
    headers={'Accept': 'application/json'},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/api/v1/public/ladna-demo/demo-location/price', {
  method: 'GET',
  headers: { 'Accept': 'application/json' },
});

const data = await response.json();

Заявка з сайту

POST /api/v1/website-leads

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/api/v1/website-leads', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "phone": "+380671112233",
    "name": "Олена Коваль",
    "source_page": "https://studio.example.com/trial"
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/api/v1/website-leads',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "phone": "+380671112233",
    "name": "Олена Коваль",
    "source_page": "https://studio.example.com/trial"
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/api/v1/website-leads', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "phone": "+380671112233",
    "name": "Олена Коваль",
    "source_page": "https://studio.example.com/trial"
}),
});

const data = await response.json();

MCP записи на день

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-class-bookings-for-day",
        "arguments": {
            "date": "2026-06-30"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-class-bookings-for-day",
        "arguments": {
            "date": "2026-06-30"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-class-bookings-for-day",
        "arguments": {
            "date": "2026-06-30"
        }
    }
}),
});

const data = await response.json();

MCP пошук клієнта

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-customers",
        "arguments": {
            "query": "Тетяна",
            "limit": 5
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-customers",
        "arguments": {
            "query": "Тетяна",
            "limit": 5
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-customers",
        "arguments": {
            "query": "Тетяна",
            "limit": 5
        }
    }
}),
});

const data = await response.json();

MCP дослідити реєстр записів клієнта

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "investigate-customer-booking-ledger",
        "arguments": {
            "customer_id": 63,
            "from_date": "2026-07-01",
            "to_date": "2026-07-31",
            "as_of": "2026-07-28T20:05:00+03:00",
            "source": "manual"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "investigate-customer-booking-ledger",
        "arguments": {
            "customer_id": 63,
            "from_date": "2026-07-01",
            "to_date": "2026-07-31",
            "as_of": "2026-07-28T20:05:00+03:00",
            "source": "manual"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "investigate-customer-booking-ledger",
        "arguments": {
            "customer_id": 63,
            "from_date": "2026-07-01",
            "to_date": "2026-07-31",
            "as_of": "2026-07-28T20:05:00+03:00",
            "source": "manual"
        }
    }
}),
});

const data = await response.json();

MCP пошук у довідці власника

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-owner-help",
        "arguments": {
            "query": "як додати клієнта",
            "limit": 3
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-owner-help",
        "arguments": {
            "query": "як додати клієнта",
            "limit": 3
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-owner-help",
        "arguments": {
            "query": "як додати клієнта",
            "limit": 3
        }
    }
}),
});

const data = await response.json();

MCP вміння Ladna асистента

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "describe-ladna-skills",
        "arguments": {
            "channel": "dashboard_chat"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "describe-ladna-skills",
        "arguments": {
            "channel": "dashboard_chat"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "describe-ladna-skills",
        "arguments": {
            "channel": "dashboard_chat"
        }
    }
}),
});

const data = await response.json();

MCP огляд оплат студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payment-overview",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payment-overview",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payment-overview",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}),
});

const data = await response.json();

MCP пошук оплат студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-payments",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "query": "Коваль",
            "limit": 20
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-payments",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "query": "Коваль",
            "limit": 20
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search-payments",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "query": "Коваль",
            "limit": 20
        }
    }
}),
});

const data = await response.json();

MCP фінансовий звіт студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-financial-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "limit": 20
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-financial-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "limit": 20
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-financial-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31",
            "limit": 20
        }
    }
}),
});

const data = await response.json();

MCP огляд кас студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-cashbox-overview",
        "arguments": {
            "location_id": 12,
            "currency": "UAH"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-cashbox-overview",
        "arguments": {
            "location_id": 12,
            "currency": "UAH"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-cashbox-overview",
        "arguments": {
            "location_id": 12,
            "currency": "UAH"
        }
    }
}),
});

const data = await response.json();

MCP звіт по заробітку студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-earnings-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-earnings-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-earnings-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}),
});

const data = await response.json();

MCP звіт по орендах студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-rental-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-rental-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-rental-report",
        "arguments": {
            "date_from": "2026-07-01",
            "date_to": "2026-07-31"
        }
    }
}),
});

const data = await response.json();

MCP огляд зарплатних періодів

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payroll-overview",
        "arguments": {
            "limit": 20
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payroll-overview",
        "arguments": {
            "limit": 20
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-payroll-overview",
        "arguments": {
            "limit": 20
        }
    }
}),
});

const data = await response.json();

MCP огляд подій студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-events-overview",
        "arguments": {
            "status_bucket": "upcoming",
            "limit": 20
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-events-overview",
        "arguments": {
            "status_bucket": "upcoming",
            "limit": 20
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-events-overview",
        "arguments": {
            "status_bucket": "upcoming",
            "limit": 20
        }
    }
}),
});

const data = await response.json();

MCP підсумок події студії

POST /mcp/ladna-studio

PHP
$response = (new \GuzzleHttp\Client())->request('POST', 'https://ladna.app/mcp/ladna-studio', [
    'headers' => [
        'Authorization' => 'Bearer ladna_your_token',
        'Accept' => 'application/json',
    ],
    'json' => json_decode('{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-event-summary",
        "arguments": {
            "event_id": 42
        }
    }
}', true),
]);

$data = json_decode((string) $response->getBody(), true);
Python
import requests

response = requests.request(
    'POST',
    'https://ladna.app/mcp/ladna-studio',
    headers={
        'Authorization': 'Bearer ladna_your_token',
        'Accept': 'application/json',
    },
    json={
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-event-summary",
        "arguments": {
            "event_id": 42
        }
    }
},
)
response.raise_for_status()
data = response.json()
JS
const response = await fetch('https://ladna.app/mcp/ladna-studio', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ladna_your_token',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get-event-summary",
        "arguments": {
            "event_id": 42
        }
    }
}),
});

const data = await response.json();