Endpoints

News and feedback

What changed, and a way to tell us what worked and what did not. Both free.

Two small endpoints for agents that use Forma over time: one to learn what is new, one to tell the people who build Forma what worked and what did not. Neither spends credits.

What's new

GEThttps://api.formalogic.io/v1/news

What is new for callers of this API and the MCP server.

Request

sincestring | nullquery—
limitstring | nullquery—
curl https://api.formalogic.io/v1/news?since=2026-09-28 \
  -H "Authorization: Bearer $FORMA_API_KEY"

Response 200

What changed, newest first.

itemsobject[]What changed, newest first
items[].datestringThe day it changed, YYYY-MM-DD
items[].titlestringOne line
items[].summarystringWhat it means for a caller
items[].kindenumfeature, fix or change
lateststring or nullThe date of the newest entry. Pass it back as since next time

Errors

401KEY_MISSINGKEY_UNKNOWNKEY_REVOKEDKEY_EXPIREDThe key is missing, unknown, revoked or expired — see Authentication
403ORG_DISABLEDThe key is fine and its organisation is not active — see Authentication
422VALIDATION_FAILEDA bad since or limit; context.parameter names it

Every code, and what to do about it, is on Errors.

The request is generated from the API's OpenAPI document; the response and errors are held to real responses and to the Errors page.

Returns the changes a caller can notice (endpoints, oracles, MCP tools), newest first, with latest, the date of the newest entry. Remember latest and pass it back as since to see only what arrived after it.

bash
curl -s https://api.formalogic.io/v1/news?since=2026-09-28 \
  -H "Authorization: Bearer $FORMA_API_KEY"
json
{
  "items": [
    { "date": "2026-09-29", "title": "News and feedback endpoints",
      "summary": "GET /v1/news lists what changed; …", "kind": "feature" }
  ],
  "latest": "2026-09-29"
}
Parameter
since YYYY-MM-DD. Entries on or after this date.
limit 1–50, default 20.

kind is feature, fix or change. The same entries are in the Changelog.

Send feedback

POSThttps://api.formalogic.io/v1/feedback

Tell us what worked and what did not. Free, and read by the people who build Forma.

Request

sentimentstringbody, required—

One of positive negative neutral

messagestringbody, required—

min length 1 · max length 2000

oraclestringbodyAn oracle name from GET /v1/oracles.
request_idstringbodyThe answer this is about, if any.

max length 100

curl -X POST https://api.formalogic.io/v1/feedback \
  -H "Authorization: Bearer $FORMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"sentiment":"negative","oracle":"chart","message":"The legend covers the last bar."}'

Response 201

The feedback was recorded.

idstringQuote it if you write to us about this feedback
receivedbooleanAlways true

Errors

401KEY_MISSINGKEY_UNKNOWNKEY_REVOKEDKEY_EXPIREDThe key is missing, unknown, revoked or expired — see Authentication
403ORG_DISABLEDThe key is fine and its organisation is not active — see Authentication
422VALIDATION_FAILEDThe body is not a JSON object, has an unknown field, or breaks a rule above; context.parameter names it
402QUOTA_EXCEEDEDThis key sent 100 in the last 24 hours (context.scope is feedback). Credits are unaffected

Every code, and what to do about it, is on Errors.

The request is generated from the API's OpenAPI document; the response and errors are held to real responses and to the Errors page.

Say what worked or what did not, in words. It is read by the people who build Forma and used to decide what to fix and build next.

bash
curl -s https://api.formalogic.io/v1/feedback \
  -H "Authorization: Bearer $FORMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"sentiment": "negative", "oracle": "vector-graphics",
       "message": "Labels on the triangle overlap the sides."}'
json
{ "id": "fb_01K…", "received": true }
Field
sentiment Required. positive, negative or neutral.
message Required. 1–2000 characters.
oracle Optional. A name from GET /v1/oracles.
request_id Optional. The answer this is about, up to 100 characters.

The organisation and key are the ones the request authenticated with; the body cannot name others, and any other field is refused. The message is never sent back by the API.

Each key may send 100 in any 24 hours. Past that the answer is 402 with QUOTA_EXCEEDED and context.scope of feedback. This cap is separate from credits: your balance is unaffected, and asks keep working.