# Custom API

> Create, document, and publish a private REST API integration from an agent-facing CLI.

Source: https://docs.generalinput.com/cli/custom-api



`geni custom-api` exposes the same six authoring actions as the platform agent and MCP surfaces. Custom APIs support API-key authentication and public REST APIs. OAuth-only services require an integration request in the dashboard.

Load the shared authoring contract before using these commands:

```sh
geni skills load custom-api
```

## Create an approved draft [#create-an-approved-draft]

Show the user the exact title and description and wait for approval. Then create the private draft:

```sh
geni custom-api create \
  --title "Acme API" \
  --description "Reads Acme customer and invoice records" \
  --confirm
```

`--confirm` is required. Omit `--icon-url` to use the stock gray wrench icon.

## Authoring actions [#authoring-actions]

```sh
geni custom-api list [--json]
geni custom-api get <id>
geni custom-api update <id> --file ./definition.json
geni custom-api upsert-operation <id> --file ./operation.json
geni custom-api delete-operation <id> <operationId> --confirm
geni custom-api set-status <id> <draft|live> [--confirm]
```

`update` patches only the supplied definition fields: `title`, `description`, `iconUrl`, `credentialType`, `secretFields`, `commonDocs`, and `setupGuide`. `upsert-operation` creates an operation when `operationId` is absent and patches one when it is present. Both accept `--json '<object>'` for short payloads or `--file <path>` for documentation-heavy JSON.

Publishing requires `--confirm`, complete auth and documentation, and at least one operation. The server returns the exact missing sections without changing the draft when publication is blocked.
