> ## Documentation Index
> Fetch the complete documentation index at: https://docs.genviral.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Template

> Update mutable template fields

Updates a template you own and can mutate in the authenticated scope.

## Path Parameters

<ParamField path="templateId" type="string" required>
  Template UUID.
</ParamField>

## Body Parameters

<ParamField body="name" type="string">
  Optional new name (`1-100` chars after trimming). Must remain owner-unique.
</ParamField>

<ParamField body="description" type="string | null">
  Optional description update. Pass `null` to clear.
</ParamField>

<ParamField body="visibility" type="string">
  Optional: `private` or `workspace`.
</ParamField>

<ParamField body="config" type="object">
  Optional full config replacement. Must satisfy config v1 schema.
</ParamField>

<Warning>
  Body cannot be empty. Send at least one updatable field.
</Warning>

<Note>
  `visibility: "workspace"` requires workspace scope.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --request PATCH \
    --url https://www.genviral.io/api/partner/v1/templates/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
    "name": "Hooks Template v2",
    "description": null,
    "visibility": "workspace"
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "ok": true,
    "code": 200,
    "message": "Template updated",
    "data": {
      "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "name": "Hooks Template v2",
      "description": null,
      "visibility": "workspace",
      "preview_url": null,
      "use_count": 12,
      "last_used_at": "2026-02-14T09:11:00.000Z",
      "created_at": "2026-02-12T15:00:00.000Z",
      "updated_at": "2026-02-14T10:00:00.000Z",
      "is_owner": true,
      "config": {
        "version": 1,
        "structure": {
          "slides": [
            {
              "type": "pack",
              "id": "11111111-1111-1111-1111-111111111111",
              "pinnedImageUrl": null,
              "textElements": [
                {
                  "id": "22222222-2222-2222-2222-222222222222",
                  "content": "Hook text",
                  "x": 50,
                  "y": 25,
                  "fontSize": 48,
                  "width": 70
                }
              ]
            }
          ]
        },
        "content": {
          "mode": "manual",
          "productId": null,
          "language": "en",
          "slideshowType": "educational"
        },
        "visuals": {
          "packId": null,
          "aspectRatio": "4:5",
          "textSettings": {
            "fontSize": "default",
            "preset": "tiktok",
            "width": "default"
          }
        }
      }
    }
  }
  ```
</ResponseExample>

## Error Responses

* `400 missing_template_id` - path param missing
* `400 invalid_json` - body is not valid JSON
* `422 invalid_payload` - schema validation failed or body is empty
* `404 not_found` - template not found in readable scope
* `403 forbidden_template` - template exists but mutation is not allowed in current scope
* `409 template_name_conflict` - name already exists for owner
* `422 invalid_template_config` - provided config is invalid
* `401` - authentication failed (missing/invalid/revoked token)
* `402 subscription_required` - active Creator/Professional/Business plan required
* `403 tier_not_allowed` - Scheduler tier cannot use Partner API
* `500 template_update_failed` - unexpected update failure
