---
title: "Update a draft agent's config (partial)"
method: PATCH
path: "/business/agents/{agentId}"
tags: ["Agents"]
---

# Update a draft agent's config (partial)

`PATCH /business/agents/{agentId}`

## Request

- Base URL: `https://api.tryfuse.ai/api/v1`
- URL: `https://api.tryfuse.ai/api/v1/business/agents/{agentId}`
- Auth: HTTP basic

Partial update of a DRAFT agent's config. Send one or more of the agent type's own config fields — the same fields as its POST /business/agents/{type} body, without `start`. Keys are merged over the saved config: omitted fields keep their value, an array replaces the stored array, and unknown keys are dropped. Sending `listName` renames both the agent and the results list it will create. The merged config is re-validated against the type's schema, so a partial edit can still be rejected (422 VALIDATION_FAILED). Only drafts (`status: initializing`) are editable — a started, paused, expired or failed agent answers 409 AGENT_NOT_A_DRAFT, so duplicate it and edit the copy. Nothing is billed. The answer is the saved agent, in the same shape as GET /business/agents/{agentId}.

Errors:
- `404` `AGENT_NOT_FOUND` — No agent with this id belongs to the token owner. A deleted agent and another user's agent answer identically.
- `409` `AGENT_NOT_A_DRAFT` — The agent is not a draft (status is not `initializing`): it was already started, or is paused, expired or failed. Only drafts are editable and activatable — duplicate the agent and work on the copy.
- `409` `AGENT_CONFIG_MISSING` — The draft carries no stored config to work from (a legacy draft saved before configs were persisted). Create the agent again.
- `409` `AGENT_TYPE_UNSUPPORTED` — The agent is of a legacy kind this API can no longer edit or activate; its `type` reads as null.
- `422` `VALIDATION_FAILED` — The update was rejected by validation. Either this endpoint's own request validation (a malformed `agentId`, an empty body), where `param` names the offending field; or the merged config failed the agent type's own schema, which the agents service reports without per-field detail, so `param` is null and `message` is the generic one. Re-check the fields you sent against that type's create body.
- `429` `RATE_LIMITED` — The agents bucket is exhausted: 30 requests per minute or 2,000 per day per token owner, shared by every /business/agents operation (a 429 raised by the agents service is relayed with this code too). Retry after the `Retry-After` header.
- `500` `UNEXPECTED_ERROR` — The agents service failed (5xx, refused service credential, or a timeout after 60s) or the rate limiter was unavailable. Retry later; quote `request_id` to support.

Requires one of the following token scopes: agents.

## Path parameters

- `agentId` string, required: The agent's id: a 24-character hex string — the `id` of an item from GET /business/agents, or the `agent.id` a create or duplicate returned.

## Request body

- object: One or more of the agent type's own config fields (the same fields as its POST /business/agents/{type} body, without `start`). Keys are merged over the draft's saved config: omitted fields keep their value, arrays replace the stored array. Only drafts (status "initializing") are editable (409 AGENT_NOT_A_DRAFT otherwise); the merged config is re-validated against the type's schema (422 VALIDATION_FAILED) and unknown keys are dropped.

## Response `200`

Success

- object
  - `agent` object, required
    - `id` string, required: The agent's id — pass it as `{agentId}` to every other agent operation.
    - `type` 'web-monitor' | 'person-starting-new-job' | 'linkedin-posts' | 'person-discovery-via-filters' | 'job-postings' | 'job-posting-in-location' | 'first-person-hired-in-company-department' | 'first-person-hired-internationally' | 'company-headcount-growth' | 'company-headcount-growth-over-baseline' | 'company-department-headcount' | 'company-employee-job-location-in-two-countries' | 'funding-announcements' | 'people-watcher' | 'companies-watcher' | 'job-changes-watcher' | 'linkedin-profile' | 'linkedin-post' | 'null', nullable, required: The public agent kind — the same slug you POST to at /business/agents/{type}. null for a legacy kind this API no longer offers.
    - `name` string, required: The agent's name, which is also the name of the results list it delivers into.
    - `status` 'initializing' | 'processing' | 'active' | 'paused' | 'expired' | 'failed' | 'completed' | 'deleted', required: initializing = saved draft, nothing billed; processing = a run is under way; active = running; paused = stopped by you; expired = past its expirationDate; failed = the provider setup failed. Older agents can also read `completed` (a one-off scrape that has finished) and `deleted` (an agent deleted before deletions were timestamped: still readable, but it can no longer be edited or activated).
    - `config` object, required: The agent's config in CREATE shape: exactly the body you would POST to /business/agents/{type} (without `start`) to build this agent again. Its fields are the ones documented on that type's create operation.
    - `isReconstructed` boolean, required: false = the config is the stored snapshot, returned verbatim (always the case for a draft). true = the agent was started before its snapshot existed and the config was rebuilt from the live record, so check `lossyFields`.
    - `lossyFields` string[], required: Config fields that could not be recovered when `isReconstructed` is true; `["*"]` means only `name` is known. Empty otherwise.
    - `sourceLists` object[], required: Watcher kinds only: the source lists the config names, resolved to their names. Empty for every other kind.
      - `id` string, required: The source list's id.
      - `name` string, nullable, required: The source list's name, or null when the list has been deleted.

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `403`: Error
- `404`: Error
- `409`: Error
- `422`: Error
- `429`: Error
- `500`: Error

---

[API](https://skmtc.dev/fuseai/apis/fuse-business-api.md) · [All operations](https://skmtc.dev/fuseai/apis/fuse-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fuseai/apis/fuse-business-api/revisions/50d95e0536f4?raw)
