Shared Format 409 format_inactive: the owner's switch hits partners

format_inactive and format_api_trigger_disabled are set on the owner's API tab and apply to every caller, including workspaces the Format was shared with.

4 min readSume
All posts

If a shared Format suddenly answers 409 format_inactive or 409 format_api_trigger_disabled to a grantee, nothing is wrong with the grantee's key or grant. The owner workspace set the Format to Inactive, or turned off its API call trigger, on the Format page's API tab, and those settings apply to every caller, including workspaces the owner shared the Format with.

Which switch is which

The two codes come from two controls that sit next to each other on the owner's API tab. They are easy to mix up because both stop API runs, and both are owner-only. The grantee sees the 409 but cannot change either setting.

Owner-side switches and the 409 they return, from the Formats errors page (read 2026-10-05)
CodeOwner settingOwner fixGrantee can fix it?
format_inactiveStatus set to InactiveFormat page, API tab, Status ActiveNo
format_api_trigger_disabledAPI call trigger offFormat page, API tab, API call trigger OnNo

How to tell the grantee case from your own bug

A 409 with one of these two codes is not a retryable condition. The code is stable, so a client can branch on it. It is different from a 404 format_not_found, which says the grant is pending, revoked, or the Format was archived.

If you are the grantee, the fastest check is to send the same request with a tiny input. Same 409 means the owner's switch. If a tiny input succeeds and the real one fails, look at the failure code on that run instead.

import os, requests
r = requests.post(
    "https://api.sume.com/v1/formats/acme/product-promo/runs",
    headers={"Authorization": "Bearer " + os.environ["PARTNER_TEAM_KEY"]},
    json={"instruction": "ping"},
    timeout=30,
)
code = r.json().get("error", {}).get("code")
if r.status_code == 409 and code in ("format_inactive", "format_api_trigger_disabled"):
    print("owner paused this Format:", code)
else:
    print(r.status_code, code)

For owners: pause on purpose

Turning the trigger off is a clean way to freeze a Format while you edit it, because every grantee gets the same stable code. It is also a clean way to cause an outage for partners without meaning to. Tell grantees before you flip it, and flip it back after the edit.

Revoking a grant is the other lever, and it is narrower: it affects one workspace. Use the switch for everyone and the revoke for one.

What to put in a partner runbook

If you share Formats with several workspaces, write down three lines for your partners. The first says which codes mean the owner paused the Format and that waiting is the only fix. The second says which codes mean the key or grant is wrong, so they should contact you. The third says where to see a failed run's code.

Giving partners that table up front saves a support round trip, because the 409 reads like a bug on their side when it is a decision on yours.

Limits

This post is about API runs. The owner's switches are described for the API tab; the Formats errors page does not say they stop runs started from chat, so do not assume that.

Sources

Related posts

More in Formats

All Formats posts

Written by Sume