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:
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
| Trigger | Behavior |
|---|---|
| Manual: the ✨ button | Always 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 create | Fires 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. |
“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.
| Situation | What happens |
|---|---|
| Automatic run, budget reached | The 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 reached | The generate call fails with 402 ai_budget_reached. |
| Budget set, model has no known price | The 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. |
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.