v1 API

Platform features

AI-populated fields

Write a prompt once, point it at the fields it should read, and pick the field the answer lands in: an SEO description generated from a post's title and body, filled in the moment the draft is created.

Bring your own key

Sedgemark makes the call; your own provider bills you, directly, at your own rates. Add an Anthropic or OpenAI API key under Settings → AI (one key per provider, encrypted at rest), and it never leaves the server again: it is readable only by the code path that actually calls the provider and by the credential-test button, which verifies it and never returns it. There is no endpoint, dashboard screen, or MCP tool that can read a saved key back.

Automations

On a collection, attach an automation to a field: a prompt template, a model, and when it should run. A template names its source fields with {{field_slug}} placeholders: there is no separate field picker to keep in sync, the template is the source-field list:

text
Write a one-sentence SEO description for a blog post.

Title: {{title}}
Body: {{body}}

Rejected when you save it: a placeholder naming an unknown field, a field referencing itself, a media or relation source (an id tells the model nothing useful), and a template with no placeholders at all: that is a default value, not an automation.

What a field automation can fill

text, rich_text, enum, integer, decimal and boolean. Not media or relation (a model cannot invent a valid foreign key), not json, and not a repeater: splitting an answer into an ordered list is a guess dressed as a feature, not something v1 does.

Two ways to run it

TriggerBehavior
Manual: the ✨ buttonAlways produces a value: it returns the generated text into the entry editor’s form rather than writing it directly, so you review it before saving. Overwriting an existing value is deliberate and undoable, just don’t save.
Automatic: run on createFires when a new entry is created, and fills only fields that are currently empty. A field that already has a value (seeded some other way) is left untouched.
A boolean field can never auto-fill

“Empty” has one definition across the product, and a boolean is never considered empty by it: false is a value. An automatic run against a boolean target would find the field already “filled” on every single run and never fire, so creating one that way is refused up front rather than shipped silently broken.

Exact tokens, estimated dollars

Every run reports token counts straight from the provider’s own response: those numbers reconcile against your provider dashboard exactly. Dollar figures are a different kind of fact: Sedgemark is not party to your billing relationship, so any cost shown is an estimate, labelled as one, from a rate table you can override per model in Settings → AI.

An unpriced model shows an em dash for cost, never $0.00: “free” is the one answer that would definitely be wrong, and it would make real spend invisible wherever a total is summed.

An optional monthly budget

Set a monthly cap per provider credential in Settings → AI, or leave it unset for no ceiling. It is checked before every call, never after, so the guarantee is “no new run starts while over budget” rather than a hard total: two runs that both start just under the cap can both complete.

SituationWhat happens
Automatic run, budget reachedThe run is skipped and recorded as such. The entry save itself is untouched: a save must never look broken because of a budget nobody is watching in the moment.
Manual ✨, budget reachedThe generate call fails with 402 ai_budget_reached.
Budget set, model has no known priceThe run refuses with 400 ai_rate_unknown rather than running un-metered: an unpriced run is invisible to the cap, so proceeding would silently defeat the budget you set.
ai_budget_reached is not a plan limit

It is resolved by raising or removing your own number in Settings → AI, never by upgrading a Sedgemark plan. Full code list: Errors & rate limits → AI-field codes.

Who can do what

The provider key, its budget, and per-model rate overrides are all owner-only, the same line webhooks and billing sit behind. Configuring an automation on a field needs collections:write; running one, manually or by creating an entry, needs only entries:write. Anyone holding that grant can spend the owner’s provider budget, bounded by the budget itself, a per-workspace concurrency cap, and the credential’s own active/inactive switch.

Turning it off

AI fields are on by default and can be switched off for a workspace as an operator kill switch on outbound calls, not a paid gate, since you supply and pay for your own key. With the flag off, existing automations stop firing and the ✨ affordance disappears; a call that still reaches an AI route answers 403 ai_fields_disabled.