Layers
Partner APIAPI referenceProjects

PATCH /v1/projects/:id

Partially update a project's user-editable fields.

View as Markdown
PATCH/v1/projects/:id
Phase 1stable
Auth
Bearer
Scope
projects:write

Patch one or more user-editable fields. Omitted fields stay unchanged. System-managed fields — id, organizationId, createdAt, ingestState, brandContext.* populated by ingestion — are read-only; passing them returns 400 VALIDATION.

To modify approval behavior, use PATCH /v1/projects/:id/approval-policy — approval lives on a separate resource so it has its own scope and audit trail.

Path
  • id
    stringrequired
    Project ID.
Body
  • name
    stringoptional
    1–128 chars.
  • status
    stringoptional
    Archiving stops scheduled posts and new content generation; it does not delete data.
    One of: active, archived
  • ownerEmail
    stringoptional
    Notification email.
  • timezone
    stringoptional
    IANA timezone. Takes effect on the next scheduler tick.
  • primaryLanguage
    stringoptional
    BCP-47 tag.
  • customerExternalId
    stringoptional
    Must remain unique within the organization.
  • metadata
    objectoptional
    Replaces the existing object in full — not a deep merge.

Example request

curl -X PATCH https://api.layers.com/v1/projects/prj_01HX9Y7K8M2P4RSTUV56789AB \
  -H "Authorization: Bearer lp_live_01HX9Y6K7EJ4T2_4QZpN..." \
  -H "Content-Type: application/json" \
  -d '{
    "timezone": "America/New_York",
    "ownerEmail": "ops@gicgrowth.com"
  }'
const project = await layers.projects.update(
  "prj_01HX9Y7K8M2P4RSTUV56789AB",
  { timezone: "America/New_York", ownerEmail: "ops@gicgrowth.com" }
);
project = layers.projects.update(
    "prj_01HX9Y7K8M2P4RSTUV56789AB",
    timezone="America/New_York",
    owner_email="ops@gicgrowth.com",
)

Response

200OK
{
  "id": "9cb958b5-11b5-4e30-8675-5d075d52da7c",
  "organizationId": "2481fa5c-a404-44ed-a561-565392499abc",
  "name": "Acme Coffee iOS",
  "status": "active",
  "customerExternalId": "acme-coffee",
  "timezone": "America/New_York",
  "primaryLanguage": "en",
  "ownerEmail": "ops@gicgrowth.com",
  "brand": null,
  "brandContext": null,
  "ingestState": { "github": null, "website": null, "appstore": null },
  "requiresApproval": false,
  "firstNPostsBlocked": 3,
  "currentBlockedCount": 0,
  "metadata": null,
  "createdAt": "2026-04-18T19:02:11.959888+00:00",
  "updatedAt": "2026-04-18T19:08:44.317953+00:00"
}

The full project record is returned, identical in shape to GET /v1/projects/:id — not a slim diff.

Errors

StatusCodeWhen
422VALIDATION:id is not a UUID, body has unknown/read-only fields, or timezone is invalid.
401UNAUTHENTICATEDMissing or invalid key.
403FORBIDDEN_SCOPEKey lacks projects:write.
404NOT_FOUNDProject does not exist in the key's organization.
409CONFLICTcustomerExternalId collides with another project in the organization.
429RATE_LIMITEDWrite budget exhausted.

See also

On this page