curl --request GET \
--url https://app.skcal.fit/api/dashboard \
--cookie __Secure-better-auth.session_token=import requests
url = "https://app.skcal.fit/api/dashboard"
headers = {"cookie": "__Secure-better-auth.session_token="}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {cookie: '__Secure-better-auth.session_token='}};
fetch('https://app.skcal.fit/api/dashboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.skcal.fit/api/dashboard",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "__Secure-better-auth.session_token=",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.skcal.fit/api/dashboard"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "__Secure-better-auth.session_token=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.skcal.fit/api/dashboard")
.header("cookie", "__Secure-better-auth.session_token=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.skcal.fit/api/dashboard")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = '__Secure-better-auth.session_token='
response = http.request(request)
puts response.read_body{
"weight": {
"latestKg": 72.6,
"weeklyAvgKg": 72.9,
"bodyFatPct": 17.4,
"note": "morning, fasted",
"trend": [
{
"ts": 1782000000000,
"kg": 72.6
}
]
},
"targets": {
"id": 1,
"goalWeightKg": 70,
"startWeightKg": 78.4,
"targetDate": 1790000000000,
"startDate": 1782000000000,
"dailyKcalTarget": 2100,
"proteinTargetG": 170
},
"measurementsLatest": [
{
"site": "waist",
"valueCm": 81.5,
"ts": 1782000000000
},
{
"site": "shoulders",
"valueCm": 122,
"ts": 1782000000000
}
],
"shoulderToWaist": 1.497,
"nutritionToday": {
"userEmail": "nick@mintlify.com",
"date": "2026-06-29",
"kcal": 2150,
"proteinG": 168,
"hitProtein": true,
"adherence": "on"
}
}Home-screen snapshot
Returns the weight summary, targets, latest measurements, shoulder-to-waist ratio, and the given day’s nutrition in one response.
curl --request GET \
--url https://app.skcal.fit/api/dashboard \
--cookie __Secure-better-auth.session_token=import requests
url = "https://app.skcal.fit/api/dashboard"
headers = {"cookie": "__Secure-better-auth.session_token="}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {cookie: '__Secure-better-auth.session_token='}};
fetch('https://app.skcal.fit/api/dashboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.skcal.fit/api/dashboard",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "__Secure-better-auth.session_token=",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.skcal.fit/api/dashboard"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "__Secure-better-auth.session_token=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.skcal.fit/api/dashboard")
.header("cookie", "__Secure-better-auth.session_token=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.skcal.fit/api/dashboard")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = '__Secure-better-auth.session_token='
response = http.request(request)
puts response.read_body{
"weight": {
"latestKg": 72.6,
"weeklyAvgKg": 72.9,
"bodyFatPct": 17.4,
"note": "morning, fasted",
"trend": [
{
"ts": 1782000000000,
"kg": 72.6
}
]
},
"targets": {
"id": 1,
"goalWeightKg": 70,
"startWeightKg": 78.4,
"targetDate": 1790000000000,
"startDate": 1782000000000,
"dailyKcalTarget": 2100,
"proteinTargetG": 170
},
"measurementsLatest": [
{
"site": "waist",
"valueCm": 81.5,
"ts": 1782000000000
},
{
"site": "shoulders",
"valueCm": 122,
"ts": 1782000000000
}
],
"shoulderToWaist": 1.497,
"nutritionToday": {
"userEmail": "nick@mintlify.com",
"date": "2026-06-29",
"kcal": 2150,
"proteinG": 168,
"hitProtein": true,
"adherence": "on"
}
}Authorizations
Better Auth session. Signing in (Google or email magic link) sets an HttpOnly session cookie that scopes every request to that account. The web app and CLI use this; agents use the OAuth 2.1 flow of the MCP server.
Query Parameters
Day to report nutrition for (YYYY-MM-DD). Defaults to the server's current UTC date.
Response
The dashboard snapshot.
Everything the home screen needs in a single response.
Latest-weight summary for the dashboard card.
Show child attributes
Show child attributes
{
"latestKg": 72.6,
"weeklyAvgKg": 72.9,
"bodyFatPct": 17.4,
"note": "morning, fasted",
"trend": [{ "ts": 1782000000000, "kg": 72.6 }]
}
The user's current goals shown on the dashboard.
Show child attributes
Show child attributes
{
"id": 1,
"goalWeightKg": 70,
"startWeightKg": 78.4,
"targetDate": 1790000000000,
"startDate": 1782000000000,
"dailyKcalTarget": 2100,
"proteinTargetG": 170
}
Latest value per measured site.
Show child attributes
Show child attributes
[
{
"site": "waist",
"valueCm": 81.5,
"ts": 1782000000000
},
{
"site": "shoulders",
"valueCm": 122,
"ts": 1782000000000
}
]
Shoulder-to-waist ratio (V-taper metric).
1.497
Today's nutrition totals, or null if nothing is logged.
Show child attributes
Show child attributes
{
"userEmail": "nick@mintlify.com",
"date": "2026-06-29",
"kcal": 2150,
"proteinG": 168,
"hitProtein": true,
"adherence": "on"
}