Recipes
A fact about somebody else’s API, in JSON, with a schema and tests.
A recipe says which hosts a service answers on, how its credential is presented, and what class each path gets. It is data, in a public repository, so a wrong class is a data fix rather than a release.
What one looks like
{
"key": "demo",
"vendor": "Sallyport",
"hosts": ["demo.sallyport.cloud"],
"adapter": "api-key",
"placement": { "kind": "header", "header_name": "X-Demo-Token" },
"class_rules": [
{ "match": { "methods": ["GET", "HEAD"] }, "class": "read" },
{ "match": { "methods": ["POST"], "path_regex": "^/echo$" }, "class": "write" }
]
}A credential is an object
Datadog needs an API key and an application key. AWS needs an id and a secret. Twilio needs a SID and a token. Modelling a credential as one string is what forces people into pasting two of them separated by a colon.
Paths that hand out secrets
Some endpoints return credentials of their own. Those are marked in the recipe, take the destructive class, and are refused by default. Your console lists every one of them in your own catalogue. The answer to "what could my agent get out of this API" is a screen rather than an audit.
Bring your own: a host with no recipe still works. It gets a conservative default and an access request with a link, and you can write the recipe afterwards.