Pages and API routes
A Tessryx site is a set of web addresses. A visitor opens a page; the page's own scripts call routes to load more posts or save a sign-up. Every address is an endpoint backed by a workflow.
Pages and routes are capped at 100 on Free, 200 on Pro and 1,000 on Agency.
Your AI creates the endpoint, and publishing it puts it live on your workspace's tessryx.app address or your own domain. A single endpoint can stand in for thousands of pages by reading part of the address, like the post name in /post/opening-night.
Try it
Addresses and the workflows behind them
Acme Field Notes
Notes from building a site on Tessryx.
- Oct 9, 2026
- Oct 2, 2026
200 OK
content-type: text/html; charset=utf-8
cache-control: public, max-age=30, s-maxage=300, stale-while-revalidate=3600
Endpoints
An exact slug, so it wins before any pattern is tried.
Body (GET)
A GET has no body.
$input
blog/home@publishedNo input: this endpoint's input_mode is none.
How it works
- 01
An address and the logic behind it
An endpoint names its workflow and says where the workflow's input comes from: nowhere, a fixed value, or parts of the request.
- 02
Routes take JSON
Add POST to an endpoint and a page can send it a form as JSON, which the workflow gets as the request body. A classic form post that isn't JSON won't be read.
- 03
Try it before it's live
A preview runs a draft with your real data. Publishing makes it the version visitors get, and an older version can be published again to go back.
Under the hood
The technical details
- endpoint
- Binds a slug to a workflow, by version (@published, or @latest to serve a draft on purpose). Each uncached request runs the workflow.
- methods
- GET, and POST to accept a JSON body. Anything else gets a 405.
- input_mode
- none, static (a fixed input on every request) or transform (built from the request with JSONata).
- address
- https://<workspace>.tessryx.app/<slug>, or your own domain.
{
"workflow": "blog/post@published",
"methods": ["GET"],
"input_mode": "transform",
"input_transform": "{ \"slug\": params.slug, \"root\": route.root }",
"cache": { "s_maxage_seconds": 300, "stale_while_revalidate_seconds": 3600 }
}Related features
Dynamic routes with URL parameters
One page design can serve every post in a blog by reading the post's name from the address. An address that matches nothing gets an ordinary "page not found."
Edge caching
A page can be kept at the network edge for as long as you choose. Repeat visits load at once and run nothing, and the cache time is also the longest an edit can take to show.
Form submissions and JSON posts
Forms and buttons on your pages can send things in, like a sign-up or a vote, and a workflow saves it or passes it along. Submissions are always handled fresh.
Pages built from your content
A page can be put together on the server from a record your team edits, and visitors and search engines receive finished HTML. It can read the published version or your working draft.