Your methods
GET /v1/methods lists your organization's own methods. platform filters by site; ids (up to 50) fetches any methods you can see.
curl 'https://api.fous.com/v1/methods' \ -H "Authorization: Bearer $FOUS_API_KEY"{ "methods": [ { "id": "mth_01m5kz9a1b2c3d4e5f6g7h8j9k", "slug": "crates.io/search_crates" , "name": "Search crates", "description": "Searches crates.io by keyword.", "returns": "name, description, downloads, version", "platform": { "name": "crates.io", "domain": "crates.io" }, "input_schema": { "type": "object", "required": ["query"], "properties": { "query": { "type": "string", "description": "Keyword." } } }, "effect": "read", "auth": { "required": false }, "cost": { "credits": 1 }, "version": 1, "latest_version": 1, "private": true, "status": "ready", "pinned_version": 1, "visibility": "private", "owned": true, "stats": { "success_rate": 1, "runs": 4, "last_success_at": "2026-10-23T09:02:11.000Z" }, "created_at": "2026-10-23T08:41:12.000Z", "updated_at": "2026-10-23T08:41:12.000Z" } ]}Versions
A version is a fixed contract: inputs, outputs, effect and sign-in. Repairs change how it gets the data and raise revision; a contract change makes a new version.
slug@Nruns version N. A plainslugruns the version your organization uses.- Your first run pins your organization to the version that ran.
slug@Nruns and queries never move the pin. - A new version from your own build moves your pin to it, unless you had moved the pin off the starting version.
To switch, send pinned_version (a key with tools:write, or an owner or administrator in Studio):
curl -X PATCH 'https://api.fous.com/v1/methods/date.nager.at/list_public_holidays' \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"pinned_version": 1}'{ "id": "mth_01m5kvvywdeac8fxs7nh0sw68w", "slug": "date.nager.at/list_public_holidays" , "name": "List public holidays", "description": "Lists a country's public holidays for a year from Nager.Date, with local names, regional coverage and holiday types.", "returns": "date, weekday, English and local names, regions, type, nationwide flag", "platform": { "name": "Nager.Date", "domain": "nager.at" }, "input_schema": { "type": "object", "required": ["country"], "properties": { "year": { "type": "integer", "minimum": 1, "maximum": 9999, "description": "Calendar year, for example 2026. Defaults to the current year." }, "country": { "type": "string", "description": "Country name or two-letter country code, for example Germany or DE." } } }, "effect": "read", "auth": { "required": false }, "cost": { "credits": 1 }, "version": 1, "latest_version": 2, "revision": 2, "pinned_version": 1, "status": "ready", "versions": [ { "version": 2, "revision": 1, "latest": true, "status": "ready", "created_at": "2026-10-22T16:02:41.000Z", "changes": "Adds output holidays[].regions." }, { "version": 1, "revision": 2, "status": "ready", "created_at": "2026-10-21T09:12:05.000Z", "revised_at": "2026-10-24T03:10:19.000Z", "changes": "", "pinned": true } ], "visibility": "public", "output_schema": { "type": "object", "properties": { "country_name": { "type": "string" }, "year": { "type": "integer" }, "holidays": { "type": "array", "items": { "type": "object" } } } }, "example": { "input": { "country": "Germany", "year": 2027 }, "output": { "country_name": "Germany", "year": 2027, "holidays": [ { "date": "2027-01-01", "weekday": "Friday", "english_name": "New Year's Day", "local_name": "Neujahr", "nationwide": "yes", "regions": [], "type": "Public" } ] } }, "stats": { "success_rate": 1, "runs": 12, "last_success_at": "2026-10-23T08:24:36.410Z" }, "owned": false, "latest_changes": "Adds output holidays[].regions."}latest_changes says what the latest version adds while you are behind.
Change a method
Send a build with method, adding @N to start from that version. You can change any public method and your own.
curl https://api.fous.com/v1/builds \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "method": "crates.io/search_crates", "query": "Also return the license of each crate." }'When it ends, based_on names the starting version and outcome says what it made:
{ "id": "bld_01m5n2c4e6g8j0k2m4p6r8t0v2", "status": "ready", "kind": "change", "effect": "read", "query": "Also return the license of each crate.", "asked": "Also return the license of each crate.", "platform": "crates.io", "events": [ { "at": "2026-10-24T10:02:19.000Z", "kind": "note", "message": "Each crate in the search results carries its license." }, { "at": "2026-10-24T10:02:51.000Z", "kind": "status", "message": "Testing the method with two keywords." } ], "reason": "Version 2 adds output crates[].license. Your organization now uses it.", "outcome": { "type": "new_version", "version": 2 }, "based_on": { "id": "mth_01m5kz9a1b2c3d4e5f6g7h8j9k", "slug": "crates.io/search_crates" , "name": "Search crates", "version": 1 }, "method": { "id": "mth_01m5kz9a1b2c3d4e5f6g7h8j9k", "slug": "crates.io/search_crates" , "name": "Search crates", "description": "Searches crates.io by keyword.", "returns": "name, description, downloads, version, license", "platform": { "name": "crates.io", "domain": "crates.io" }, "input_schema": { "type": "object", "required": ["query"], "properties": { "query": { "type": "string", "description": "Keyword." } } }, "effect": "read", "auth": { "required": false }, "cost": { "credits": 1 }, "version": 2, "latest_version": 2, "private": true }, "created_at": "2026-10-24T10:01:58.000Z", "completed_at": "2026-10-24T10:03:07.000Z"}outcome.type | What happened |
|---|---|
improved | Same contract, improved in place for everyone on it. |
new_version | Inputs or fields changed. You move to it if you were on the starting version. |
new_method | A new method of yours, for a different capability, a private copy, or a method that signs in or acts. |
already_done | The method already does it. |
Publish
Built methods are public unless built private. A new method made from one of your private methods is private unless built public. Publishing a private method is final: anyone can then find, run and change it.
curl -X PATCH 'https://api.fous.com/v1/methods/crates.io/search_crates' \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"visibility": "public"}'{ "id": "mth_01m5kz9a1b2c3d4e5f6g7h8j9k", "slug": "crates.io/search_crates" , "name": "Search crates", "description": "Searches crates.io by keyword.", "returns": "name, description, downloads, version", "platform": { "name": "crates.io", "domain": "crates.io" }, "input_schema": { "type": "object", "required": ["query"], "properties": { "query": { "type": "string", "description": "Keyword." } } }, "effect": "read", "auth": { "required": false }, "cost": { "credits": 1 }, "version": 1, "latest_version": 1, "revision": 1, "pinned_version": 1, "status": "ready", "versions": [ { "version": 1, "revision": 1, "latest": true, "pinned": true, "status": "ready", "created_at": "2026-10-23T08:41:12.000Z", "changes": "" } ], "visibility": "public", "output_schema": { "type": "object", "properties": { "crates": { "type": "array", "items": { "type": "object" } } } }, "example": { "input": { "query": "http client" }, "output": { "crates": [ { "name": "reqwest", "description": "higher level HTTP client library", "downloads": 312004518, "version": "0.12.9" } ] } }, "stats": { "success_rate": 1, "runs": 4, "last_success_at": "2026-10-23T09:02:11.000Z" }, "owned": true}409 means the method is not yours, or another public method has its slug.
Delete
Deletes a private method of yours. A public method answers 409.
curl -X DELETE 'https://api.fous.com/v1/methods/example.com/list_orders' \ -H "Authorization: Bearer $FOUS_API_KEY"{ "id": "mth_01m5p8r2t4v6x8z0b2d4f6h8k0", "deleted": true }Idle methods
A public method nobody ran for 6 months is deleted after a 7-day notice: deletes_at appears, and its owner and pinned organizations get an email. A run during the notice keeps it. Private methods are never deleted for being idle.