# Manage your methods

> List your methods, switch the version your organization uses, change any method, and publish or delete your own.

Source: https://docs.fous.com/guides/methods
Index: https://docs.fous.com/llms.txt

## 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.

```bash
curl 'https://api.fous.com/v1/methods' \
  -H "Authorization: Bearer $FOUS_API_KEY"
```

```json
{
  "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@N` runs version N. A plain `slug` runs the version your organization uses.
- Your first run pins your organization to the version that ran. `slug@N` runs 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):

```bash
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}'
```

```json
{
  "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](https://docs.fous.com/guides/builds.md) with `method`, adding `@N` to start from that version. You can change any public method and your own.

```bash
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:

```json
{
  "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.

```bash
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"}'
```

```json
{
  "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`.

```bash
curl -X DELETE 'https://api.fous.com/v1/methods/example.com/list_orders' \
  -H "Authorization: Bearer $FOUS_API_KEY"
```

```json
{ "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.
