{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/zoominfo/main/json-schema/zoominfo-customer-buyer-persona-upsert-schema.json", "title": "CustomerBuyerPersonaUpsert", "description": "Customer Buyer Persona resource for upsert operations.", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/zoominfo-customer-buyer-persona-api-openapi.yml#/components/schemas/CustomerBuyerPersonaUpsert", "type": "object", "required": [ "data" ], "properties": { "data": { "type": "object", "required": [ "type", "attributes" ], "properties": { "id": { "type": "string", "description": "The unique identifier for the resource" }, "type": { "type": "string", "enum": [ "CustomerBuyerPersona" ], "description": "The type of the resource" }, "attributes": { "allOf": [ { "$ref": "#/$defs/CustomerBuyerPersonaAttributes" } ], "description": "The attributes defining the resource" }, "meta": { "allOf": [ { "$ref": "#/$defs/GtmConfigAuditFields" } ], "description": "Non-standard meta information about the resource" } }, "x-discriminator-property": "type", "description": "The primary data of the document" } }, "$defs": { "CustomFieldItem": { "type": "object", "required": [ "title", "value" ], "properties": { "title": { "type": "string", "description": "The display title of the custom field." }, "description": { "type": "string", "description": "An optional description of the field. Defaults to an empty string in the backend.", "default": "" }, "value": { "type": "string", "description": "The string value associated with this custom field." } }, "description": "Schema for a single custom field item." }, "CustomerBuyerPersonaAttributes": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "Name of the buyer persona. Required when creating a new record. When provided (for create or update), must be between 1 and 1024 characters." }, "description": { "type": "string", "maxLength": 10000, "description": "Detailed description of this buyer persona, including their role, responsibilities, and relevance to the sales process. Maximum 10,000 characters." }, "personalObjectives": { "type": "string", "maxLength": 10000, "description": "Personal objectives for this persona such as career goals, KPIs, and success metrics that drive their purchasing decisions. Maximum 10,000 characters." }, "whatDoesThisPersonaCareAbout": { "type": "string", "maxLength": 10000, "description": "Messaging angle explaining what this persona cares about in the customer's offering. Maximum 10,000 characters." }, "titlesFunctionsSeniority": { "type": "string", "maxLength": 10000, "description": "Typical job titles, functional areas, and seniority levels associated with this persona. Maximum 10,000 characters." }, "relevantOfferings": { "type": "string", "maxLength": 10000, "description": "Relevant offerings from the customer's portfolio that this persona would be interested in. Maximum 10,000 characters." }, "source": { "allOf": [ { "$ref": "#/$defs/GtmConfigSourceType" } ], "description": "Source type indicating how this persona record was created or last modified. Defaults to `manual`. See `GtmConfigSourceType` for allowed values. When set explicitly, the backend validates source consistency with the `created_by` and `updated_by` fields.", "readOnly": true }, "customFields": { "type": "array", "items": { "$ref": "#/$defs/CustomFieldItem" }, "description": "Flexible key-value store for customer-specific custom fields and extended metadata. The backend validates schema and value types. Use this to capture additional persona attributes beyond the standard fields." } }, "description": "Attributes that define a customer buyer persona — a profile representing a type of buyer\nthat the customer's sales team targets. Buyer personas capture who the ideal buyers are,\nwhat motivates them, and how to engage them effectively." }, "GtmConfigAuditFields": { "type": "object", "properties": { "createdAt": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp when the record was originally created. Auto-populated by backend.", "readOnly": true }, "updatedAt": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp of the most recent modification to the record. Auto-populated by backend.", "readOnly": true }, "createdBy": { "type": "string", "description": "User ID of the person who created the record. Extracted from the JWT token on creation.", "readOnly": true }, "updatedBy": { "type": "string", "description": "User ID of the person who last modified the record. Extracted from the JWT token on update.", "readOnly": true }, "archivedAt": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp when the record was archived. Archived records are identified by archivedAt and archivedBy", "readOnly": true }, "archivedBy": { "type": "string", "description": "User ID of the person who archived the record", "readOnly": true } }, "description": "Common audit fields present on all customer-level GTM configuration entities.\nThese fields track the full lifecycle of a record including creation, modification,\narchival (temporary hiding), and soft deletion (permanent hiding for compliance).\nA record can be active, deleted only, or both." }, "GtmConfigSourceType": { "type": "string", "enum": [ "manual", "import", "system", "mcp" ], "description": "Source type indicating how a GTM configuration record was created or last modified.\nUsed across all customer-level entities for audit provenance tracking.\nWhen source is explicitly set in a request, the corresponding created_by/updated_by must also be provided.\nDefaults to 'manual' when not specified.", "x-enumDescriptions": { "MANUAL": "Created or updated manually by a user through the GTM Studio UI.", "IMPORT": "Imported from an external data source such as CRM or CSV upload.", "SYSTEM": "Generated automatically by the platform (e.g., system enrichment or background jobs).", "MCP": "Created or updated via the GTM Config MCP integration by an AI agent." } } } }