Skip to main content
PATCH
/
api
/
partner
/
v1
/
templates
/
{templateId}
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"
}'
{
  "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"
        }
      }
    }
  }
}
Updates a template you own and can mutate in the authenticated scope.

Path Parameters

templateId
string
required
Template UUID.

Body Parameters

name
string
Optional new name (1-100 chars after trimming). Must remain owner-unique.
description
string | null
Optional description update. Pass null to clear.
visibility
string
Optional: private or workspace.
config
object
Optional full config replacement. Must satisfy config v1 schema.
Body cannot be empty. Send at least one updatable field.
visibility: "workspace" requires workspace scope.
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"
}'
{
  "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"
        }
      }
    }
  }
}

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