RecoupGet a free auditFree audit

API REFERENCE

Update Template

On this page
PATCH/api/agents/templates/{id}

Update fields on an existing template owned by the authenticated account. All body fields are optional and only the supplied fields are modified. Providing share_emails replaces the existing share list for the template.

Authentication

x-api-key in header

bearerAuth bearer

Request

cURL
curl --request PATCH \
  --url 'https://api.recoupable.dev/api/agents/templates/YOUR_ID' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "string",
  "description": "string",
  "prompt": "string",
  "tags": [
    "string"
  ],
  "is_private": true,
  "share_emails": [
    "string"
  ]
}'

Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.

Try it

Fill in the fields, send the request from your browser, and read the live response. The curl below updates as you type.

Kept in this browser tab only and cleared when it closes.

cURL for this request
curl --request PATCH \
  --url 'https://recoup-api.vercel.app/api/agents/templates/{id}' \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "string",
  "description": "string",
  "prompt": "string",
  "tags": [
    "string"
  ],
  "is_private": true,
  "share_emails": [
    "string"
  ]
}'

Parameters

Path parameters

idstringrequired

The unique identifier (UUID) of the template to update

Request body required

Fields to update on the template

application/json

titlestring

Short human-readable title for the template

minLength: 3 · maxLength: 50

descriptionstring

Description of what the template does

minLength: 10 · maxLength: 200

promptstring

The agent prompt body

minLength: 20 · maxLength: 10000

tagsarray<string>

Free-form tags used to categorize the template. Pass an empty array to clear tags.

Item properties for tags

string

is_privateboolean

When true, the template is restricted to the creator and the accounts listed in share_emails

share_emailsarray<string>

Replaces the existing share list for the template. Only applied when the template is (or becomes) private.

Item properties for share_emails

string

Responses

200Template updated successfully

application/json

statusstring · enumrequired

Status of the request

Values: "success"

templateobjectrequired
Properties for template
idstringrequired

Unique identifier of the template

format: uuid

titlestringrequired

Short human-readable title for the template (3-50 characters)

descriptionstringrequired

Description of what the template does (10-200 characters)

promptstringrequired

The agent prompt body (20-10000 characters)

tagsarray<string>required

Free-form tags used to categorize the template. Empty array when there are no tags.

Item properties for tags

string

creatorobject | nullrequired

The account that created the template. May be null when the creator account is unavailable.

Properties for creator
idstringrequired

Unique identifier of the creator account

format: uuid

namestring | nullrequired

Display name of the creator account

imagestring | nullrequired

Profile image URL of the creator account

is_adminbooleanrequired

Whether the creator is a Recoup admin (their account email is on the platform admin allow-list)

is_privatebooleanrequired

Whether the template is restricted to the creator and explicitly shared accounts

is_favouritebooleanrequired

Whether the authenticated account has favorited this template

favorites_countintegerrequired

Total number of accounts that have favorited this template

shared_emailsarray<string>required

Emails the template has been shared with. Only populated for private templates the authenticated account owns; empty for public templates and for private templates shared with the caller.

Item properties for shared_emails

string

created_atstringrequired

ISO 8601 timestamp of when the template was created

format: date-time

updated_atstring | nullrequired

ISO 8601 timestamp of when the template was last updated

format: date-time

400Bad request - validation failed

application/json

statusstring · enumrequired

Status of the request

Values: "error"

errorstringrequired

Human-readable error message

missing_fieldsarray<string>

Names of required fields that were missing from the request, when applicable

Item properties for missing_fields

string

401Unauthorized - missing or invalid credentials

application/json

statusstring · enumrequired

Status of the request

Values: "error"

errorstringrequired

Human-readable error message

missing_fieldsarray<string>

Names of required fields that were missing from the request, when applicable

Item properties for missing_fields

string

403Forbidden - the authenticated account does not own this template

application/json

statusstring · enumrequired

Status of the request

Values: "error"

errorstringrequired

Human-readable error message

missing_fieldsarray<string>

Names of required fields that were missing from the request, when applicable

Item properties for missing_fields

string

404Template not found

application/json

statusstring · enumrequired

Status of the request

Values: "error"

errorstringrequired

Human-readable error message

missing_fieldsarray<string>

Names of required fields that were missing from the request, when applicable

Item properties for missing_fields

string

500Internal server error

application/json

statusstring · enumrequired

Status of the request

Values: "error"

errorstringrequired

Human-readable error message

missing_fieldsarray<string>

Names of required fields that were missing from the request, when applicable

Item properties for missing_fields

string

Full specification

Download the OpenAPI file for complete schemas, constraints, and examples.

Download templates.json
View operation source
json
{
  "summary": "Update a template",
  "description": "Update fields on an existing template owned by the authenticated account. All body fields are optional and only the supplied fields are modified. Providing `share_emails` replaces the existing share list for the template.",
  "security": [
    {
      "apiKeyAuth": []
    },
    {
      "bearerAuth": []
    }
  ],
  "parameters": [
    {
      "name": "id",
      "in": "path",
      "description": "The unique identifier (UUID) of the template to update",
      "required": true,
      "schema": {
        "type": "string",
        "format": "uuid"
      }
    }
  ],
  "requestBody": {
    "description": "Fields to update on the template",
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/UpdateTemplateRequest"
        }
      }
    }
  },
  "responses": {
    "200": {
      "description": "Template updated successfully",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/TemplateResponse"
          }
        }
      }
    },
    "400": {
      "description": "Bad request - validation failed",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ErrorResponse"
          }
        }
      }
    },
    "401": {
      "description": "Unauthorized - missing or invalid credentials",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ErrorResponse"
          }
        }
      }
    },
    "403": {
      "description": "Forbidden - the authenticated account does not own this template",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ErrorResponse"
          }
        }
      }
    },
    "404": {
      "description": "Template not found",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ErrorResponse"
          }
        }
      }
    },
    "500": {
      "description": "Internal server error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ErrorResponse"
          }
        }
      }
    }
  }
}