{ "openapi": "3.0.1", "info": { "title": "Twilio Memory API", "description": "APIs for managing memory stores, profiles, events, and conversational intelligence capabilities.", "version": "1.0", "termsOfService": "https://www.twilio.com/legal/tos", "contact": { "name": "Twilio Support", "url": "https://support.twilio.com", "email": "support@twilio.com" }, "license": { "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, "x-twilio": { "apiStandards": "v1.0" } }, "servers": [ { "url": "https://memory.twilio.com" } ], "paths": { "/v1/Stores/{storeId}/Profiles/{profileId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "pathType": "instance" }, "delete": { "operationId": "DeleteProfile", "summary": "Delete Profile", "description": "Asynchronously delete the profile permanently and all associated identifiers and traits. This operation is irreversible. Downstream caches or analytical stores may take time to reflect the deletion. Use cautiously and consider a soft\u2011delete strategy if regulatory or recovery requirements apply.", "tags": [ "Profile" ], "responses": { "202": { "description": "Profile deletion accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "maxLength": 512, "example": "Profile accepted for deletion." } } }, "examples": { "Accepted": { "value": { "message": "Profile accepted for deletion." } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "get": { "operationId": "FetchProfile", "summary": "Get Profile", "description": "Retrieve profile traits by profile ID. Use the `traitGroups` query parameter to restrict results to a comma-separated allow list of trait group names. For large sets of traits, prefer using the dedicated `/Traits` endpoint for pagination.", "tags": [ "Profile" ], "parameters": [ { "$ref": "#/components/parameters/TraitGroupsQueryParam" } ], "responses": { "200": { "description": "A profile.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Profile" } } }, "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchProfileTraits", "summary": "Patch Profile Traits", "description": "Merge one or more trait groups into an existing profile. Only the traits provided are added or updated; unspecified traits remain unchanged. Only pre-defined trait groups and traits configured for the memory store can be patched. To remove a trait entirely, set its value to null.", "tags": [ "Profile" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProfilePatch" }, "example": { "traits": { "Activity": { "lastVisited": "2024-10-07T15:39:25Z" } } } } } }, "responses": { "202": { "description": "Trait patch accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "example": "Trait modifications accepted for processing.", "maxLength": 255 } }, "maxProperties": 1 }, "examples": { "Accepted": { "value": { "message": "Trait modifications accepted for processing." } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/Lookup": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "pathType": "list" }, "post": { "operationId": "CreateProfilesLookup", "summary": "Lookup Profiles", "description": "Find profiles that contain a specific identifier value (for example a phone number or email address). Submit an identifier object specifying the `idType` and `value`. The value is normalized using the configured identity resolution settings (such as phone number formatting) prior to matching. Multiple matches are returned if more than one profile is associated with the identifier. Returns canonical profile IDs (the earliest ID if profiles have been merged) along with the normalized value actually searched.", "tags": [ "Retrieval" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Identifier" }, "example": { "idType": "phone", "value": "1-317-555-6789" } } } }, "responses": { "200": { "description": "A list of profiles found.", "content": { "application/json": { "schema": { "type": "object", "properties": { "normalizedValue": { "type": "string", "maxLength": 255, "description": "Identifier value after normalization that was used for the lookup.", "example": "+13175556789" }, "profiles": { "type": "array", "maxItems": 100, "items": { "$ref": "#/components/schemas/IdentityProfileID" } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Identifiers": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "defaultOutputProperties": [ "identifiers" ], "pathType": "list" }, "get": { "operationId": "ListProfileIdentifiers", "summary": "List Profile Identifiers", "description": "Retrieve all identifier types linked to a profile along with their stored values. Use this to audit which external keys (phone, email, externalId, etc.) are currently associated. Values are returned in the order enforced by each identifier settings `limitPolicy` and reflect any normalization applied by the service.", "tags": [ "Identifiers" ], "responses": { "200": { "description": "A list of identifiers.", "content": { "application/json": { "schema": { "type": "object", "properties": { "identifiers": { "type": "array", "maxItems": 50, "items": { "$ref": "#/components/schemas/IdentifierSet" } } } } } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateProfileIdentifier", "summary": "Add Profile Identifier", "description": "Asynchronously attach a new identifier value to a profile. When multiple values exist for an `idType`, ordering, limits, and uniqueness checks are enforced by the corresponding identifier settings `limitPolicy` and reflect any normalization. If the identifier already exists and points to another profile, resolution rules or merge processes may apply. Use the identifier specific endpoint to inspect, update, or remove existing values.", "tags": [ "Identifiers" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Identifier" }, "example": { "idType": "phone", "value": "+13175556789" } } } }, "responses": { "202": { "description": "Identifier association accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "maxLength": 512, "example": "Identifier accepted for processing." } } }, "examples": { "Accepted": { "value": { "message": "Identifier accepted for processing." } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Identifiers/{idType}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" }, { "$ref": "#/components/parameters/IdentifierType" } ], "x-twilio": { "pathType": "instance" }, "get": { "operationId": "FetchProfileIdentifier", "summary": "Retrieve Profile Identifier", "description": "Retrieve all stored values for a specific identifier type on a profile. Values are normalized according to the configured identifier settings and returned in the order determined by its `limitPolicy`.", "tags": [ "Identifiers" ], "responses": { "200": { "description": "Identifier values associated with the requested type.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IdentifierSet" } } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchProfileIdentifier", "summary": "Modify Profile Identifier", "description": "Asynchronously replace one of the stored values associated with the\nidentifier type on a profile. `newValue` is normalized according to\nthe configured identifier settings. \n\nIf the new identifier already exists and points to another profile,\nmerge processes may apply.", "tags": [ "Identifiers" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IdentifierUpdate" }, "example": { "idType": "phone", "oldValue": "+13175556789", "newValue": "+13175556798" } } } }, "responses": { "202": { "description": "Identifier update accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "maxLength": 512, "example": "Identifier update accepted." } } }, "examples": { "Accepted": { "value": { "message": "Identifier update accepted." } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteProfileIdentifier", "summary": "Remove Profile Identifier", "description": "Asynchronously remove stored values for the identifier type. The optional `removeAll` query parameter allows bulk removal; otherwise the service selects a single value to delete using the identifier settings `limitPolicy`.", "tags": [ "Identifiers" ], "parameters": [ { "name": "removeAll", "in": "query", "required": false, "description": "When true, removes every stored value for the identifier type in a single operation. Defaults to false.", "schema": { "type": "boolean", "default": false } } ], "responses": { "202": { "description": "Identifier removal accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "maxLength": 512, "example": "Identifier removal accepted." } } }, "examples": { "Accepted": { "value": { "message": "Identifier removal accepted." } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Recall": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "pathType": "list" }, "post": { "operationId": "CreateFetchProfileMemory", "summary": "Retrieve Memories", "description": "Tailored memory retrieval for agentic workloads. Supports hybrid semantic search, date ranges, and configurable result limits for different memory types. This endpoint is optimized for conversational AI and memory retrieval use cases. If a query is not specified then one is inferred from the conversation context. If neither a query nor a conversationId is provided, results are returned in most-recent order without relevance scores.", "tags": [ "Retrieval" ], "parameters": [ { "$ref": "#/components/parameters/AcceptEncoding" }, { "$ref": "#/components/parameters/ContentEncoding" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryRetrievalRequest" }, "examples": { "Basic Query": { "value": { "query": "customer satisfaction feedback", "conversationId": "conv_conversation_00000000000000000000000000", "communicationsLimit": 10, "observationsLimit": 20, "summariesLimit": 5 } }, "Retrieval without Query field": { "value": { "conversationId": "conv_conversation_00000000000000000000000000", "beginDate": "2025-01-15T00:00:00Z", "communicationsLimit": 15, "observationsLimit": 25, "summariesLimit": 10 } } } } } }, "responses": { "200": { "description": "Memory retrieval results returned successfully.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" }, "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryRetrievalResponse" }, "examples": { "Basic Results": { "value": { "observations": [ { "id": "mem_observation_00000000000000000000000001", "content": "Customer expressed satisfaction with recent product update during support call.", "source": "customer_service", "occurredAt": "2025-01-15T10:15:30Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" } ], "summaries": [], "communications": [], "meta": { "queryTime": 156 } } }, "Retrieval without Query field Results": { "value": { "observations": [], "summaries": [ { "id": "mem_summary_00000000000000000000000002", "conversationId": "conv_conversation_00000000000000000000000000", "content": "Recent conversation indicates continued billing visibility concerns; reassurance provided.", "source": "summary_operator", "occurredAt": "2025-01-15T16:00:00Z", "createdAt": "2025-01-15T16:00:10Z", "updatedAt": "2025-01-15T16:00:10Z" } ], "communications": [ { "id": "conv_communication_00000000000000000000000000", "author": { "id": "conv_participant_00000000000000000000000000", "name": "Customer", "address": "+12025551234", "channel": "SMS" }, "channelId": "SM00000000000000000000000000000000", "content": { "text": "Hey, I still can't see the new charges on my account." }, "createdAt": "2025-01-15T15:58:10Z", "recipients": [ { "id": "conv_participant_00000000000000000000000001", "name": "Agent", "address": "+12025555678", "channel": "SMS" } ] }, { "id": "conv_communication_00000000000000000000000001", "author": { "id": "conv_participant_00000000000000000000000001", "name": "Agent", "address": "+12025555678", "channel": "SMS" }, "channelId": "SM00000000000000000000000000000000", "content": { "text": "Thanks for checking in. The billing refresh is in progress and should finish shortly." }, "createdAt": "2025-01-15T15:59:05Z", "recipients": [ { "id": "conv_participant_00000000000000000000000000", "name": "Customer", "address": "+12025551234", "channel": "SMS" } ] } ], "meta": { "queryTime": 142 } } } } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Observations": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "defaultOutputProperties": [ "observations" ], "pathType": "list" }, "get": { "operationId": "ListProfileObservations", "summary": "List Observations", "description": "Retrieve a paginated list of transient observations for a specific profile. Observations are sorted by creation time in descending order by default. Results can be filtered by source parameter. Supports response compression for large datasets.", "tags": [ "Observations" ], "parameters": [ { "$ref": "#/components/parameters/PageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" }, { "$ref": "#/components/parameters/SourceParam" }, { "$ref": "#/components/parameters/CreatedAfter" }, { "$ref": "#/components/parameters/CreatedBefore" }, { "$ref": "#/components/parameters/AcceptEncoding" } ], "responses": { "200": { "description": "A list of observations for the profile.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" }, "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "observations": { "type": "array", "maxItems": 50, "items": { "$ref": "#/components/schemas/ObservationInfo" } }, "meta": { "$ref": "#/components/schemas/ObservationsMeta" } } }, "example": { "observations": [ { "id": "mem_observation_00000000000000000000000001", "content": "Customer expressed frustration with billing process during call on 2025-01-15. Mentioned difficulty understanding charges.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" }, { "id": "mem_observation_00000000000000000000000002", "conversationIds": [ "conv_conversation_00000000000000000000000000" ], "content": "Customer: 'I love the new feature you added.' Agent: 'Thank you for the feedback, we're glad you're enjoying it.'", "source": "chat_transcript", "occurredAt": "2025-01-15T14:30:00Z", "createdAt": "2025-01-15T11:15:30Z", "updatedAt": "2025-01-15T11:15:30Z" } ], "meta": { "pageSize": 2, "nextToken": "eyJlYXN0ZXIiOiJlZ2cifQ", "key": "observations" } } } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateProfileObservation", "summary": "Create Observations", "description": "Create one or more transient observations associated with the specified profile. Supports both single observation creation and batch creation of up to 10 observations. Supports request compression for large batch operations and response compression for the response. All observations will be automatically indexed for semantic search capabilities. The content can be up to 4KB in length and should contain relevant information about the profile. The createdAt and updatedAt timestamps will be automatically set to the current time. Each observation will be created with a unique ID in Twilio Type ID (TTID) format.", "tags": [ "Observations" ], "parameters": [ { "$ref": "#/components/parameters/AcceptEncoding" }, { "$ref": "#/components/parameters/ContentEncoding" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateObservationsRequest" }, "examples": { "Single Observation": { "value": { "observations": [ { "content": "Customer expressed frustration with billing process during call on 2025-01-15. Mentioned difficulty understanding charges.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z" } ] } }, "Batch Observations": { "value": { "observations": [ { "content": "Customer expressed frustration with billing process during call on 2025-01-15. Mentioned difficulty understanding charges.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z" }, { "content": "Customer: 'I love the new feature you added.' Agent: 'Thank you for the feedback, we're glad you're enjoying it.'", "source": "chat_transcript", "occurredAt": "2025-01-15T15:30:00Z", "conversationIds": [ "conv_conversation_00000000000000000000000000" ] } ] } } } } } }, "responses": { "202": { "description": "Observation creation accepted and is being processed.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObservationCreatedResponse" } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Observations/{observationId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" }, { "$ref": "#/components/parameters/ObservationId" } ], "x-twilio": { "pathType": "instance" }, "get": { "operationId": "FetchProfileObservation", "summary": "Retrieve Observation", "description": "Retrieve a specific transient observation by its ID for the given profile.", "tags": [ "Observations" ], "responses": { "200": { "description": "Observation retrieved successfully.", "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObservationInfo" }, "examples": { "Conversation Observation": { "value": { "id": "mem_observation_00000000000000000000000001", "content": "Customer expressed frustration with billing process during call on 2025-01-15. Mentioned difficulty understanding charges.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z", "conversationIds": [ "conv_conversation_00000000000000000000000000" ], "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchProfileObservation", "summary": "Update Observation", "description": "Update a specific transient observation by its ID. Only provided fields will be updated. The updated timestamp will be automatically set. This allows for selective updates without needing to provide all fields.", "tags": [ "Observations" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObservationCore" }, "examples": { "Update Content Only": { "value": { "content": "Updated: Customer expressed satisfaction with recent product update during support call. Follow-up scheduled.", "source": "customer_service", "occurredAt": "2025-01-15T16:00:00Z" } }, "Update Source": { "value": { "content": "Customer preferences noted during interaction.", "source": "customer_service_followup", "occurredAt": "2025-01-15T16:30:00Z" } }, "Update Intelligent Operator Fields": { "value": { "content": "Analysis updated with improved confidence assessment.", "source": "ai_analysis", "occurredAt": "2025-01-15T17:00:00Z" } } } } } }, "responses": { "202": { "description": "Observation update accepted and is being processed.", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 512, "example": "Observation update accepted" } }, "required": [ "message" ] } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteProfileObservation", "summary": "Delete Observation", "description": "Delete a specific transient observation by its ID. This action is irreversible.", "tags": [ "Observations" ], "responses": { "202": { "description": "Observation deletion accepted and is being processed.", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 255, "example": "Observation deletion accepted" } }, "required": [ "message" ] } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Observations/{observationId}/Revisions": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" }, { "$ref": "#/components/parameters/ObservationId" } ], "x-twilio": { "defaultOutputProperties": [ "revisions" ], "pathType": "list" }, "get": { "operationId": "ListObservationRevisions", "summary": "List Observation Revisions", "description": "Retrieve a chronologically ordered list of all past revisions of a specific observation by its ID. Revisions represent the complete history of updates and modifications made to an observation, with each revision capturing the full state at the time of change. Revisions are sorted by update time in descending order (newest first), allowing you to track how an observation has evolved through updates over time.", "tags": [ "Observations" ], "parameters": [ { "$ref": "#/components/parameters/PageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/AcceptEncoding" } ], "responses": { "200": { "description": "A chronologically ordered list of observation revisions.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" }, "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "revisions": { "type": "array", "maxItems": 50, "items": { "$ref": "#/components/schemas/ObservationInfo" }, "description": "Array of observation revisions ordered chronologically descending by update time (newest first)." }, "meta": { "$ref": "#/components/schemas/ObservationsMeta" } } }, "examples": { "Observation Revisions": { "value": { "revisions": [ { "id": "mem_observation_00000000000000000000000001", "content": "Updated: Customer expressed satisfaction with recent product update during support call. Follow-up scheduled.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T14:20:15Z" }, { "id": "mem_observation_00000000000000000000000001", "content": "Customer expressed frustration with billing process during call on 2025-01-15. Mentioned difficulty understanding charges.", "source": "customer_service", "occurredAt": "2025-01-15T14:30:00Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" } ], "meta": { "pageSize": 2, "nextToken": "eyJlYXN0ZXIiOiJlZ2cifQ", "key": "revisions" } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/ConversationSummaries": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "defaultOutputProperties": [ "summaries" ], "pathType": "list" }, "get": { "operationId": "ListProfileConversationSummaries", "summary": "List Conversation Summaries", "description": "Retrieve a paginated list of conversation summaries for a specific profile. Supports response compression for large datasets.", "tags": [ "ConversationSummaries" ], "parameters": [ { "$ref": "#/components/parameters/PageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/AcceptEncoding" } ], "responses": { "200": { "description": "A list of conversation summaries for the profile.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" }, "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "summaries": { "type": "array", "maxItems": 50, "items": { "$ref": "#/components/schemas/SummaryInfo" } }, "meta": { "$ref": "#/components/schemas/ObservationsMeta" } } }, "example": { "summaries": [ { "id": "mem_summary_00000000000000000000000001", "conversationId": "conv_conversation_00000000000000000000000000", "content": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation.", "source": "conversational_intelligence", "occurredAt": "2025-01-15T10:30:00Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" }, { "id": "mem_summary_00000000000000000000000002", "conversationId": "conv_conversation_00000000000000000000000000", "content": "Customer: 'I love the new feature you added.' Agent: 'Thank you for the feedback, we're glad you're enjoying it.'", "source": "summary_operator", "occurredAt": "2025-01-15T11:15:00Z", "createdAt": "2025-01-15T11:15:30Z", "updatedAt": "2025-01-15T11:15:30Z" } ], "meta": { "pageSize": 2, "nextToken": "eyJlYXN0ZXIiOiJlZ2cifQ", "key": "summaries" } } } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateProfileConversationSummary", "summary": "Create Conversation Summaries", "description": "Create one or more conversation summaries associated with the specified profile. Supports both single summary creation and batch creation of up to 10 summaries. Supports request compression for large batch operations and response compression for the response. All summaries will be automatically indexed for semantic search capabilities. The content summary can be up to 4KB in length. Each summary will be created with a unique ID in Twilio Type ID (TTID) format.", "tags": [ "ConversationSummaries" ], "parameters": [ { "$ref": "#/components/parameters/AcceptEncoding" }, { "$ref": "#/components/parameters/ContentEncoding" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSummariesRequest" }, "examples": { "Single Summary": { "value": { "summaries": [ { "conversationId": "conv_conversation_00000000000000000000000000", "content": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation.", "source": "conversational_intelligence", "occurredAt": "2025-01-15T15:00:00Z" } ] } } } } } }, "responses": { "202": { "description": "Conversation summary creation accepted and is being processed.", "headers": { "Content-Encoding": { "$ref": "#/components/headers/ContentEncoding" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummariesCreatedResponse" } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "defaultOutputProperties": [ "profiles" ], "pathType": "list" }, "get": { "operationId": "ListProfiles", "summary": "List Profiles", "description": "Return a paginated list of profile IDs ordered by most recently created first. Use the optional paging parameters (`pageSize`, `pageToken`, `orderBy`) to control pagination and sorting. This endpoint is optimized for browsing newly created profiles and lightweight lookups where only the identifiers are needed before requesting full profile details.", "tags": [ "Profile" ], "parameters": [ { "$ref": "#/components/parameters/PageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" } ], "responses": { "200": { "description": "A list of profile IDs up to a maximum of 100.", "content": { "application/json": { "schema": { "type": "object", "properties": { "profiles": { "type": "array", "maxItems": 100, "items": { "$ref": "#/components/schemas/ProfileID" }, "example": [ "mem_profile_00000000000000000000000000", "mem_profile_00000000000000000000000001", "mem_profile_00000000000000000000000002", "mem_profile_00000000000000000000000003", "mem_profile_00000000000000000000000004", "mem_profile_00000000000000000000000005", "mem_profile_00000000000000000000000006", "mem_profile_00000000000000000000000007", "mem_profile_00000000000000000000000008", "mem_profile_00000000000000000000000009" ] }, "meta": { "$ref": "#/components/schemas/ProfilesMeta" } }, "maxProperties": 2 } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateProfile", "summary": "Create Profile", "description": "Create a new profile and set initial traits. The request synchronously resolves identity and either creates a new profile ID or retrieves the associated canonical profile ID based on any provided identifier traits present in the request. The request must contain at least one trait that is promoted to an identifier in its trait group settings. Any additional traits are queued for asynchronous processing.", "tags": [ "Profile" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProfileData" }, "examples": { "Add Contact": { "value": { "traits": { "Contact": { "email": "Alyssa.Mock@example.com", "phone": "+13175551234", "lastName": "Mock", "firstName": "Alyssa", "street": "123 Main St", "city": "San Francisco", "state": "CA", "postalCode": "94107", "country": "US" } } } }, "Unknown Caller (Customer Care)": { "value": { "traits": { "Contact": { "phone": "+13175551234", "preferredLanguage": "en" }, "IVR": { "datetime": "2023-10-05T15:39:25Z", "ivrPath": "main_menu>technical_support>password_reset", "languageSelected": "en" }, "Support": { "disposition": "resolved" } } } }, "Known New Caller (Customer Care)": { "value": { "traits": { "Contact": { "phone": "+13175551234", "lastName": "Mock", "firstName": "Alyssa", "preferredLanguage": "en" }, "Account": { "accountNumber": "123456" }, "IVR": { "datetime": "2023-10-05T15:39:25Z", "ivrPath": "main_menu>technical_support>password_reset>xfer_to_agent", "languageSelected": "en" }, "Support": { "disposition": "resolved" } } } } } } } }, "responses": { "202": { "description": "Profile resolved and accepted for processing.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message", "id" ], "properties": { "id": { "$ref": "#/components/schemas/ProfileID", "example": "mem_profile_00000000000000000000000000" }, "message": { "type": "string", "example": "Profile resolved and accepted for processing.", "maxLength": 255 } }, "maxProperties": 2 }, "examples": { "Accepted": { "value": { "message": "Profile resolved and accepted for processing.", "id": "mem_profile_00000000000000000000000000" } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/Bulk": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "pathType": "instance" }, "put": { "operationId": "UpdateProfilesBulk", "summary": "Bulk Upsert Profiles", "description": "Create or update up to 1000 profiles in a single asynchronous batch. Each profile body follows the same structure as single profile creation. If a profile already exists its traits are merged (new keys added, existing keys overwritten). Large batches may take time to process; the 202 response indicates the batch has been accepted. Monitor downstream telemetry or audit logs to confirm completion.", "tags": [ "Profile" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "profiles": { "type": "array", "maxItems": 1000, "minItems": 1, "items": { "$ref": "#/components/schemas/ProfileData" } } }, "maxProperties": 1 }, "example": { "profiles": [ { "traits": { "Contact": { "phone": "+13175551234", "email": "Alyssa.Mock@example.com", "lastName": "Mock", "firstName": "Alyssa" } } }, { "traits": { "Contact": { "phone": "+13175556789", "email": "John.Doe@example.com", "lastName": "Doe", "firstName": "John" } } } ] } } } }, "responses": { "202": { "description": "Profiles batch accepted.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "example": "Profile batch accepted for processing.", "maxLength": 255 } }, "maxProperties": 1 }, "examples": { "Accepted": { "value": { "message": "Profile batch accepted for processing." } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/Traits": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" } ], "x-twilio": { "defaultOutputProperties": [ "traits" ], "pathType": "list" }, "get": { "operationId": "ListProfileTraits", "summary": "List Profile Traits", "description": "Return a paginated, optionally filtered list of individual traits for a profile (flattened view). This is useful for UIs or tools that need to browse trait metadata (names, groups, timestamps). Use the optional `traitGroups` filter to scope results and the paging parameters to iterate through larger sets.", "tags": [ "Traits" ], "parameters": [ { "$ref": "#/components/parameters/PageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" }, { "$ref": "#/components/parameters/TraitGroupsQueryParam" } ], "responses": { "200": { "description": "A list of traits.", "content": { "application/json": { "schema": { "type": "object", "properties": { "traits": { "type": "array", "maxItems": 100, "items": { "$ref": "#/components/schemas/FullTrait" } }, "meta": { "$ref": "#/components/schemas/ProfilesMeta" } }, "maxProperties": 2 }, "examples": { "All Traits": { "summary": "All traits for a profile", "value": { "traits": [ { "name": "firstName", "value": "Alyssa", "traitGroup": "Contact", "timestamp": "2025-01-01T12:00:00Z" }, { "name": "lastName", "value": "Mock", "traitGroup": "Contact", "timestamp": "2025-01-01T12:00:00Z" }, { "name": "tier", "value": "gold", "traitGroup": "Loyalty", "timestamp": "2025-01-01T12:30:00Z" }, { "name": "points", "value": "1250", "traitGroup": "Loyalty", "timestamp": "2025-01-01T12:30:00Z" } ], "meta": { "pageSize": 4, "key": "traits" } } }, "Filtered by TraitGroup": { "summary": "Traits filtered by traitGroups=Contact", "value": { "traits": [ { "name": "firstName", "value": "Alyssa", "traitGroup": "Contact", "timestamp": "2025-01-01T12:00:00Z" }, { "name": "lastName", "value": "Mock", "traitGroup": "Contact", "timestamp": "2025-01-01T12:00:00Z" }, { "name": "email", "value": "alyssa.mock@example.com", "traitGroup": "Contact", "timestamp": "2025-01-01T12:00:00Z" } ], "meta": { "pageSize": 3, "key": "traits" } } } } } }, "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } } }, "301": { "$ref": "#/components/responses/MovedPermanently" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores": { "servers": [ { "url": "https://memory.twilio.com" } ], "x-twilio": { "pathType": "list" }, "get": { "operationId": "ListStores", "summary": "List Memory Stores", "description": "Get a list of memory stores for the Twilio account.", "tags": [ "Store" ], "parameters": [ { "$ref": "#/components/parameters/ControlPlanePageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" } ], "responses": { "200": { "description": "Memory stores retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceList" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateStore", "summary": "Create a Memory Store", "description": "Create a new Memory Store for the Twilio account. Accounts can have multiple memory stores, up to a maximum limit of 15.\nEach memory store will automatically provision other dependent resources as needed, including Conversational Intelligence\ncapabilities.", "tags": [ "Store" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceRequest" } } } }, "responses": { "202": { "description": "Store creation accepted for async processing. Inspect the status URL for progress.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Memory Store creation accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "defaultOutputProperties": [ "id", "uniqueName", "friendlyName" ], "pathType": "instance" }, "get": { "operationId": "FetchStore", "summary": "Retrieve a Memory Store.", "description": "Retrieve the details of a specific Memory Store by its unique ID.", "tags": [ "Store" ], "responses": { "200": { "description": "Memory Store details retrieved successfully", "headers": { "ETag": { "$ref": "#/components/headers/ETag" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Store" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchStore", "parameters": [ { "$ref": "#/components/parameters/IfMatchHeader" } ], "summary": "Update a Memory Store", "description": "Partially update a Memory Store. Only the fields provided in the request body will be updated.", "tags": [ "Store" ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Store. This name is assigned by the developer and can be used in addition to the ID. It is intended to be human-readable and unique within the account.", "pattern": "^[a-zA-Z0-9-]+$", "example": "sandbox-updated" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 128 characters.", "minLength": 1, "maxLength": 128, "example": "Updated service for development and testing" } } } } } }, "responses": { "202": { "description": "Memory Store update request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 512, "example": "Memory Store update request accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteStore", "summary": "Delete a Memory Store", "description": "Deletes the Memory Store and all associated resources including identity resolution settings, trait groups, profiles, traits, observations, and summaries.", "tags": [ "Store" ], "responses": { "202": { "description": "Memory Store deletion request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Memory Store deletion request accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}/IdentityResolutionSettings": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "defaultOutputProperties": [ "identifierConfigs", "matchingRules" ], "pathType": "instance" }, "get": { "operationId": "FetchIdentityResolutionSettings", "summary": "Retrieve Identity Resolution Settings.", "description": "These settings determine how Customer Memory will use identifiers for searching, \nmerging, and resolving profiles. \n> Some settings can only take on their default values and are not yet available to change, but coming soon.", "tags": [ "IdentityResolutionSettings" ], "responses": { "200": { "description": "Identity resolution settings retrieved successfully", "headers": { "ETag": { "$ref": "#/components/headers/ETag" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IdentityResolutionSettings" }, "example": { "identifierConfigs": [ { "idType": "email", "matchingAlgo": "exact", "normalization": "email", "enforceUnique": true }, { "idType": "whatsapp", "matchingAlgo": "exact", "normalization": "trim", "enforceUnique": true }, { "idType": "phone", "matchingAlgo": "exact", "normalization": "phone", "enforceUnique": true } ], "matchingRules": [ "email", "whatsapp", "phone" ], "version": 3 } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "put": { "operationId": "UpdateIdentityResolutionSettings", "parameters": [ { "$ref": "#/components/parameters/IfMatchHeader" } ], "summary": "Update Identity Resolution Settings.", "description": "Update the identity resolution settings for this memory store, which\ndetermine how Customer Memory will use identifiers for searching, \nmerging, and resolving profiles.\n", "tags": [ "IdentityResolutionSettings" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IdentityResolutionSettingsCore" }, "examples": { "Basic Configuration": { "value": { "identifierConfigs": [ { "idType": "email", "matchingAlgo": "exact", "normalization": "email", "enforceUnique": true }, { "idType": "whatsapp", "matchingAlgo": "exact", "normalization": "trim", "enforceUnique": true }, { "idType": "phone", "matchingAlgo": "exact", "normalization": "phone", "enforceUnique": true } ], "matchingRules": [ "email", "whatsapp", "phone" ] } } } } } }, "responses": { "202": { "description": "Identity Resolution Settings accepted for processing.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Identity Resolution Settings accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}/TraitGroups": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "defaultOutputProperties": [ "traitGroups" ], "pathType": "list" }, "get": { "operationId": "ListTraitGroups", "summary": "List Trait Groups", "description": "Returns a list of Trait Groups for this Memory Store, with optional traits information.", "tags": [ "TraitGroup" ], "parameters": [ { "name": "includeTraits", "in": "query", "description": "Whether to include trait definitions in the response", "required": false, "schema": { "type": "boolean", "default": false } }, { "$ref": "#/components/parameters/ControlPlanePageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" } ], "responses": { "200": { "description": "List of TraitGroups retrieved successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "traitGroups": { "type": "array", "maxItems": 50, "items": { "$ref": "#/components/schemas/TraitGroup" } }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "example": { "traitGroups": [ { "id": "mem_store_00000000000000000000000000_trait_group_00000000000000000000000000", "displayName": "Contact Information", "description": "Traits related to contact information.", "traits": { "email": { "dataType": "STRING", "description": "User's email address" }, "dob": { "dataType": "STRING", "description": "User's date of birth" } }, "version": 1 } ], "meta": { "key": "traitGroups", "pageSize": 50 } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateTraitGroup", "summary": "Create a Trait Group", "description": "Creates a Trait Group with declarative trait schemas for this Memory Store.\n", "tags": [ "TraitGroup" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TraitGroupRequest" }, "examples": { "Basic Traits": { "value": { "displayName": "Contact", "description": "Traits related to contact information.", "traits": { "email": { "dataType": "STRING", "description": "User's email address" }, "dob": { "dataType": "STRING", "description": "User's date of birth" } } } }, "All Trait Types": { "value": { "displayName": "mixedTraits", "description": "Demonstrates string, number, boolean, and array traits.", "traits": { "email": { "dataType": "STRING", "description": "User's email address", "validationRule": { "ruleType": "STRING", "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", "minLength": 5, "maxLength": 254 } }, "age": { "dataType": "NUMBER", "description": "User's age in years", "validationRule": { "ruleType": "NUMBER", "min": 0, "max": 150 } }, "isSubscribed": { "dataType": "BOOLEAN", "description": "Whether user is subscribed to newsletter", "validationRule": { "ruleType": "BOOLEAN" } }, "favoriteColors": { "dataType": "ARRAY", "description": "List of user's favorite colors", "validationRule": { "ruleType": "ARRAY", "minItems": 1, "maxItems": 10 } } } } }, "With Validation Rules": { "value": { "displayName": "validatedTraits", "description": "Demonstrates traits that include validation metadata.", "traits": { "email": { "dataType": "STRING", "description": "User's email address", "validationRule": { "ruleType": "STRING", "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", "minLength": 5, "maxLength": 254 } }, "age": { "dataType": "NUMBER", "description": "User's age in years", "validationRule": { "ruleType": "NUMBER", "min": 0, "max": 150 } }, "isSubscribed": { "dataType": "BOOLEAN", "description": "Whether user is subscribed to newsletter", "validationRule": { "ruleType": "BOOLEAN" } }, "favoriteColors": { "dataType": "ARRAY", "description": "List of user's favorite colors", "validationRule": { "ruleType": "ARRAY", "minItems": 1, "maxItems": 10 } } } } } } } } }, "responses": { "202": { "description": "TraitGroup creation request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "TraitGroup creation request accepted." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}/TraitGroups/{traitGroupName}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/traitGroupName" } ], "x-twilio": { "defaultOutputProperties": [ "traitGroup", "meta" ], "pathType": "instance" }, "get": { "operationId": "FetchTraitGroup", "summary": "Retrieve a Trait Group", "description": "Retrieve a specific Trait Group by its unique name for this Memory Store, with optional traits information.", "tags": [ "TraitGroup" ], "parameters": [ { "name": "includeTraits", "in": "query", "description": "Whether to include trait definitions in the response", "required": false, "schema": { "type": "boolean", "default": true } }, { "$ref": "#/components/parameters/ControlPlanePageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" } ], "responses": { "200": { "description": "TraitGroup retrieved successfully", "headers": { "ETag": { "$ref": "#/components/headers/ETag" } }, "content": { "application/json": { "schema": { "type": "object", "properties": { "traitGroup": { "$ref": "#/components/schemas/TraitGroup" }, "meta": { "$ref": "#/components/schemas/Meta" } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchTraitGroup", "parameters": [ { "$ref": "#/components/parameters/IfMatchHeader" } ], "summary": "Update Trait Group", "description": "Partially updates a Trait Group. Only the fields provided in the request body will be updated. For traits:\nexisting traits with matching keys will be updated, new keys will be added. To remove a trait, set its dataType to\nan empty string (\"\") - this serves as an explicit deletion marker.\n", "tags": [ "TraitGroup" ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "description": { "type": "string", "maxLength": 1024, "description": "Updated description of the Trait Group", "example": "Updated Trait Group contains traits related to contact information." }, "traits": { "type": "object", "description": "Map of traits to add, update, or remove in this Trait Group, where the key is the trait name. - To update/add a trait: provide the complete TraitDefinition object - To remove a trait: set dataType to an empty string (\"\")", "additionalProperties": { "$ref": "#/components/schemas/TraitDefinition" }, "maxProperties": 95 } } }, "examples": { "Update Traits": { "value": { "description": "Update loyalty-related traits.", "traits": { "phone": { "dataType": "STRING", "description": "User's phone number" }, "loyaltyPoints": { "dataType": "NUMBER", "description": "User's accumulated loyalty points" } } } }, "Add and Delete Traits": { "value": { "description": "Demonstrates adding and removing traits in one request.", "traits": { "addThisTrait": { "dataType": "STRING", "description": "Example of trait definition being added" }, "removeThisTrait": { "dataType": "" } } } }, "With Validation Rules": { "value": { "description": "Updates traits while enforcing validation rules.", "traits": { "phone": { "dataType": "STRING", "description": "User's phone number", "validationRule": { "ruleType": "STRING", "pattern": "^\\+?[1-9]\\d{1,16}$", "minLength": 10, "maxLength": 17 } }, "loyaltyPoints": { "dataType": "NUMBER", "description": "User's accumulated loyalty points", "validationRule": { "ruleType": "NUMBER", "min": 0, "max": 1000000 } }, "tags": { "dataType": "ARRAY", "description": "User tags for segmentation", "validationRule": { "ruleType": "ARRAY", "minItems": 0, "maxItems": 20 } } } } } } } } }, "responses": { "202": { "description": "TraitGroup update request accepted for processing.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "TraitGroup update request accepted." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteTraitGroup", "summary": "Delete a Trait Group", "description": "Deletes the Trait Group and all associated Traits from the Memory Store.\n", "tags": [ "TraitGroup" ], "responses": { "202": { "description": "TraitGroup deletion request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "TraitGroup deletion request accepted." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}/DataMappings": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "pathType": "list" }, "get": { "operationId": "ListDataMappings", "summary": "List Data Mappings", "description": "Get a list of data mappings configured for this Memory Store.", "tags": [ "DataMapping" ], "parameters": [ { "$ref": "#/components/parameters/ControlPlanePageSize" }, { "$ref": "#/components/parameters/PageToken" }, { "$ref": "#/components/parameters/OrderBy" }, { "name": "type", "in": "query", "description": "Filter data mappings by type.", "required": false, "schema": { "$ref": "#/components/schemas/DataMappingType" } } ], "responses": { "200": { "description": "DataMappings retrieved successfully.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataMappingList" }, "example": { "dataMappings": [ { "id": "mem_datamapping_00000000000000000000000000", "createAt": "2024-01-01T00:00:00Z", "updateAt": "2024-01-01T00:00:00Z", "version": 1, "displayName": "crm-contacts", "description": "Syncs customer data from CRM dataset to profile traits", "isEnabled": true, "mappingTo": { "type": "TRAITS", "mappings": [ { "fieldName": "primary_email", "traitGroup": "Contact", "traitName": "email" } ] }, "mappingFrom": { "type": "DATASET", "datasetId": "tdi_dataset_00000000000000000000000000" } } ], "meta": { "key": "dataMappings", "pageSize": 50 } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateDataMapping", "summary": "Create a Data Mapping", "description": "Create a new data mapping to connect an external data source to this Memory Store.\nFor DATASET types, validates that all mapped Trait Groups and traits exist\nand that dataset field data types match their respective mapped trait data types.", "tags": [ "DataMapping" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDataMappingInput" } } } }, "responses": { "202": { "description": "Data mapping creation request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Data mapping creation request accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Stores/{storeId}/DataMappings/{dataMappingId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/DataMappingId" } ], "x-twilio": { "pathType": "instance" }, "get": { "operationId": "FetchDataMapping", "summary": "Retrieve a Data Mapping", "description": "Retrieve the details of a specific data mapping by its unique ID.", "tags": [ "DataMapping" ], "responses": { "200": { "description": "Data mapping details retrieved successfully.", "headers": { "ETag": { "$ref": "#/components/headers/ETag" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataMapping" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchDataMapping", "parameters": [ { "$ref": "#/components/parameters/IfMatchHeader" } ], "summary": "Update a Data Mapping", "description": "Partially update a data mapping. Only the fields provided in the request body will be updated,\nincluding replacing the entire contents of the `mappings` array.\n\nFor DATASET types, validates that all mapped Trait Groups and traits exist\nand that dataset field data types match their respective mapped trait data types.", "tags": [ "DataMapping" ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataMappingCore" } } } }, "responses": { "202": { "description": "Data mapping update request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Data mapping update request accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteDataMapping", "summary": "Delete a Data Mapping", "description": "Delete a data mapping from the Memory Store. This action cannot be undone.", "tags": [ "DataMapping" ], "responses": { "202": { "description": "Data mapping deletion request accepted.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Location": { "$ref": "#/components/headers/OperationLocation" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "message": { "type": "string", "maxLength": 512, "example": "Data mapping deletion request accepted for processing." }, "statusUrl": { "type": "string", "description": "URI to check operation status.", "maxLength": 512 } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/{profileId}/ConversationSummaries/{summaryId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ProfileId" }, { "$ref": "#/components/parameters/SummaryId" } ], "x-twilio": { "pathType": "instance" }, "get": { "operationId": "FetchProfileConversationSummary", "summary": "Retrieve Conversation Summary", "description": "Retrieve a specific conversation summary by its ID for the given profile.", "tags": [ "ConversationSummaries" ], "responses": { "200": { "description": "Conversation summary retrieved successfully.", "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummaryInfo" }, "examples": { "Summary Type": { "value": { "id": "mem_summary_00000000000000000000000001", "conversationId": "conv_conversation_00000000000000000000000000", "content": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation.", "source": "conversational_intelligence", "occurredAt": "2025-01-15T14:30:00Z", "createdAt": "2025-01-15T10:30:45Z", "updatedAt": "2025-01-15T10:30:45Z" } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "PatchProfileConversationSummary", "summary": "Update Conversation Summary", "description": "Partially update a specific conversation summary by its ID. Only provided fields will be updated. The updated timestamp will be automatically set. This allows for selective updates without needing to provide all fields.", "tags": [ "ConversationSummaries" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummaryCorePatch" }, "examples": { "Update content only": { "value": { "content": "Updated: Customer discussed billing concerns and expressed complete satisfaction with the comprehensive resolution provided during this conversation." } }, "Update source and occurredAt": { "value": { "source": "summary_followup", "occurredAt": "2025-01-15T16:30:00Z" } } } } } }, "responses": { "202": { "description": "Conversation summary update accepted and is being processed.", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 255, "example": "Conversation summary update accepted" } }, "required": [ "message" ] } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "DeleteProfileConversationSummary", "summary": "Delete Conversation Summary", "description": "Delete a specific conversation summary by its ID. This action is irreversible.", "tags": [ "ConversationSummaries" ], "responses": { "202": { "description": "Conversation summary deletion accepted and is being processed.", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 255, "example": "Conversation summary deletion accepted" } }, "required": [ "message" ] } } } }, "308": { "$ref": "#/components/responses/PermanentRedirect" }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/Imports": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" } ], "x-twilio": { "defaultOutputProperties": [ "imports" ], "pathType": "list" }, "get": { "operationId": "ListProfileImportsV2", "summary": "Get a list of imports", "description": "Retrieve a list of profile import task IDs that have been submitted for this service. Use these IDs to query individual import status details.", "tags": [ "Profile" ], "responses": { "200": { "description": "A list of import ids.", "content": { "application/json": { "schema": { "type": "object", "properties": { "imports": { "type": "array", "maxItems": 100, "items": { "$ref": "#/components/schemas/ImportID" } } }, "maxProperties": 1 } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "CreateProfilesImportV2", "summary": "Import Profiles", "description": "Initiate a profile import by requesting a pre-signed upload URL and an associated `importId`. Upload your CSV to the returned URL (single PUT). Query the import status endpoint to track processing progress. This endpoint creates the import task and allocates resources for subsequent ingestion.", "tags": [ "Profile" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "filename": { "type": "string", "description": "The name of the file to generate a presigned URL", "maxLength": 255 }, "fileSize": { "type": "integer", "description": "The size of the file in bytes (1 byte to 100 MiB)", "minimum": 1, "maximum": 104857600 }, "columnMappings": { "type": "array", "description": "Mappings of CSV header columns to traits' fields", "maxItems": 100, "minItems": 2, "items": { "$ref": "#/components/schemas/ColumnMappingItem" } } }, "required": [ "filename", "fileSize", "columnMappings" ], "maxProperties": 3 }, "example": { "filename": "profiles_import.csv", "fileSize": 204800, "columnMappings": [ { "columnName": "first_name", "traitGroup": "Contact", "traitName": "firstName" }, { "columnName": "last_name", "traitGroup": "Contact", "traitName": "lastName" }, { "columnName": "email_address", "traitGroup": "Contact", "traitName": "email" } ] } } } }, "responses": { "201": { "description": "Import task created.", "content": { "application/json": { "schema": { "type": "object", "required": [ "importId", "url" ], "properties": { "importId": { "type": "string", "description": "ID of the import task.", "example": "mem_import_00000000000000000000000000", "maxLength": 39 }, "url": { "type": "string", "description": "Pre-signed URL to upload the CSV via a single PUT request.", "example": "https://unified-profiles-csv-upload-stage-us-east-1.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496", "maxLength": 2048 } }, "maxProperties": 2 }, "examples": { "Created": { "summary": "Example created import", "value": { "importId": "mem_import_00000000000000000000000000", "url": "https://unified-profiles-csv-upload-stage-us-east-1.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIA..." } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/Stores/{storeId}/Profiles/Imports/{importId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "$ref": "#/components/parameters/StoreId" }, { "$ref": "#/components/parameters/ImportId" } ], "x-twilio": { "defaultOutputProperties": [ "status", "filename", "createdAt" ], "pathType": "instance" }, "get": { "operationId": "FetchProfileImportV2", "summary": "Get Import Status", "description": "Retrieve the current processing status of a previously submitted bulk import task. Query this endpoint using the `importId` returned from the upload URL request until a terminal state (COMPLETED or FAILED) is reached.", "tags": [ "Profile" ], "responses": { "200": { "description": "Import Status.", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "filename", "createdAt" ], "properties": { "status": { "type": "string", "enum": [ "PENDING", "PROCESSING", "COMPLETED", "FAILED" ], "description": "Current processing status of the import task" }, "filename": { "type": "string", "description": "Original filename of the uploaded CSV", "maxLength": 255, "example": "profiles_import.csv" }, "createdAt": { "type": "string", "format": "date-time", "description": "Timestamp when the import was created", "example": "2025-11-14T20:29:21Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "Timestamp when the import was last updated", "example": "2025-11-14T20:30:15Z" }, "fileSize": { "type": "integer", "description": "Size of the uploaded file in bytes (1 byte to 100 MiB)", "minimum": 1, "maximum": 104857600, "example": 204800 }, "columnMappings": { "type": "array", "description": "Mappings of CSV header columns to traits' fields", "maxItems": 100, "minItems": 2, "items": { "$ref": "#/components/schemas/ColumnMappingItem" } }, "summary": { "type": "object", "description": "Summary statistics of the import operation", "properties": { "errors": { "type": "integer", "description": "Total count of errors encountered during import", "example": 10 }, "warnings": { "type": "integer", "description": "Total count of warnings encountered during import", "example": 5 } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/v1/ControlPlane/Operations/{operationId}": { "servers": [ { "url": "https://memory.twilio.com" } ], "parameters": [ { "name": "operationId", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 512 }, "description": "The operation ID returned from a write endpoint." } ], "x-twilio": { "pathType": "instance" }, "get": { "operationId": "FetchOperation", "summary": "Get Operation Status", "description": "Retrieve the status and result of an asynchronous operation.", "tags": [ "Operations" ], "responses": { "200": { "description": "Operation status retrieved successfully.", "headers": { "Operation-Id": { "$ref": "#/components/headers/OperationId" }, "Retry-After": { "$ref": "#/components/headers/OperationRetryAfter" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OperationStatus" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/TooManyRequests" }, "500": { "$ref": "#/components/responses/InternalServerError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } } }, "components": { "securitySchemes": { "basic_apikey_or_accountsid": { "scheme": "basic", "type": "http", "description": "This API uses [basic authentication](https://www.twilio.com/docs/glossary/what-is-basic-authentication). Use an [API key](https://www.twilio.com/docs/iam/api-keys) as the username and the API key secret as the password. You can also use your account SID and auth token, but limit their use to local testing." }, "accountSid_authToken": { "scheme": "basic", "type": "http" } }, "schemas": { "TwilioError": { "type": "object", "additionalProperties": false, "maxProperties": 10, "description": "A generic error object communicating client and server side API errors.", "properties": { "code": { "type": "integer", "minimum": 100, "maximum": 99999, "description": "The Twilio error code.", "format": "int32" }, "message": { "type": "string", "maxLength": 1024, "description": "A human readable message describing the error." }, "more_info": { "type": "string", "description": "A URL to a [Twilio error directory](https://www.twilio.com/docs/api/errors) page with more information about the error code." }, "status": { "type": "integer", "minimum": 100, "maximum": 599, "description": "The HTTP status code for the error.", "format": "int32" } }, "example": { "code": 21614, "message": "The address specified in the request is not a valid phone number.", "more_info": "https://www.twilio.com/docs/api/errors/21614", "status": 400 } }, "IdentityProfileID": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000", "description": "The canonical profile ID." }, "Identifier": { "type": "object", "additionalProperties": false, "required": [ "idType", "value" ], "description": "Represents a single identifier value paired with its `idType`. Write operations obey limits, uniqueness, and normalization rules configured via identifier settings.", "properties": { "idType": { "type": "string", "description": "Identifier type as configured in the service's Identity Resolution Settings.", "minLength": 2, "maxLength": 30, "example": "phone" }, "value": { "type": "string", "description": "Raw value captured for the identifier. The service may normalize this value according to the `normalization` rule defined in the identifier settings before storage or matching (for example E.164 formatting for phone numbers).", "maxLength": 255, "example": "+13175556789" } } }, "IdentifierSet": { "type": "object", "additionalProperties": false, "required": [ "idType", "values" ], "description": "All the known values for a specific identifier type. These are normalized according to the corresponding identifier settings and ordered chronologically. It includes any promoted values from traits and explicitly set values from API calls, both historical and current.", "properties": { "idType": { "type": "string", "description": "Identifier type defined in Identity Resolution Settings.", "minLength": 2, "maxLength": 30, "example": "email" }, "values": { "type": "array", "maxItems": 100, "description": "Server managed collection of stored values for the identifier type. Identifier values are normalized according to the corresponding identifier settings and ordered chronologically.", "items": { "type": "string", "maxLength": 255 }, "example": [ "primary@example.com", "backup@example.com" ] } } }, "IdentifierUpdate": { "type": "object", "additionalProperties": false, "required": [ "idType", "oldValue", "newValue" ], "properties": { "idType": { "type": "string", "description": "The identifier type to update (e.g., email, phone).", "minLength": 2, "maxLength": 30, "example": "phone" }, "oldValue": { "type": "string", "description": "Existing stored value to replace.", "maxLength": 255, "example": "+13175556789" }, "newValue": { "type": "string", "description": "New value to store for the identifier. Normalization rules from the corresponding identifier settings apply.", "maxLength": 255, "example": "+13175556798" } } }, "ObservationID": { "type": "string", "description": "A unique identifier for the observation using Twilio Type ID (TTID) format.", "pattern": "^mem_observation_[0-7][0-9a-z]{25}$", "example": "mem_observation_00000000000000000000000000" }, "SummaryID": { "type": "string", "description": "A unique identifier for the summary using Twilio Type ID (TTID) format.", "pattern": "^mem_summary_[0-7][0-9a-z]{25}$", "example": "mem_summary_00000000000000000000000000" }, "ConversationID": { "type": "string", "description": "A unique identifier for the conversation using Twilio Type ID (TTID) format.", "pattern": "^conv_conversation_[0-7][0-9a-z]{25}$", "example": "conv_conversation_00000000000000000000000000" }, "ObservationCore": { "type": "object", "description": "Core mutable properties for creating observation objects.", "properties": { "content": { "type": "string", "description": "The main content of the observation.", "minLength": 1, "maxLength": 4096, "example": "Customer expressed satisfaction with recent product update during support call." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation originally occurred.", "example": "2025-01-15T10:15:30Z" }, "source": { "type": "string", "description": "The source system that generated this observation. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "minLength": 1, "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversational-intelligence" }, "conversationIds": { "type": "array", "description": "Array of conversation IDs associated with this observation.", "maxItems": 10, "items": { "$ref": "#/components/schemas/ConversationID" } } }, "required": [ "content", "source", "occurredAt" ] }, "ObservationInfo": { "type": "object", "description": "A transient and mutable observation memory associated with a profile.", "properties": { "content": { "type": "string", "description": "The main content of the observation.", "minLength": 1, "maxLength": 4096, "example": "Customer expressed satisfaction with recent product update during support call." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation originally occurred.", "example": "2025-01-15T10:15:30Z" }, "source": { "type": "string", "description": "The source system that generated this observation. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "minLength": 1, "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversational-intelligence" }, "conversationIds": { "type": "array", "description": "Array of conversation IDs associated with this observation.", "maxItems": 10, "items": { "$ref": "#/components/schemas/ConversationID" } }, "id": { "$ref": "#/components/schemas/ObservationID" }, "createdAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation was created.", "example": "2025-01-15T10:30:45Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation was last updated.", "example": "2025-01-15T10:30:45Z" } }, "required": [ "createdAt", "occurredAt", "content", "source", "updatedAt", "id" ] }, "SummaryCore": { "type": "object", "description": "Core mutable properties for creating summary objects.", "properties": { "source": { "type": "string", "description": "The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversations" }, "content": { "type": "string", "description": "The main content of the summary.", "minLength": 1, "maxLength": 4096, "example": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was originally created.", "example": "2025-01-15T10:15:30Z" }, "conversationId": { "$ref": "#/components/schemas/ConversationID" } }, "required": [ "content", "conversationId", "occurredAt" ] }, "SummaryInfo": { "type": "object", "description": "A summary memory derived from conversations.", "properties": { "source": { "type": "string", "description": "The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversations" }, "content": { "type": "string", "description": "The main content of the summary.", "minLength": 1, "maxLength": 4096, "example": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was originally created.", "example": "2025-01-15T10:15:30Z" }, "conversationId": { "$ref": "#/components/schemas/ConversationID" }, "id": { "$ref": "#/components/schemas/SummaryID" }, "createdAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was created.", "example": "2025-01-15T10:30:45Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was last updated.", "example": "2025-01-15T10:30:45Z" } }, "required": [ "createdAt", "conversationId", "occurredAt", "content", "updatedAt", "id" ] }, "Participant": { "type": "object", "required": [ "id", "name", "address", "channel" ], "properties": { "id": { "type": "string", "description": "Participant identifier.", "pattern": "^conv_participant_[0-7][0-9a-z]{25}$", "example": "conv_participant_00000000000000000000000000" }, "name": { "type": "string", "maxLength": 256, "description": "Participant display name" }, "type": { "$ref": "#/components/schemas/ParticipantType", "description": "Type of Participant in the Conversation" }, "profileId": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000", "description": "The canonical profile ID." }, "address": { "type": "string", "description": "Address of the Participant (e.g., phone number, email address)", "example": "+12025551234", "maxLength": 254 }, "channel": { "type": "string", "description": "The channel on which the message originated", "enum": [ "VOICE", "SMS", "RCS", "EMAIL", "WHATSAPP", "CHAT", "API", "SYSTEM" ] } } }, "ParticipantType": { "type": "string", "description": "Type of Participant in the Conversation", "enum": [ "HUMAN_AGENT", "CUSTOMER", "AI_AGENT", "AGENT", "UNKNOWN" ] }, "CommunicationContent": { "type": "object", "description": "Content of a communication.", "properties": { "text": { "type": "string", "description": "Primary text content (optional).", "maxLength": 8388608, "example": "Hello, I need help with my account" } } }, "Communication": { "type": "object", "description": "A single communication within a conversation across channels including SMS, Voice, Email, etc. Contains fields that are relevant to an agent to maintain session memory.", "properties": { "id": { "type": "string", "description": "Unique communication identifier.", "pattern": "^conv_communication_[0-7][0-9a-z]{25}$", "example": "conv_communication_00000000000000000000000000" }, "channelId": { "type": "string", "maxLength": 256, "description": "Channel-specific ID (optional).", "example": "SM00000000000000000000000000000000" }, "content": { "$ref": "#/components/schemas/CommunicationContent" }, "createdAt": { "type": "string", "format": "date-time", "description": "When communication was created.", "example": "2025-01-15T10:15:30Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When communication was last updated.", "example": "2025-01-15T10:20:30Z" }, "author": { "$ref": "#/components/schemas/Participant" }, "recipients": { "type": "array", "maxItems": 100, "description": "Communication recipients", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Participant identifier.", "pattern": "^conv_participant_[0-7][0-9a-z]{25}$", "example": "conv_participant_00000000000000000000000000" }, "name": { "type": "string", "maxLength": 256, "description": "Participant display name" }, "type": { "$ref": "#/components/schemas/ParticipantType", "description": "Type of Participant in the Conversation" }, "profileId": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000", "description": "The canonical profile ID." }, "address": { "type": "string", "description": "Address of the Participant (e.g., phone number, email address)", "example": "+12025551234", "maxLength": 254 }, "channel": { "type": "string", "description": "The channel on which the message originated", "enum": [ "VOICE", "SMS", "RCS", "EMAIL", "WHATSAPP", "CHAT", "API", "SYSTEM" ] }, "deliveryStatus": { "type": "string", "description": "Delivery status of the Communication to this recipient", "enum": [ "INITIATED", "IN_PROGRESS", "DELIVERED", "COMPLETED", "FAILED" ] } }, "required": [ "channel", "address", "name", "id" ] } } }, "required": [ "id", "author", "content", "recipients" ] }, "MemoryRetrievalRequest": { "type": "object", "description": "Request payload for retrieving profile memories with advanced filtering and semantic search.", "properties": { "conversationId": { "$ref": "#/components/schemas/ConversationID", "description": "Required for session memory and query expansion." }, "query": { "type": "string", "description": "Hybrid search query for finding relevant memories. Omit to use query expansion to generate query from previous 10 communications in conversation.", "minLength": 0, "maxLength": 1024, "example": "customer satisfaction feedback" }, "beginDate": { "type": "string", "format": "date-time", "description": "Start date for filtering memories (inclusive).", "example": "2025-01-01T00:00:00Z" }, "endDate": { "type": "string", "format": "date-time", "description": "End date for filtering memories (exclusive).", "example": "2025-01-31T23:59:59Z" }, "communicationsLimit": { "type": "integer", "description": "Maximum number of conversational session memories to return. If omitted or set to 0, no session memories will be fetched.", "minimum": 0, "maximum": 100, "default": 0, "example": 10 }, "observationsLimit": { "type": "integer", "description": "Maximum number of observation memories to return. If omitted, defaults to 20. If set to 0, no observation memories will be fetched.", "minimum": 0, "maximum": 100, "default": 20, "example": 20 }, "summariesLimit": { "type": "integer", "description": "Maximum number of summary memories to return. If omitted, defaults to 5. If set to 0, no summary memories will be fetched.", "minimum": 0, "maximum": 100, "default": 5, "example": 5 }, "relevanceThreshold": { "type": "number", "format": "double", "description": "Minimum relevance score threshold for observations and summaries to be returned. Only memories with a relevance score greater than or equal to this threshold will be included in the response. This threshold only applies when results are ranked by relevance. When results are returned in most-recent order, this field has no effect.", "minimum": 0, "maximum": 1, "default": 0, "example": 0.5 } } }, "MemoryRetrievalResponse": { "type": "object", "description": "Response containing retrieved profile memories organized by type.", "properties": { "observations": { "type": "array", "description": "Array of observation memories.", "maxItems": 100, "items": { "$ref": "#/components/schemas/RecallObservationInfo" } }, "summaries": { "type": "array", "description": "Array of summary memories derived from observations at the end of conversations.", "maxItems": 100, "items": { "$ref": "#/components/schemas/RecallSummaryInfo" } }, "communications": { "type": "array", "description": "Array of recent communication context.", "minItems": 0, "maxItems": 100, "items": { "$ref": "#/components/schemas/Communication" } }, "meta": { "type": "object", "description": "Metadata about the retrieval operation.", "properties": { "queryTime": { "type": "integer", "description": "Query execution time in milliseconds.", "minimum": 0, "maximum": 600000, "example": 156 } }, "required": [ "queryTime" ] } }, "required": [ "observations", "summaries", "communications", "meta" ] }, "ObservationsMeta": { "type": "object", "properties": { "key": { "type": "string", "nullable": false, "maxLength": 64, "description": "The key of the list property contains the actual data items.\nThis enables programmatic iteration over paginated results.\n", "example": "observations" }, "pageSize": { "type": "integer", "minimum": 1, "maximum": 50, "default": 50 }, "nextToken": { "type": "string", "minLength": 1, "maxLength": 4096, "example": "eyJlYXN0ZXIiOiJlZ2cifQ" }, "previousToken": { "type": "string", "minLength": 1, "maxLength": 4096, "example": "eyJlYXN0ZXIiOiJlZ2cifQ" } } }, "CreateObservationsRequest": { "type": "object", "description": "Request payload for creating one or more observations. Supports creation of up to 10 observations.", "properties": { "observations": { "type": "array", "description": "Array of observations to create in a single batch operation.", "minItems": 1, "maxItems": 10, "items": { "$ref": "#/components/schemas/ObservationCore" } } }, "required": [ "observations" ], "additionalProperties": false }, "ObservationCreatedResponse": { "type": "object", "description": "Response for batch observation creation.", "properties": { "message": { "type": "string", "description": "Confirmation message for the operation.", "minLength": 1, "maxLength": 255, "example": "Observations creation accepted" } }, "required": [ "message" ] }, "CreateSummariesRequest": { "type": "object", "description": "Request payload for creating one or more conversation summaries. Supports creation of up to 10 summaries.", "properties": { "summaries": { "type": "array", "description": "Array of summaries to create in a single batch operation.", "minItems": 1, "maxItems": 10, "items": { "$ref": "#/components/schemas/SummaryCore" } } }, "required": [ "summaries" ], "additionalProperties": false }, "SummariesCreatedResponse": { "type": "object", "description": "Response for batch summary creation.", "properties": { "message": { "type": "string", "description": "Confirmation message for the operation.", "minLength": 1, "maxLength": 255, "example": "Summaries creation accepted" } }, "required": [ "message" ] }, "ProfilesMeta": { "type": "object", "maxProperties": 4, "properties": { "key": { "type": "string", "nullable": false, "maxLength": 64, "description": "The key of the list property contains the actual data items.\nThis enables programmatic iteration over paginated results.\n", "example": "profiles" }, "pageSize": { "type": "integer", "default": 50 }, "nextToken": { "type": "string", "example": "eyJlYXN0ZXIiOiJlZ2cifQ", "maxLength": 4096 }, "previousToken": { "type": "string", "example": "eyJlYXN0ZXIiOiJlZ2cifQ", "maxLength": 4096 } } }, "ProfileID": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000", "description": "The canonical profile ID." }, "TraitValue": { "description": "The value of a trait. Can be a string, integer, boolean, or an array of these types (arrays cannot contain nested arrays)." }, "FullTrait": { "type": "object", "title": "Full Trait", "description": "Full metadata about a trait, beyond the name value pair.", "additionalProperties": false, "maxProperties": 4, "required": [ "name", "traitGroup" ], "properties": { "name": { "type": "string", "description": "The name of the trait.", "example": "firstName", "maxLength": 64 }, "value": { "$ref": "#/components/schemas/TraitValue" }, "traitGroup": { "type": "string", "description": "The trait group name to which this trait belongs.", "example": "Contact", "maxLength": 64 }, "timestamp": { "type": "string", "format": "date-time", "description": "The time the trait was created or last updated.", "example": "2025-01-01T12:00:00Z" } } }, "TraitGroups": { "type": "object", "description": "Multiple trait groups.", "maxProperties": 50, "example": { "Contact": { "email": "Alyssa.Mock@example.com", "phone": "+13175551234", "lastName": "Mock", "firstName": "Alyssa", "street": "123 Main St", "city": "San Francisco", "state": "CA", "postalCode": "94107", "country": "US" } }, "additionalProperties": { "x-additionalPropertiesName": "TraitGroupPropertyName", "type": "object", "description": "Multiple traits.", "maxProperties": 99, "additionalProperties": { "description": "The value of a trait. Can be a string, integer, boolean, or an array of these types (arrays cannot contain nested arrays)." } } }, "ProfileData": { "type": "object", "description": "Data for creating or updating a profile, including traits.", "additionalProperties": false, "properties": { "traits": { "$ref": "#/components/schemas/TraitGroups" } } }, "Profile": { "type": "object", "additionalProperties": false, "properties": { "id": { "$ref": "#/components/schemas/ProfileID" }, "createdAt": { "type": "string", "format": "date-time", "description": "The time the profile was created.", "example": "2025-01-01T12:00:00Z" }, "traits": { "$ref": "#/components/schemas/TraitGroups" } } }, "ProfilePatch": { "type": "object", "additionalProperties": false, "properties": { "traits": { "$ref": "#/components/schemas/TraitGroups" } } }, "ImportID": { "type": "string", "pattern": "^mem_import_[0-7][0-9a-z]{25}$", "example": "mem_import_00000000000000000000000000", "description": "The import operation ID." }, "ColumnMappingItem": { "type": "object", "additionalProperties": false, "description": "Mapping of a CSV header column to the trait fields", "required": [ "columnName", "traitGroup", "traitName" ], "properties": { "columnName": { "type": "string", "description": "The name of the column in the CSV header", "example": "first_name", "maxLength": 64 }, "traitGroup": { "type": "string", "description": "The trait group to which this trait belongs", "example": "Contact", "maxLength": 64 }, "traitName": { "type": "string", "description": "The name of the trait in the trait group", "example": "firstName", "maxLength": 64 } }, "maxProperties": 3 }, "CommunicationLifecycleEvent": { "type": "object", "description": "A communication lifecycle event associated with a profile.", "properties": { "timestamp": { "type": "string", "format": "date-time", "description": "The time the event occurred in ISO8601 format with millisecond resolution. Defaults to received time if not provided.", "example": "2025-01-01T12:00:00.000Z" }, "lifecycle": { "type": "string", "maxLength": 50, "description": "The lifecycle event type of the communication.", "example": "COMMUNICATION_SENT" }, "conversationId": { "type": "string", "pattern": "^conv_conversation_[0-7][0-9a-z]{25}$", "description": "The unique identifier for the conversation.", "example": "conv_conversation_00000000000000000000000000" }, "communicationId": { "type": "string", "pattern": "^comms_communication_[0-7][0-9a-z]{25}$", "description": "The unique identifier for the communication.", "example": "comms_communication_00000000000000000000000000" }, "communicationType": { "type": "string", "maxLength": 20, "description": "The communication channel type.", "example": "SMS" }, "communicationStatus": { "type": "string", "maxLength": 20, "description": "The lifecycle status of the communication.", "example": "SENT" }, "direction": { "type": "string", "enum": [ "INBOUND", "OUTBOUND" ], "description": "The direction of the communication.", "example": "OUTBOUND" }, "sender": { "type": "object", "properties": { "address": { "type": "string", "maxLength": 320, "description": "The sender's address. Must be a valid address matching the channel type such as E.164 format for phone numbers.", "example": "+12345556789" }, "participantId": { "type": "string", "description": "The unique identifier for the sender participant.", "pattern": "^comms_participant_[0-7][0-9a-z]{25}$", "example": "comms_participant_00000000000000000000000000" } }, "required": [ "address", "participantId" ] }, "recipient": { "type": "object", "properties": { "address": { "type": "string", "maxLength": 320, "description": "The recipient's address. Must be a valid address matching the channel type such as E.164 format for phone numbers.", "example": "+13175557890" }, "participantId": { "type": "string", "description": "The unique identifier for the recipient participant.", "pattern": "^comms_participant_[0-7][0-9a-z]{25}$", "example": "comms_participant_00000000000000000000000000" } }, "required": [ "address", "participantId" ] }, "errorCode": { "type": "string", "maxLength": 10, "description": "Error code for FAILED communication status.", "example": "30001" }, "errorMessage": { "type": "string", "maxLength": 512, "description": "Error message for FAILED communication status.", "example": "phone number is invalid" } }, "required": [ "timestamp", "communicationType", "conversationId", "lifecycle" ] }, "ProfileEventRequest": { "type": "object", "description": "Request body for adding events to a specific profile. This request can contain multiple events.", "properties": { "type": { "type": "string", "enum": [ "twilio-communication-event", "twilio-comms-lifecycle" ], "description": "The type of event being sent.", "example": "twilio-comms-lifecycle" }, "events": { "type": "array", "maxItems": 1000, "items": { "oneOf": [ { "$ref": "#/components/schemas/CommunicationLifecycleEvent" } ] } } }, "required": [ "type", "events" ] }, "StoreBase": { "type": "object", "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Store. This name is assigned by the developer and can be used in addition to the ID. It is intended to be human-readable and unique within the account.", "pattern": "^[a-zA-Z0-9-]+$", "example": "sandbox" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 128 characters.", "minLength": 1, "maxLength": 128, "example": "A testing ground for development, training, and experimentation without affecting live user data" } }, "required": [ "displayName" ] }, "ServiceRequest": { "type": "object", "additionalProperties": false, "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Store. This name is assigned by the developer and can be used in addition to the ID. It is intended to be human-readable and unique within the account.", "pattern": "^[a-zA-Z0-9-]+$", "example": "sandbox" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 128 characters.", "minLength": 1, "maxLength": 128, "example": "A testing ground for development, training, and experimentation without affecting live user data" } }, "required": [ "displayName" ] }, "Store": { "type": "object", "additionalProperties": false, "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Store. This name is assigned by the developer and can be used in addition to the ID. It is intended to be human-readable and unique within the account.", "pattern": "^[a-zA-Z0-9-]+$", "example": "sandbox" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 128 characters.", "minLength": 1, "maxLength": 128, "example": "A testing ground for development, training, and experimentation without affecting live user data" }, "id": { "type": "string", "description": "The unique identifier for the Memory Store", "pattern": "^mem_(store|service)_[0-7][0-9a-z]{25}$", "example": "mem_store_00000000000000000000000000" }, "status": { "type": "string", "description": "The current status of the Memory Store. A store begins in the QUEUED state as it is scheduled for processing. It then moves to PROVISIONING at the beginning of processing. It transitions to ACTIVE once all dependent resources are provisioned, including Conversational Intelligence capabilities. If there is an issue provisioning resources, the store will move to the FAILED state.", "enum": [ "QUEUED", "PROVISIONING", "ACTIVE", "FAILED" ], "example": "ACTIVE" }, "intelligenceServiceId": { "type": "string", "maxLength": 64, "description": "The ID of the associated intelligence service that was provisioned for memory extraction.", "example": "intelligence_service_00000000000000000000000000", "nullable": true }, "version": { "type": "integer", "minimum": 1, "description": "The current version number of the Memory Store. Incremented on each successful update.", "example": 3 } }, "required": [ "intelligenceServiceId", "displayName", "version", "status", "id" ] }, "ServiceList": { "type": "object", "additionalProperties": false, "properties": { "stores": { "type": "array", "maxItems": 100, "items": { "type": "string", "pattern": "^mem_(store|service)_[0-7][0-9a-z]{25}$" }, "description": "List of Memory Store IDs associated with the Twilio account.", "example": [ "mem_store_0123456789abcdefghijklmnop", "mem_store_1123456789abcdefghijklmnop", "mem_store_2123456789abcdefghijklmnop", "mem_store_3123456789abcdefghijklmnop" ] }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "IdentityResolutionSettingsCore": { "type": "object", "description": "Identity Resolution settings help determine if a new profile should be created,\nor if the incoming conversation should be added to an existing profile. These\nsettings resolve how profiles are looked up and which profiles should merge together.", "properties": { "identifierConfigs": { "type": "array", "minItems": 1, "maxItems": 15, "description": "List of identifier types and their resolution settings.", "items": { "$ref": "#/components/schemas/IdentifierConfig" } }, "matchingRules": { "type": "array", "minItems": 1, "maxItems": 15, "example": [ "email", "whatsapp", "phone" ], "description": "Priority list of identifiers to locate profiles to apply new data to, or for \ndetermining if two existing profiles should merge. Rules are evaluated in order.\n- If no rule matches against existing profiles, a new profile will be created. \n- If a rule matches to a single existing profile, the profile will be updated. \n- If a rule matches to multiple existing profiles, those existing profiles will be merged.", "items": { "type": "string", "maxLength": 30, "description": "Name of the identifier type, compound identifiers are combined with `AND` such as \"phone AND lastName\"." } } } }, "IdentityResolutionSettings": { "type": "object", "properties": { "identifierConfigs": { "type": "array", "minItems": 1, "maxItems": 15, "description": "List of identifier types and their resolution settings.", "items": { "$ref": "#/components/schemas/IdentifierConfig" } }, "matchingRules": { "type": "array", "minItems": 1, "maxItems": 15, "example": [ "email", "whatsapp", "phone" ], "description": "Priority list of identifiers to locate profiles to apply new data to, or for \ndetermining if two existing profiles should merge. Rules are evaluated in order.\n- If no rule matches against existing profiles, a new profile will be created. \n- If a rule matches to a single existing profile, the profile will be updated. \n- If a rule matches to multiple existing profiles, those existing profiles will be merged.", "items": { "type": "string", "maxLength": 30, "description": "Name of the identifier type, compound identifiers are combined with `AND` such as \"phone AND lastName\"." } }, "version": { "type": "integer", "minimum": 1, "description": "The current version number of the Identity Resolution Settings. Incremented on each successful update.", "example": 3 } }, "required": [ "version" ] }, "IdentifierConfig": { "type": "object", "additionalProperties": false, "required": [ "idType" ], "properties": { "idType": { "type": "string", "description": "Name of the identifier type. Usual values are email, phone, external_id etc.", "example": "email", "minLength": 2, "maxLength": 30 }, "matchingAlgo": { "type": "string", "description": "The algorithm to use for matching identifier values. \n - `exact`, exact string match.\n - `fuzzy`, low precision match allowing for some variations.", "enum": [ "exact", "fuzzy" ], "default": "exact" }, "matchingThreshold": { "type": "integer", "description": "The `fuzzy` matching threshold percentage.", "minimum": 50, "maximum": 99, "default": 75 }, "limit": { "type": "integer", "description": "Maximum number of historical values to retain.", "minimum": 1, "maximum": 100, "default": 100 }, "limitPolicy": { "type": "string", "enum": [ "fifo", "lifo" ], "description": "Removal policy to apply when the number of values exceeds the limit and\nis based on the timestamp of the request when the identifier was added.\n- `fifo`: First In First Out, removes the oldest values first.\n- `lifo`: Last In First Out, removes the most recent values first.", "default": "fifo", "example": "fifo" }, "enforceUnique": { "type": "boolean", "description": "When enabled, more than one profile may not share the same identifier value.\nAdding a shared identifier to a second profile may trigger a merge.\nDisabling creates a compound identifier where merges are only triggered if\ntwo or more identifiers satisfy a matching rule.", "default": true, "example": true }, "normalization": { "type": "string", "enum": [ "phone", "email", "trim", "none" ], "description": "Normalization to apply to the identifier value before storing and matching.\n- `phone`: Normalize phone numbers to E.164 format.\n- `email`: Normalize email addresses by coverting to lowercase and removing spaces.\n- `trim`: Removes spaces from both ends of the string.\n- `none`: No normalization.\n\n**Important Note for Phone Number Normalization:**\nWhen using the `phone` normalization option, please adhere to the following guidelines to ensure proper formatting:\n- All US numbers must be at least valid 10 digit phone numbers with area code. They may also include or omit the \"+1\" prefix.\n- Non-US numbers must include a 1-3 digit country code (a \"+\" prefix is optional). Non-US national formats are not supported and will be interpreted as US numbers.", "default": "trim", "example": "email" } } }, "TraitGroupCore": { "type": "object", "description": "A Trait Group is a collection of related traits. \nTraits are lasting facts about a customer such as their name, location, or preferences.", "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Trait Group", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9_\\-\\.]+$", "example": "Contact" }, "description": { "type": "string", "maxLength": 1024, "description": "description of the Trait Group", "example": "This Trait Group contains traits related to contact information." }, "traits": { "type": "object", "description": "Map of traits that are part of this Trait Group, where the key is the trait name and the value is the trait's definition.", "additionalProperties": { "type": "object", "additionalProperties": false, "description": "A Trait is a single attribute or characteristic of a profile, such as age, location, or preferences.", "properties": { "dataType": { "type": "string", "description": "Data type of the Trait, such as STRING, NUMBER, BOOLEAN, ARRAY.\nFor DELETE operations in PATCH requests, set this to an empty string (\"\") to mark the trait for deletion.", "example": "STRING", "enum": [ "STRING", "NUMBER", "BOOLEAN", "ARRAY", "" ] }, "description": { "type": "string", "maxLength": 1024, "description": "Description of the Trait, providing additional context or information.", "example": "The user's primary email address" }, "validationRule": { "$ref": "#/components/schemas/ValidationRule" }, "idTypePromotion": { "type": "string", "maxLength": 30, "description": "The name of the identifier type to promote the trait value to, such as ''email'', ''phone'', ''user_id'',\netc. This allows the trait to be mapped to an identifier in Identity Resolution. The identifier type should be\nconfigured in the Identity Resolution Settings.", "example": "email" } }, "required": [ "dataType" ] }, "maxProperties": 95, "example": { "email": { "dataType": "STRING", "description": "User's email address" }, "dob": { "dataType": "STRING", "description": "User's date of birth" } } } }, "required": [ "displayName" ] }, "TraitGroup": { "type": "object", "additionalProperties": false, "properties": { "displayName": { "type": "string", "description": "Provides a unique and addressable name to be assigned to this Trait Group", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9_\\-\\.]+$", "example": "Contact" }, "description": { "type": "string", "maxLength": 1024, "description": "description of the Trait Group", "example": "This Trait Group contains traits related to contact information." }, "traits": { "type": "object", "description": "Map of traits that are part of this Trait Group, where the key is the trait name and the value is the trait's definition.", "additionalProperties": { "type": "object", "additionalProperties": false, "description": "A Trait is a single attribute or characteristic of a profile, such as age, location, or preferences.", "properties": { "dataType": { "type": "string", "description": "Data type of the Trait, such as STRING, NUMBER, BOOLEAN, ARRAY.\nFor DELETE operations in PATCH requests, set this to an empty string (\"\") to mark the trait for deletion.", "example": "STRING", "enum": [ "STRING", "NUMBER", "BOOLEAN", "ARRAY", "" ] }, "description": { "type": "string", "maxLength": 1024, "description": "Description of the Trait, providing additional context or information.", "example": "The user's primary email address" }, "validationRule": { "$ref": "#/components/schemas/ValidationRule" }, "idTypePromotion": { "type": "string", "maxLength": 30, "description": "The name of the identifier type to promote the trait value to, such as ''email'', ''phone'', ''user_id'',\netc. This allows the trait to be mapped to an identifier in Identity Resolution. The identifier type should be\nconfigured in the Identity Resolution Settings.", "example": "email" } }, "required": [ "dataType" ] }, "maxProperties": 95, "example": { "email": { "dataType": "STRING", "description": "User's email address" }, "dob": { "dataType": "STRING", "description": "User's date of birth" } } }, "version": { "type": "integer", "minimum": 1, "description": "The current version number of the Trait Group. Incremented on each successful update.", "example": 3 } }, "required": [ "version", "displayName" ] }, "TraitGroupRequest": { "type": "object", "additionalProperties": false, "description": "Payload schema for creating Trait Groups.", "properties": { "displayName": { "type": "string", "description": "Unique name of the Trait Group", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9_\\-\\.]+$", "example": "Contact" }, "description": { "type": "string", "maxLength": 1024, "description": "description of the Trait Group", "example": "This Trait Group contains traits related to contact information." }, "traits": { "type": "object", "description": "Map of traits belonging to this Trait Group, keyed by trait name.", "additionalProperties": { "type": "object", "additionalProperties": false, "description": "A Trait is a single attribute or characteristic of a profile, such as age, location, or preferences.", "properties": { "dataType": { "type": "string", "description": "Data type of the Trait, such as STRING, NUMBER, BOOLEAN, ARRAY.\nFor DELETE operations in PATCH requests, set this to an empty string (\"\") to mark the trait for deletion.", "example": "STRING", "enum": [ "STRING", "NUMBER", "BOOLEAN", "ARRAY", "" ] }, "description": { "type": "string", "maxLength": 1024, "description": "Description of the Trait, providing additional context or information.", "example": "The user's primary email address" }, "validationRule": { "$ref": "#/components/schemas/ValidationRule" }, "idTypePromotion": { "type": "string", "maxLength": 30, "description": "The name of the identifier type to promote the trait value to, such as ''email'', ''phone'', ''user_id'',\netc. This allows the trait to be mapped to an identifier in Identity Resolution. The identifier type should be\nconfigured in the Identity Resolution Settings.", "example": "email" } }, "required": [ "dataType" ] }, "maxProperties": 95, "example": { "email": { "dataType": "STRING", "description": "User's email address" }, "dob": { "dataType": "STRING", "description": "User's date of birth" } } } }, "required": [ "displayName" ] }, "TraitDefinition": { "type": "object", "additionalProperties": false, "description": "A Trait is a single attribute or characteristic of a profile, such as age, location, or preferences.", "properties": { "dataType": { "type": "string", "description": "Data type of the Trait, such as STRING, NUMBER, BOOLEAN, ARRAY.\nFor DELETE operations in PATCH requests, set this to an empty string (\"\") to mark the trait for deletion.", "example": "STRING", "enum": [ "STRING", "NUMBER", "BOOLEAN", "ARRAY", "" ] }, "description": { "type": "string", "maxLength": 1024, "description": "Description of the Trait, providing additional context or information.", "example": "The user's primary email address" }, "idTypePromotion": { "type": "string", "maxLength": 30, "description": "The name of the identifier type to promote the trait value to, such as ''email'', ''phone'', ''user_id'',\netc. This allows the trait to be mapped to an identifier in Identity Resolution. The identifier type should be\nconfigured in the Identity Resolution Settings.", "example": "email" } }, "required": [ "dataType" ] }, "ValidationRule": { "oneOf": [ { "$ref": "#/components/schemas/StringValidationRule" }, { "$ref": "#/components/schemas/NumberValidationRule" }, { "$ref": "#/components/schemas/BooleanValidationRule" }, { "$ref": "#/components/schemas/ArrayValidationRule" } ], "discriminator": { "propertyName": "ruleType", "mapping": { "STRING": "#/components/schemas/StringValidationRule", "NUMBER": "#/components/schemas/NumberValidationRule", "BOOLEAN": "#/components/schemas/BooleanValidationRule", "ARRAY": "#/components/schemas/ArrayValidationRule" } } }, "StringValidationRule": { "type": "object", "description": "Validation for string dataType.", "properties": { "pattern": { "type": "string", "description": "Regex pattern (max 1000 chars)", "maxLength": 1000 }, "minLength": { "type": "integer", "description": "Minimum string length", "minimum": 0 }, "maxLength": { "type": "integer", "description": "Maximum string length", "minimum": 1 }, "ruleType": { "type": "string", "description": "Discriminator field indicating this is a string validation rule.", "enum": [ "STRING" ] } }, "additionalProperties": false, "required": [ "ruleType" ] }, "NumberValidationRule": { "type": "object", "description": "Validation for number dataType.", "properties": { "min": { "type": "number", "description": "Minimum value" }, "max": { "type": "number", "description": "Maximum value" }, "ruleType": { "type": "string", "description": "Discriminator field indicating this is a number validation rule.", "enum": [ "NUMBER" ] } }, "additionalProperties": false, "required": [ "ruleType" ] }, "BooleanValidationRule": { "type": "object", "description": "Validation for boolean dataType (no extra properties)", "additionalProperties": false, "properties": { "ruleType": { "type": "string", "description": "Discriminator field indicating this is a boolean validation rule.", "enum": [ "BOOLEAN" ] } }, "required": [ "ruleType" ] }, "ArrayValidationRule": { "type": "object", "description": "Validation for array dataType.", "properties": { "minItems": { "type": "integer", "description": "Minimum number of items", "minimum": 0 }, "maxItems": { "type": "integer", "description": "Maximum number of items", "minimum": 0 }, "ruleType": { "type": "string", "description": "Discriminator field indicating this is an array validation rule.", "enum": [ "ARRAY" ] } }, "additionalProperties": false, "required": [ "ruleType" ] }, "Meta": { "type": "object", "additionalProperties": false, "properties": { "key": { "type": "string", "nullable": false, "maxLength": 64, "description": "The key of the list property contains the actual data items.\nThis enables programmatic iteration over paginated results.\n" }, "pageSize": { "type": "integer", "default": 50 }, "nextToken": { "type": "string", "maxLength": 4096, "example": "eyJlYXN0ZXIiOiJlZ2cifQ" }, "previousToken": { "type": "string", "maxLength": 4096, "example": "eyJlYXN0ZXIiOiJlZ2cifQ" } } }, "DataMappingType": { "type": "string", "description": "The type of data mapping defining how data flows into the Memory Store.", "enum": [ "DATASET" ], "default": "DATASET", "example": "DATASET" }, "DataMappingFromTypes": { "type": "object", "description": "Details of where to map data items from. Each data mapping from type has its own set of configuration\nparameters and source specific properties.", "oneOf": [ { "$ref": "#/components/schemas/DataMappingFromDataSet" } ], "discriminator": { "propertyName": "type", "mapping": { "DATASET": "#/components/schemas/DataMappingFromDataSet" } }, "example": { "type": "DATASET", "datasetId": "tdi_dataset_00000000000000000000000000" } }, "DataMappingFromDataSet": { "type": "object", "additionalProperties": false, "description": "Configuration for mapping from a TDI dataset.", "properties": { "type": { "type": "string", "description": "The source data type, which determines the source of the data and the required configuration parameters.", "enum": [ "DATASET" ], "default": "DATASET", "example": "DATASET" }, "datasetId": { "type": "string", "description": "The unique identifier of the TDI dataset to connect.", "pattern": "^tdi_dataset_[0-7][0-9a-z]{25}$", "example": "tdi_dataset_00000000000000000000000000" } }, "required": [ "type", "datasetId" ] }, "DataMappingToTypes": { "type": "object", "description": "Details of where to map data items to. Each data mapping to type has its own set of configuration\nparameters and destination specific properties.", "oneOf": [ { "$ref": "#/components/schemas/DataMappingToTraits" } ], "discriminator": { "propertyName": "type", "mapping": { "TRAITS": "#/components/schemas/DataMappingToTraits" } }, "example": { "type": "TRAITS", "mappings": [ { "fieldName": "primary_email", "traitGroup": "Contact", "traitName": "email" } ] } }, "DataMappingToTraits": { "type": "object", "additionalProperties": false, "description": "Configuration for mapping data to traits in a Memory Store.", "properties": { "type": { "type": "string", "description": "The destination data type, which determines where to write the data and the required configuration parameters.", "enum": [ "TRAITS" ], "default": "TRAITS", "example": "TRAITS" }, "mappings": { "type": "array", "description": "The list of field to trait mappings.", "minItems": 1, "maxItems": 100, "items": { "$ref": "#/components/schemas/MappingTraitItem" } } }, "required": [ "type", "mappings" ] }, "MappingTraitItem": { "type": "object", "additionalProperties": false, "description": "Maps a field from a source to a Trait in the Memory Store.", "properties": { "fieldName": { "type": "string", "description": "The name of the field/column in the source. Deprecated in favor of expression.", "deprecated": true, "minLength": 1, "maxLength": 64, "example": "primary_email" }, "expression": { "type": "string", "description": "The expression identifying the field/column in the source.", "minLength": 1, "maxLength": 256, "example": "primary_email" }, "traitGroup": { "type": "string", "description": "The name of the Trait Group to map to.", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9_\\-\\.]+$", "example": "Contact" }, "traitName": { "type": "string", "description": "The name of the trait within the Trait Group to map to.", "minLength": 1, "maxLength": 128, "pattern": "^[a-z][a-zA-Z0-9_\\-\\.]*$", "example": "email" } }, "required": [ "fieldName", "traitGroup", "traitName" ] }, "DataMappingName": { "type": "string", "description": "Name of the data mapping.", "pattern": "^[a-zA-Z][a-zA-Z0-9-_.]*$", "minLength": 1, "maxLength": 128, "example": "crm-contacts" }, "DataMappingCore": { "type": "object", "description": "Writable fields of a data mapping. Used directly as the PATCH request body\n(all fields optional). Composed into CreateDataMappingInput via allOf.", "properties": { "displayName": { "$ref": "#/components/schemas/DataMappingName" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 512 characters.", "minLength": 1, "maxLength": 512, "example": "Syncs customer data from CRM dataset to profile traits" }, "isEnabled": { "type": "boolean", "description": "Flag indicating whether the data mapping is active. When true, data will be\ningested and mapped according to the configuration. When false, the data mapping\nwill be inactive and no data will be ingested into the Memory Store.", "default": true, "example": true }, "mappingTo": { "$ref": "#/components/schemas/DataMappingToTypes" } } }, "CreateDataMappingInput": { "type": "object", "description": "A data mapping connects external data sources to a Memory Store, enabling automatic\ningestion and mapping of data to profile traits.", "properties": { "displayName": { "$ref": "#/components/schemas/DataMappingName" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 512 characters.", "minLength": 1, "maxLength": 512, "example": "Syncs customer data from CRM dataset to profile traits" }, "isEnabled": { "type": "boolean", "description": "Flag indicating whether the data mapping is active. When true, data will be\ningested and mapped according to the configuration. When false, the data mapping\nwill be inactive and no data will be ingested into the Memory Store.", "default": true, "example": true }, "mappingTo": { "$ref": "#/components/schemas/DataMappingToTypes" }, "mappingFrom": { "$ref": "#/components/schemas/DataMappingFromTypes" } }, "required": [ "mappingTo", "mappingFrom", "displayName" ] }, "DataMapping": { "type": "object", "additionalProperties": false, "properties": { "displayName": { "$ref": "#/components/schemas/DataMappingName" }, "description": { "type": "string", "description": "A human readable description of this resource, up to 512 characters.", "minLength": 1, "maxLength": 512, "example": "Syncs customer data from CRM dataset to profile traits" }, "isEnabled": { "type": "boolean", "description": "Flag indicating whether the data mapping is active. When true, data will be\ningested and mapped according to the configuration. When false, the data mapping\nwill be inactive and no data will be ingested into the Memory Store.", "default": true, "example": true }, "mappingTo": { "$ref": "#/components/schemas/DataMappingToTypes" }, "mappingFrom": { "$ref": "#/components/schemas/DataMappingFromTypes" }, "id": { "type": "string", "description": "The unique identifier for the data mapping.", "pattern": "^mem_datamapping_[0-7][0-9a-z]{25}$", "example": "mem_datamapping_00000000000000000000000000" }, "createdAt": { "type": "string", "format": "date-time", "description": "The ISO 8601 timestamp when the data mapping was created.", "example": "2026-01-15T10:30:00Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "The ISO 8601 timestamp when the data mapping was last updated.", "example": "2026-01-15T11:45:00Z" }, "version": { "type": "integer", "minimum": 1, "description": "The current version number of the DataMapping. Incremented on each successful update.", "example": 3 } }, "required": [ "createdAt", "displayName", "mappingFrom", "updatedAt", "mappingTo", "version", "id" ] }, "DataMappingList": { "type": "object", "additionalProperties": false, "properties": { "dataMappings": { "type": "array", "maxItems": 100, "items": { "$ref": "#/components/schemas/DataMapping" }, "description": "List of DataMappings associated with the Memory Store." }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "RecallObservationInfo": { "type": "object", "description": "A transient and mutable observation memory associated with a profile.", "properties": { "content": { "type": "string", "description": "The main content of the observation.", "minLength": 1, "maxLength": 4096, "example": "Customer expressed satisfaction with recent product update during support call." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation originally occurred.", "example": "2025-01-15T10:15:30Z" }, "source": { "type": "string", "description": "The source system that generated this observation. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "minLength": 1, "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversational-intelligence" }, "conversationIds": { "type": "array", "description": "Array of conversation IDs associated with this observation.", "maxItems": 10, "items": { "$ref": "#/components/schemas/ConversationID" } }, "id": { "$ref": "#/components/schemas/ObservationID" }, "createdAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation was created.", "example": "2025-01-15T10:30:45Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "The timestamp when the observation was last updated.", "example": "2025-01-15T10:30:45Z" }, "score": { "type": "number", "format": "double", "description": "The relevance score of the observation in relation to the query. Higher values indicate greater relevance. This field is omitted when results are returned in most-recent order. This may occur when no query is provided and one cannot be inferred from the conversation context, or when the system defaults to chronological retrieval to ensure high availability.", "minimum": 0, "maximum": 1, "example": 0.82 } }, "required": [ "createdAt", "occurredAt", "content", "source", "updatedAt", "id" ] }, "RecallSummaryInfo": { "type": "object", "description": "A summary memory derived from conversations.", "properties": { "source": { "type": "string", "description": "The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversations" }, "content": { "type": "string", "description": "The main content of the summary.", "minLength": 1, "maxLength": 4096, "example": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was originally created.", "example": "2025-01-15T10:15:30Z" }, "conversationId": { "$ref": "#/components/schemas/ConversationID" }, "id": { "$ref": "#/components/schemas/SummaryID" }, "createdAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was created.", "example": "2025-01-15T10:30:45Z" }, "updatedAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was last updated.", "example": "2025-01-15T10:30:45Z" }, "score": { "type": "number", "format": "double", "description": "The relevance score of the summary in relation to the query. Higher values indicate greater relevance. This field is omitted when results are returned in most-recent order. This may occur when no query is provided and one cannot be inferred from the conversation context, or when the system defaults to chronological retrieval to ensure high availability.", "minimum": 0, "maximum": 1, "example": 0.78 } }, "required": [ "createdAt", "conversationId", "occurredAt", "content", "updatedAt", "id" ] }, "SummaryCorePatch": { "type": "object", "description": "Core mutable properties for updating summary objects. All fields are optional for PATCH operations.", "properties": { "source": { "type": "string", "description": "The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "conversations" }, "content": { "type": "string", "description": "The main content of the summary.", "minLength": 1, "maxLength": 4096, "example": "Customer discussed billing concerns and was satisfied with the resolution provided during this conversation." }, "occurredAt": { "type": "string", "format": "date-time", "description": "The timestamp when the summary was originally created. If not provided, defaults to the time the summary was received.", "example": "2025-01-15T10:15:30Z" }, "conversationId": { "$ref": "#/components/schemas/ConversationID" } } }, "OperationStatus": { "type": "object", "additionalProperties": false, "required": [ "operationId", "status", "createdAt" ], "properties": { "operationId": { "type": "string", "description": "The unique identifier for this operation.", "maxLength": 512 }, "status": { "type": "string", "description": "The current status of the operation.", "enum": [ "PENDING", "RUNNING", "CANCELLED", "COMPLETED", "FAILED" ], "example": "COMPLETED" }, "createdAt": { "type": "string", "format": "date-time", "description": "When the operation was created.", "example": "2025-11-14T20:29:21Z" }, "statusUrl": { "type": "string", "format": "uri", "description": "URI to check operation status." }, "completedAt": { "type": "string", "format": "date-time", "description": "When the operation completed or failed." }, "result": { "$ref": "#/components/schemas/OperationResult" }, "error": { "type": "object", "properties": { "type": { "type": "string", "format": "uri", "description": "A URI reference identifying the problem type." }, "title": { "type": "string", "maxLength": 128, "description": "A short, human-readable summary of the problem type." }, "code": { "type": "integer", "description": "The numeric Twilio error code." }, "detail": { "type": "string", "maxLength": 1024, "description": "A human-readable explanation specific to this occurrence of the problem." } } }, "resultUrl": { "type": "string", "format": "uri", "description": "URL to fetch the resulting resource." } } }, "OperationResult": { "description": "Operation-specific output. Present when status is COMPLETED.", "discriminator": { "propertyName": "type", "mapping": { "RESOURCE_ID": "#/components/schemas/OperationResultResourceId" } }, "oneOf": [ { "$ref": "#/components/schemas/OperationResultResourceId" } ] }, "OperationResultResourceId": { "type": "object", "required": [ "type", "id" ], "properties": { "type": { "type": "string", "enum": [ "RESOURCE_ID" ] }, "id": { "type": "string", "maxLength": 128, "description": "The identifier of the created or affected resource." } } } }, "parameters": { "PageSize": { "name": "pageSize", "in": "query", "required": false, "description": "The maximum number of items to return per page, maximum of 1000.", "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 1000 } }, "PageToken": { "name": "pageToken", "in": "query", "required": false, "description": "The token for the page of results to retrieve.", "schema": { "type": "string", "maxLength": 500 } }, "ImportId": { "name": "importId", "in": "path", "description": "The task identifier for the import process.", "required": true, "schema": { "type": "string", "pattern": "^mem_import_[0-7][0-9a-z]{25}$" } }, "StoreId": { "name": "storeId", "in": "path", "required": true, "description": "A unique Memory Store ID using Twilio Type ID (TTID) format", "schema": { "type": "string", "pattern": "^mem_(store|service)_[0-7][0-9a-z]{25}$", "example": "mem_store_00000000000000000000000000" } }, "ProfileId": { "name": "profileId", "in": "path", "required": true, "description": "The unique identifier for the profile using Twilio Type ID (TTID) format.", "schema": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000" } }, "IdentifierType": { "name": "idType", "in": "path", "required": true, "description": "Identifier type configured for the service (for example `email`, `phone`, or `externalId`).", "schema": { "type": "string", "minLength": 2, "maxLength": 30, "example": "email" } }, "AcceptEncoding": { "name": "Accept-Encoding", "in": "header", "required": false, "description": "Compression algorithms supported by the client (e.g., gzip, deflate, br)", "schema": { "type": "string", "maxLength": 200, "pattern": "^[a-zA-Z0-9, .-]*$", "example": "gzip, deflate, br" } }, "ContentEncoding": { "name": "Content-Encoding", "in": "header", "required": false, "description": "Compression algorithm used for the request body (e.g., gzip, deflate, br)", "schema": { "type": "string", "enum": [ "gzip", "deflate", "br", "compress" ], "example": "gzip" } }, "ObservationId": { "name": "observationId", "in": "path", "description": "The observation ID.", "required": true, "schema": { "$ref": "#/components/schemas/ObservationID" } }, "SummaryId": { "name": "summaryId", "in": "path", "description": "The summary ID.", "required": true, "schema": { "$ref": "#/components/schemas/SummaryID" } }, "SourceParam": { "name": "source", "in": "query", "required": false, "description": "Filter by source. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.", "schema": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-zA-Z0-9 _.-]+$", "example": "customer service platform" } }, "CreatedAfter": { "name": "createdAfter", "in": "query", "description": "Filter observations created after this timestamp (inclusive).", "required": false, "schema": { "type": "string", "format": "date-time", "example": "2025-01-01T00:00:00Z" } }, "CreatedBefore": { "name": "createdBefore", "in": "query", "description": "Filter observations created before this timestamp (exclusive).", "required": false, "schema": { "type": "string", "format": "date-time", "example": "2025-01-31T23:59:59Z" } }, "OrderBy": { "name": "orderBy", "in": "query", "required": false, "description": "Either 'ASC' or 'DESC' to sort results ascending or descending respectively.", "schema": { "type": "string", "enum": [ "ASC", "DESC" ], "default": "DESC" } }, "TraitGroupsQueryParam": { "name": "traitGroups", "in": "query", "required": false, "description": "Comma separated list of trait group names to include.", "schema": { "type": "string", "minLength": 1, "maxLength": 256, "example": "Contact" } }, "ControlPlanePageSize": { "name": "pageSize", "in": "query", "required": false, "description": "The maximum number of items to return per page, maximum of 100.", "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100 } }, "IfMatchHeader": { "in": "header", "name": "If-Match", "description": "Allows for optimistic concurrency control by making the request conditional.\nServer will only act if the resource's current Entity Tag (ETag) matches\nthe one provided, preventing accidental overwrites.", "schema": { "type": "string", "maxLength": 100, "example": "\"eyJpZCI6ImFuX2lkIiwidiI6MX0\"" } }, "traitGroupName": { "name": "traitGroupName", "in": "path", "required": true, "description": "A unique Name of the TraitGroup", "schema": { "type": "string", "minLength": 1, "maxLength": 64, "example": "Contact" } }, "DataMappingId": { "name": "dataMappingId", "in": "path", "required": true, "description": "A unique DataMapping ID using Twilio Type ID (TTID) format", "schema": { "type": "string", "pattern": "^mem_datamapping_[0-7][0-9a-z]{25}$", "example": "mem_datamapping_00000000000000000000000000" } } }, "responses": { "BadRequest": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 400, "message": "Failed to complete request due to a bad request", "more_info": "https://www.twilio.com/docs/api/errors/400", "status": 400 } } } }, "NotFound": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20404, "message": "Not Found", "more_info": "https://www.twilio.com/docs/api/errors/20404", "status": 404 } } } }, "TooManyRequests": { "description": "This error indicates that you have sent too many requests to the API. You should retry according to the `Retry-After` response header.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20429, "message": "Too many requests. Please retry according to the Retry-After response header.", "more_info": "https://www.twilio.com/docs/api/errors/20429", "status": 429 } } }, "headers": { "Retry-After": { "description": "The amount of time in seconds that the customer should wait before issuing a new request towards the API.", "schema": { "type": "string", "pattern": "^[0-9]+$" } } } }, "InternalServerError": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20500, "message": "Internal Server Error", "more_info": "https://www.twilio.com/docs/api/errors/20500", "status": 500 } } } }, "ServiceUnavailable": { "description": "Service Unavailable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20503, "message": "Service Unavailable", "more_info": "https://www.twilio.com/docs/api/errors/20503", "status": 503 } } } }, "Unauthorized": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20003, "message": "Failed to complete request due to lack of authentication credentials", "more_info": "https://www.twilio.com/docs/api/errors/20003", "status": 401 } } } }, "Forbidden": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 403, "message": "Permission to access resource denied", "more_info": "https://www.twilio.com/docs/api/errors/403", "status": 403 } } } }, "Conflict": { "description": "Conflict", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TwilioError" }, "example": { "code": 20409, "message": "Conflict", "more_info": "https://www.twilio.com/docs/api/errors/20409", "status": 409 } } } }, "MovedPermanently": { "description": "This resource has moved.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message", "uri" ], "properties": { "message": { "type": "string", "default": "This resource has moved.", "example": "This resource has moved.", "maxLength": 255 }, "uri": { "type": "string", "example": "https://memory.twilio.com/v1/Stores/mem_store_00000000000000000000000000/Profiles/mem_profile_00000000000000000000000000", "maxLength": 2048 } }, "maxProperties": 2 } } }, "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" }, "Location": { "$ref": "#/components/headers/Location" } } }, "PermanentRedirect": { "description": "This resource has moved.", "content": { "application/json": { "schema": { "type": "object", "required": [ "message", "uri" ], "properties": { "message": { "type": "string", "default": "This resource has moved.", "example": "This resource has moved.", "maxLength": 255 }, "uri": { "type": "string", "example": "https://memory.twilio.com/v1/Stores/mem_store_00000000000000000000000000/Profiles/mem_profile_00000000000000000000000000", "maxLength": 2048 } }, "maxProperties": 2 } } }, "headers": { "Canonical-Profile-Id": { "$ref": "#/components/headers/Canonical-Profile-Id" }, "Location": { "$ref": "#/components/headers/Location" } } } }, "headers": { "ContentEncoding": { "description": "The compression algorithm used for the response body", "schema": { "type": "string", "enum": [ "gzip", "deflate", "br", "compress" ], "example": "gzip" } }, "ETag": { "description": "Entity tag that acts as a unique identifier for a specific version of the resource.\nSend updates with If-Match conditional headers for optimistic concurrency control.", "schema": { "type": "string", "maxLength": 512 }, "example": "eyJpZCI6ImFuX2lkIiwidiI6MX0" }, "OperationId": { "description": "The operation identifier.", "schema": { "type": "string", "maxLength": 512 } }, "OperationLocation": { "description": "URI to check operation status.", "schema": { "type": "string", "maxLength": 512 } }, "OperationRetryAfter": { "description": "Suggested number of seconds to wait before checking status again.", "schema": { "type": "integer" } }, "Canonical-Profile-Id": { "description": "The canonical profile ID associated with the requested resource. If provided, this header indicates that the requested profile is merged to the canonical profile ID.", "schema": { "type": "string", "pattern": "^mem_profile_[0-7][0-9a-z]{25}$", "example": "mem_profile_00000000000000000000000000", "description": "The canonical profile ID." } }, "Location": { "description": "The URL of the new location for the resource.", "schema": { "type": "string", "format": "uri", "example": "https:///memory.twilio.com/v1/Stores/mem_store_00000000000000000000000000/Profiles/mem_profile_00000000000000000000000000", "description": "The URL of the new location for the resource." } } } }, "security": [ { "accountSid_authToken": [] } ] }