Log a weigh-in
curl --request POST \
--url https://app.skcal.fit/api/weight \
--header 'Content-Type: application/json' \
--cookie __Secure-better-auth.session_token= \
--data '
{
"weightKg": 72.6,
"bodyFatPct": 17.4,
"note": "morning, fasted"
}
'import requests
url = "https://app.skcal.fit/api/weight"
payload = {
"weightKg": 72.6,
"bodyFatPct": 17.4,
"note": "morning, fasted"
}
headers = {
"cookie": "__Secure-better-auth.session_token=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: '__Secure-better-auth.session_token=',
'Content-Type': 'application/json'
},
body: JSON.stringify({weightKg: 72.6, bodyFatPct: 17.4, note: 'morning, fasted'})
};
fetch('https://app.skcal.fit/api/weight', 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/weight",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'weightKg' => 72.6,
'bodyFatPct' => 17.4,
'note' => 'morning, fasted'
]),
CURLOPT_COOKIE => "__Secure-better-auth.session_token=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.skcal.fit/api/weight"
payload := strings.NewReader("{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "__Secure-better-auth.session_token=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.skcal.fit/api/weight")
.header("cookie", "__Secure-better-auth.session_token=")
.header("Content-Type", "application/json")
.body("{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.skcal.fit/api/weight")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = '__Secure-better-auth.session_token='
request["Content-Type"] = 'application/json'
request.body = "{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true
}{
"error": "weightKg must be 9-320 kg",
"detail": "upstream model returned 500"
}Weight
Log a weigh-in
Records a manual body-weight reading for the caller.
POST
/
api
/
weight
Log a weigh-in
curl --request POST \
--url https://app.skcal.fit/api/weight \
--header 'Content-Type: application/json' \
--cookie __Secure-better-auth.session_token= \
--data '
{
"weightKg": 72.6,
"bodyFatPct": 17.4,
"note": "morning, fasted"
}
'import requests
url = "https://app.skcal.fit/api/weight"
payload = {
"weightKg": 72.6,
"bodyFatPct": 17.4,
"note": "morning, fasted"
}
headers = {
"cookie": "__Secure-better-auth.session_token=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: '__Secure-better-auth.session_token=',
'Content-Type': 'application/json'
},
body: JSON.stringify({weightKg: 72.6, bodyFatPct: 17.4, note: 'morning, fasted'})
};
fetch('https://app.skcal.fit/api/weight', 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/weight",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'weightKg' => 72.6,
'bodyFatPct' => 17.4,
'note' => 'morning, fasted'
]),
CURLOPT_COOKIE => "__Secure-better-auth.session_token=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.skcal.fit/api/weight"
payload := strings.NewReader("{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "__Secure-better-auth.session_token=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.skcal.fit/api/weight")
.header("cookie", "__Secure-better-auth.session_token=")
.header("Content-Type", "application/json")
.body("{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.skcal.fit/api/weight")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = '__Secure-better-auth.session_token='
request["Content-Type"] = 'application/json'
request.body = "{\n \"weightKg\": 72.6,\n \"bodyFatPct\": 17.4,\n \"note\": \"morning, fasted\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true
}{
"error": "weightKg must be 9-320 kg",
"detail": "upstream model returned 500"
}Authorizations
sessionCookiebearerApiKey
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.
Body
application/json
The weigh-in to record.
Body for logging a manual weigh-in.
Body weight to log, in kilograms.
Required range:
9 <= x <= 320Example:
72.6
Optional body-fat percentage for the weigh-in.
Required range:
1 <= x <= 80Example:
17.4
Optional note (truncated to 500 characters).
Maximum string length:
500Example:
"morning, fasted"
Response
The reading was stored.
Minimal success acknowledgement for write operations.
Always true.
Example:
true