<!-- Generated from the canonical Teloring documentation source. Do not edit this file. -->

Canonical page: https://docs.teloring.com/api/update-conversation-custom-attributes
Last modified: 2026-08-20T20:52:05.000Z

# Set custom attribute values

import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import ParamsDetails from "@theme/ParamsDetails";
import RequestSchema from "@theme/RequestSchema";
import StatusCodes from "@theme/StatusCodes";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";
import Heading from "@theme/Heading";
import Translate from "@docusaurus/Translate";

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Set custom attribute values"}
>
</Heading>

<MethodEndpoint
  method={"patch"}
  path={"/conversations/{conversation_id}/custom-attributes"}
  context={"endpoint"}
>
  
</MethodEndpoint>



A partial merge: attributes you do not mention keep their value. Send `null` for
one to clear it.

Values are validated against the account's schema (`GET /v1/conversation-attributes`),
so an unknown attribute id, or a value outside a select list, is a `400` naming
the field rather than bad data stored quietly.

Writing an attribute does **not** move the conversation up the queue — filing
information is bookkeeping, not a customer interaction.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./update-conversation-custom-attributes.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./update-conversation-custom-attributes.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./update-conversation-custom-attributes.StatusCodes.json")}
>
  
</StatusCodes>
