Set up your agent
1
Create an API key
Create a key under Billing & API Keys,
then make it available to your coding agent as an environment variable.Never paste the key into a prompt, source file, URL, or commit.
2
Open agent setup
Open API Studio and select
Set up an agent beside the manual API description form.
- Copy prompt copies the current, server-provided integration prompt (select Show prompt to read it before copying). Paste it into any agent chat; it works without installing anything.
- Copy & open ChatGPT or Copy & open Claude copies the prompt and opens a new chat.
- Use it in Claude Code, Cursor or Codex shows, per tool, the one-line
install (
npx skills add …or the Claude Code plugin commands) and how to invoke the skill. - Documentation your agent can read links the LLM documentation index, the full-documentation bundle, this guide, and the OpenAPI contract.
CRITIQUE_API_KEY and make HTTPS
requests in order to create or run one.3
Give the agent your requirement
Describe the reusable behavior, required inputs, exact output fields,
freshness requirements, and preferred sources. For example:
Create a private API that accepts a company name and returns its latest funding round, amount, date, investors, and primary-source URLs. Then show me how to call it from this project.
Use the skill without a CLI
The skill works through ordinary authenticated HTTPS requests. It can usecurl, JavaScript fetch, an IDE HTTP tool, or the existing HTTP client in any
project language. Python and the Critique CLI are not required.
The agent reads the lifecycle contract from the skill, sends
X-API-Key: $CRITIQUE_API_KEY, and uses the integration object returned by
the server as the source of truth for running the new endpoint.
Install the CLI (optional)
The optional, open-source CLI package iscritique-api-cli and has no third-party
runtime dependencies. Its source is available on
GitHub.
CRITIQUE_API_KEY:
Install the skill
The skill lives in the publicparthh01/critique-api-cli
repository. Install it into Claude Code, Cursor, Codex or any other agent
supported by skills.sh with one command (it writes the
skill into each tool’s own skills directory; add -g to install for all
projects instead of the current one):
Each tool also applies the skill automatically when a task matches its
description. Make sure
CRITIQUE_API_KEY is exported in the shell the agent
runs in.
The integration prompt, these per-tool commands (clients), and the resource
URLs are also available without authentication for automated discovery; the raw
skill files remain downloadable as a zip for agents that fetch them directly:
Documentation for agents
This documentation is written to be read by LLMs as well as people:llms.txtis the index of every page. Agents should fetch it first when they need something a prompt does not cover.- Every page is available as Markdown: append
.mdto a page URL that does not already end in.md(this page ishttps://docs.critique-labs.ai/api-platform/agent-created-apis.md). llms-full.txtbundles every page into one file, each prefixed with aSource:line, for a single fetch.openapi.jsonis the machine-readable contract for every endpoint.
Endpoint lifecycle
All management and runtime requests use theX-API-Key header. These examples
assume CRITIQUE_API_KEY is set in the environment.
Create
The only required create field isoriginal_prompt.
response. Treat response.integration as the
authoritative handoff: it contains the final callable URL, authentication
contract, request and response JSON Schemas, an example request, runnable code,
and a short agent handoff.
Do not construct the runtime URL from the stub when an
integration.url is
available. The server-returned integration object is the source of truth.Inspect and modify
string, number, and
boolean. Output formats support nested objects and one-item array schemas in
addition to string, number, boolean, and integer values.
Optional inputs and defaults
Each input carriesrequired (default true) and default (default null).
Inputs created before these keys existed are required with no default, and
nothing about them changed.
- A non-null
defaultmust match the input’stypeand makes the input optional whateverrequiredsays. - Callers may omit any optional input (sending
nullcounts as omitting it). The endpoint fills in the default, or, when the default isnull, tells the agent the value was not provided. - A missing required input responds
400; the message lists only the missing required fields, with optional ones shown asname?: type. integration.request_schemamarks only required inputs as required and carries each default;integration.example_requestand the code samples include every required input plus every optional input that has a default.
max_results is a reserved input name. An endpoint whose output contains a
list is created with an optional max_results (type number, default 10);
the runtime asks the agent for at most that many items and caps every top-level
list field of the response at that value (nested lists are left to the agent).
The value must be a number of at least 1 and is floored to an integer.
Versions
Every endpoint version is its own resource with its ownid; all versions share
the endpoint’s stub. A version is a draft while frozen_at is null
(editable; at most one per endpoint) and released once frozen_at is set
(immutable; edits respond 409). The live version is what the unversioned
URL /v1/user-defined-service/{stub} runs: the released version with the
highest number, or the only draft when nothing has ever been released, which is
the normal state of a freshly created endpoint. Every response carries
version, frozen_at, is_live, live_version and a versions list for the
whole lineage.
409: release or delete that draft
first. Publishing a version to the marketplace also releases it. Creating a
version from an older released one is how you revert; the copy becomes live
once you release it.
Always call integration.url. For the live version it is the unversioned URL;
for a draft that is not live, and for an older release, it is the pinned URL
/v1/user-defined-service/{stub}/v{n}, the only URL that runs that version.
integration.versioned_url is always the pinned URL. A pinned version that does
not exist responds 404.
Run
POST a body matchingintegration.request_schema to integration.url:
context when displaying or storing researched output so its source
URLs remain available to users.
Delete
Deletion is permanent. Confirm the endpoint ID before calling:Optional domain controls
Runtime bodies may includeinclude_domains or exclude_domains as an array of
domain strings. They are mutually exclusive.
Error handling
400or422: correct the request or schema; do not retry unchanged.401: verify thatCRITIQUE_API_KEYis available without printing it.404: list endpoints and confirm that the ID belongs to the current key. On a/v{n}invocation, confirm the version exists withGET /v1/design-api/{id}/versions.409: the version is released (immutable) or the endpoint already has an unreleased draft. Create or release a version instead of retrying.429: respect the rate limit before retrying.504: the research request exceeded the service deadline.

