API
Create an API token on your profile page and pass it as a bearer token.
Submit a substitution
curl -X POST https://pisot-conjecture.icarm.cloud/api/submit \
-H "Authorization: Bearer pis_..." \
-H "Content-Type: application/json" \
-d '{"substitution": ["01", "02", "0"]}'
substitution is an array of images (letter i maps to the i-th
string, letters written as digits 0…8), an object
{"a": "ab", "b": "a"}, or a string in the same format as the web form. The response
reports the canonical form, the invariants, the score, and what happened in the database:
{
"ok": true,
"canonical": { "rules": "0 → 01, 1 → 02, 2 → 0", "images": ["01", "02", "0"], "size": 3, "length": 5 },
"invariants": { "charPoly": "x^3 - x^2 - x - 1", "perron": 1.8392867552, "unit": true, ... },
"score": { "value": 0.9343, "num": 1735, "den": 1857, "n": 928, "N": 1000 },
"coincidence": { "n": 1, "checkedTo": 1 },
"outcome": { "status": "record", "substitutionId": 12, "size": 3, "score": 0.9343, "previousScore": 0.9512 }
}
outcome.status is record (best score for its alphabet size),
created (stored, not a record), duplicate (the canonical form is already
stored), or not_tracked (verified but not stored; two-letter alphabets).
An optional commentary string (at most 4,000 characters)
becomes the first comment on a newly stored substitution’s page — a good place to say how
it was found.
Rejected submissions return ok: false with the failing check (not primitive,
reducible characteristic polynomial, Perron root not Pisot, or the complexity could not be
certified within the word-length cap). Limits: 9 letters, total length
300, 6 submissions per minute.
Verify without storing
curl -X POST https://pisot-conjecture.icarm.cloud/api/verify \
-H "Content-Type: application/json" \
-d '{"substitution": "0 -> 011, 1 -> 100"}'
Runs the same checks and returns the same shape without outcome; no token
required, same rate limit per client.
Read the database
curl https://pisot-conjecture.icarm.cloud/database.json # every substitution (without profiles) curl https://pisot-conjecture.icarm.cloud/substitution/12.json # one substitution, with p(n), q(n) for n ≤ 1000