Deliverd Actions API
The Actions API from Deliverd — 1 operation(s) for actions.
The Actions API from Deliverd — 1 operation(s) for actions.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/deliverd-dev:deliverd-dev-actions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Deliverd Dev Actions API
version: 1.0.0
x-refined-note:
- x-source differs across the merged source definitions and was not carried
description: 'Operations tagged Actions across 2 of this provider''s published API definitions: deliverd-dev-openapi.json, deliverd-dev-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://deliverd.dev
description: 'Deliverd REST API (paths carry the /api/v1 prefix; https://deliverd.dev/llms.txt: "REST API: https://deliverd.dev/api/v1")'
tags:
- name: Actions
paths:
/api/v1/actions:
post:
summary: 'Register an action: something consequential software may do'
description: 'Actions are stable organisational vocabulary and tools are implementation details — several agents calling three differently named functions may all be performing finance.refund, and policy is written about the business action rather than the function name. Upsert, not create: this runs on every deploy, so registering the same id again is the normal case. It overwrites only the half the code owns; an administrator''s title, risk and sensitivity overrides survive it, and no administrator can edit the input schema, because a schema they could loosen is a check the code no longer performs. An agent principal is refused: policy is keyed on the action id, so an agent able to name actions could name its way around the rule that governs it.'
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
properties:
actionId:
type: string
maxLength: 120
pattern: ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$
description: 'Dotted, lowercase, stable: `finance.refund`. Policy is written against this name'
name:
type: string
minLength: 1
maxLength: 120
description: What this does, as an approver will read it in a list
description:
type: string
maxLength: 4000
description: What it means and when it is used, for whoever writes the policy
inputSchema:
type: object
additionalProperties: {}
description: 'A JSON Schema object over the action''s named arguments. A small subset: type/properties/required, fields of string, number, integer or boolean, with enum, minimum, maximum, minLength, maxLength and pattern. Anything else is refused rather than ignored'
editableFields:
type: array
items:
type: string
maxLength: 120
description: Fields an approver may correct before approving. Omit for approve-or-reject only
displayTitle:
type: string
maxLength: 200
description: 'The approval headline, templated over the input: `Refund {{amount}} {{currency}}`'
riskCategory:
type: string
enum:
- financial
- data
- communication
- infrastructure
- identity
- other
description: What kind of harm this risks
defaultRisk:
type: string
enum:
- low
- medium
- high
- critical
description: The urgency an approval inherits when the caller declares none
required:
- actionId
- name
- inputSchema
responses:
'201':
description: The action as registered
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
actionId:
type: string
name:
type: string
description:
type:
- string
- 'null'
inputSchema:
type: object
additionalProperties: {}
editableFields:
type: array
items:
type: string
displayTitle:
type:
- string
- 'null'
riskCategory:
type: string
enum:
- financial
- data
- communication
- infrastructure
- identity
- other
defaultRisk:
type: string
enum:
- low
- medium
- high
- critical
source:
type: string
enum:
- code
- admin
createdAt:
type: string
required:
- id
- actionId
- name
- description
- inputSchema
- editableFields
- displayTitle
- riskCategory
- defaultRisk
- source
- createdAt
tags:
- Actions
operationId: postApiV1Actions
x-operation-id-source: derived
get:
summary: What this organisation has registered
security:
- bearerAuth: []
parameters:
- schema:
type: integer
minimum: 1
maximum: 200
description: Rows per page. Above the maximum you get the maximum, not an error.
required: false
description: Rows per page. Above the maximum you get the maximum, not an error.
name: limit
in: query
- schema:
type: string
description: nextCursor from a previous response. One we did not issue is refused.
required: false
description: nextCursor from a previous response. One we did not issue is refused.
name: cursor
in: query
responses:
'200':
description: Newest first. Titles and risk reflect any administrator override; sensitivity labels are not returned, because telling the caller which values are confidential tells it which are worth taking.
content:
application/json:
schema:
type: object
properties:
actions:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
actionId:
type: string
name:
type: string
description:
type:
- string
- 'null'
inputSchema:
type: object
additionalProperties: {}
editableFields:
type: array
items:
type: string
displayTitle:
type:
- string
- 'null'
riskCategory:
type: string
enum:
- financial
- data
- communication
- infrastructure
- identity
- other
defaultRisk:
type: string
enum:
- low
- medium
- high
- critical
source:
type: string
enum:
- code
- admin
createdAt:
type: string
required:
- id
- actionId
- name
- description
- inputSchema
- editableFields
- displayTitle
- riskCategory
- defaultRisk
- source
- createdAt
nextCursor:
type:
- string
- 'null'
description: Pass back as ?cursor= for the next page. Null means this is the end.
required:
- actions
- nextCursor
tags:
- Actions
operationId: getApiV1Actions
x-operation-id-source: derived
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'API key (dlv_…) created in Settings → API tokens, or an OAuth access token (dlvo_…). Every route below can answer `401 auth_error` — the credential was not accepted — or `403 insufficient_scope`, which is a different thing: the credential is fine and was not issued with the scope this route needs. Reissue it with that scope rather than replacing it with another of the same ones. Older clients may still branch on `auth_error` for both.'
x-refined-from:
- deliverd-dev-openapi.json
- deliverd-dev-openapi.yml