Optimizely Content Recommendations API

Content recommendation delivery, formerly Idio. Thirteen paths covering content, topics, users and recommendation delivery, authenticated with a key query parameter. The spec declares a templated server (https://{hostname}/1.0) because delivery hosts are per-customer. Harvested verbatim 2026-08-13.

OpenAPI Specification

optimizely-recommendations-public-api-spec-openapi.yaml Raw ↑
{"openapi":"3.1.0","info":{"title":"Optimizely Content Recommendations API","version":"1.0.0","contact":{"email":"support@optimizely.com"}},"servers":[{"url":"https://{hostname}/1.0","description":"Primary API server","variables":{"hostname":{"default":"api.usea01.idio.episerver.net","enum":["api.apac01.idio.episerver.net","api.caea01.idio.episerver.net","api.emea01.idio.episerver.net","api.usea01.idio.episerver.net"]}}}],"security":[{"key":[]}],"tags":[{"name":"content","description":"Content management operations"},{"name":"deliveries","description":"Delivery management operations"},{"name":"recommendations","description":"Recommendation management operations"},{"name":"sections","description":"Section management operations"},{"name":"users","description":"User management operations"}],"components":{"securitySchemes":{"key":{"type":"apiKey","in":"query","name":"key","description":"API key required for authentication. Must be provided as a query parameter, for example, `?key=YOUR_API_KEY`."}},"parameters":{"contentID":{"name":"id","in":"path","required":true,"description":"Unique identifier of the content item.","schema":{"type":"integer","example":101}},"deliveryKey":{"name":"key","in":"path","required":true,"description":"API delivery key. Use `me` to refer to the current delivery.","schema":{"type":"string"},"examples":{"me":{"value":"me"}}},"recommendationGUID":{"name":"id","in":"path","required":true,"description":"Unique GUID of the recommendation.","schema":{"type":"string","format":"uuid","example":"550e8400-e29b-41d4-a716-446655440000"}},"sectionID":{"name":"id","in":"path","required":true,"description":"Unique identifier of the section.","schema":{"type":"integer","example":42}},"sectionIDList":{"name":"id","in":"path","required":true,"description":"Section IDs (csv)","style":"simple","explode":false,"schema":{"type":"array","uniqueItems":true,"items":{"type":"integer"}}},"userID":{"name":"id","in":"path","required":true,"description":"User identifier (numeric ID or 'identifier:value' format).","schema":{"type":"string","example":"email:john.doe@example.com"}},"page":{"name":"page","in":"query","description":"Page number for pagination (1-based index).","schema":{"type":"integer","example":2}},"rpp":{"name":"rpp","in":"query","description":"Results per page for pagination.","schema":{"type":"integer"}},"topics":{"name":"include_topics","in":"query","description":"Whether to include topic information in the response.","allowEmptyValue":true,"schema":{"type":"boolean"}},"no_fallback":{"name":"no_fallback","in":"query","description":"Avoid generic response","allowEmptyValue":true,"schema":{"type":"boolean"}},"record":{"name":"record","in":"query","description":"Recommendation tracking method","schema":{"type":"string","enum":["true","false","pending"]}}},"responses":{"ContentList":{"description":"A paginated list of content items, including metadata for navigation, such as total hits and page links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentList"},"example":{"total_hits":124,"next_page":"https://api.usea01.idio.episerver.net/1.0/content?page=2&rpp=10","previous_page":null,"content":[{"id":987654,"title":"The Future of Enterprise Personalisation","abstract":"How content recommendations drive engagement across digital channels.","featured":true,"approved":"approved","read":false,"published":"2026-05-14T09:30:00Z","original_url":"https://www.example.com/blog/future-of-personalisation","link_url":"https://www.example.com/blog/future-of-personalisation","full_details_url":"https://api.usea01.idio.episerver.net/1.0/content/987654","main_image_url":"https://images.example.com/987654/main.jpg","main_image":{"width":1200,"height":630},"metadata":{"language":"en"},"source":{"id":55,"title":"Company Blog","full_details_url":"https://api.usea01.idio.episerver.net/1.0/sources/55","display":"full"},"author":{"id":21,"title":"Jordan Lee","full_details_url":"https://api.usea01.idio.episerver.net/1.0/authors/21"},"topics":[{"id":301,"title":"Personalisation","full_details_url":"https://api.usea01.idio.episerver.net/1.0/topics/301"}]}]}}}},"ContentItem":{"description":"Detailed information about a single content item, including metadata, author, source, and media links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItemVerbose"},"example":{"id":101,"title":"AI in Healthcare","abstract":"Exploring how AI is transforming healthcare.","featured":true,"approved":"approved","read":false,"published":"2026-05-14T09:30:00Z","original_url":"https://www.example.com/news/ai-in-healthcare","link_url":"https://www.example.com/news/ai-in-healthcare","full_details_url":"https://api.usea01.idio.episerver.net/1.0/content/101","main_image_url":"https://images.example.com/101/main.jpg","main_image":{"width":1200,"height":800},"metadata":{"language":"en"},"source":{"id":501,"title":"Nature Journal","full_details_url":"https://api.usea01.idio.episerver.net/1.0/sources/501","display":"full"},"author":{"id":301,"title":"Dr. Jane Smith","full_details_url":"https://api.usea01.idio.episerver.net/1.0/authors/301"},"topics":[{"id":42,"title":"Artificial Intelligence","full_details_url":"https://api.usea01.idio.episerver.net/1.0/topics/42"}],"content":"Artificial intelligence is reshaping how clinicians diagnose and treat patients across the care pathway.","images":[{"url":"https://images.example.com/101/inline-1.jpg","width":800,"height":450}]}}}},"UserContentList":{"description":"A list of content accompanied by metadata for navigation and recommendation tracking.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserContentList"},"example":{"total_hits":42,"next_page":"https://api.usea01.idio.episerver.net/1.0/users/1234/content?page=2&rpp=10","previous_page":null,"recommendation_id":"8f14e45f-ceea-467a-9575-6c1e3d2a7b9c","model":true,"group":"test","content":[{"id":987654,"title":"The Future of Enterprise Personalisation","abstract":"How content recommendations drive engagement across digital channels.","featured":true,"approved":"approved","read":false,"published":"2026-05-14T09:30:00Z","original_url":"https://www.example.com/blog/future-of-personalisation","link_url":"https://www.example.com/blog/future-of-personalisation","full_details_url":"https://api.usea01.idio.episerver.net/1.0/content/987654","main_image_url":"https://images.example.com/987654/main.jpg","main_image":{"width":1200,"height":630},"metadata":{"language":"en"},"source":{"id":55,"title":"Company Blog","full_details_url":"https://api.usea01.idio.episerver.net/1.0/sources/55","display":"full"},"author":{"id":21,"title":"Jordan Lee","full_details_url":"https://api.usea01.idio.episerver.net/1.0/authors/21"},"topics":[{"id":301,"title":"Personalisation","full_details_url":"https://api.usea01.idio.episerver.net/1.0/topics/301"}]}]}}}}},"schemas":{"List":{"type":"object","description":"Base pagination metadata object.","additionalProperties":false,"required":["total_hits"],"properties":{"total_hits":{"type":"integer","description":"Total number of items matching the query."},"next_page":{"type":"string","format":"url","description":"Link to the next page of results, if available."},"previous_page":{"type":"string","format":"url","description":"Link to the previous page of results, if available."}}},"ContentList":{"description":"A paginated list of content items with navigation metadata.","allOf":[{"$ref":"#/components/schemas/List"},{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","description":"The list of content items for the current page.","uniqueItems":true,"items":{"$ref":"#/components/schemas/ContentItem"}}}}]},"UserContentList":{"allOf":[{"$ref":"#/components/schemas/ContentList"},{"type":"object","additionalProperties":false,"required":["model","group"],"properties":{"recommendation_id":{"type":"string","format":"uuid","description":"Unique identifier for the recommendation set."},"model":{"type":"boolean","description":"Indicates whether a recommendation model was applied."},"group":{"type":"string","enum":["control","test"],"description":"A/B test group identifier."}}}]},"ContentItem":{"allOf":[{"$ref":"#/components/schemas/ContentItemMinimal"},{"type":"object","additionalProperties":false,"required":["id","title","abstract","featured","approved","read","published","original_url","metadata","link_url","full_details_url","main_image_url","main_image","source","author"],"properties":{"id":{"type":"integer","description":"Unique identifier of the content item."},"metadata":{"$ref":"#/components/schemas/ContentMetadata"},"topics":{"type":"array","uniqueItems":true,"description":"Topic information associated with the content.","items":{"$ref":"#/components/schemas/ContentTopic"}},"link_url":{"type":"string","format":"url","description":"URL to the live content link."},"full_details_url":{"type":"string","format":"url","description":"API URL for full details of the content."},"main_image_url":{"type":"string","format":"url","description":"URL to the main image of the content."},"main_image":{"$ref":"#/components/schemas/ContentMainImage"},"source":{"$ref":"#/components/schemas/ContentSource"},"author":{"$ref":"#/components/schemas/ContentAuthor"}}}]},"ContentItemMinimal":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","description":"Title of the content item."},"abstract":{"type":"string","description":"Short summary or abstract of the content."},"featured":{"type":"boolean","description":"Indicates whether the content is featured."},"approved":{"type":"string","enum":["approved","unapproved","binned"],"description":"Approval status of the content."},"read":{"type":"boolean","description":"Whether the content is marked as read."},"published":{"type":"string","format":"date-time","description":"Date and time when the content was published."},"original_url":{"type":"string","format":"url","description":"Original source URL of the content."}}},"ContentItemPartial":{"allOf":[{"$ref":"#/components/schemas/ContentItemMinimal"},{"$ref":"#/components/schemas/ContentItemContent"}]},"ContentItemContent":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"string","description":"Full content body (if available)."}}},"ContentItemVerbose":{"allOf":[{"$ref":"#/components/schemas/ContentItem"},{"$ref":"#/components/schemas/ContentItemContent"},{"type":"object","additionalProperties":false,"required":["content","images","topics"],"properties":{"images":{"type":"array","uniqueItems":true,"description":"Additional images associated with the content.","items":{"$ref":"#/components/schemas/ContentImage"}}}}]},"ContentAuthor":{"type":"object","additionalProperties":false,"required":["id","title","full_details_url"],"properties":{"id":{"type":"integer","description":"Unique identifier of the author."},"title":{"type":"string","description":"Name of the author."},"full_details_url":{"type":"string","format":"url","description":"API URL for full author details."}}},"ContentImage":{"type":"object","additionalProperties":false,"required":["url","width","height"],"properties":{"url":{"type":"string","format":"url","description":"Image URL."},"width":{"type":"integer","description":"Image width in pixels."},"height":{"type":"integer","description":"Image height in pixels."}}},"ContentMainImage":{"type":"object","additionalProperties":false,"required":["width","height"],"properties":{"width":{"type":"integer","description":"Image width in pixels."},"height":{"type":"integer","description":"Image height in pixels."}}},"ContentMetadata":{"type":"object","description":"Metadata for a content item, such as language and tags.","properties":{"language":{"type":"string","enum":["de","en","es","fr","it"],"description":"Language of the content."},"tags":{"type":"object","description":"Arbitrary namespaced tags associated with the content. Values may be strings or arrays of strings (for example, multiple authors).","additionalProperties":true}}},"ContentQuery":{"type":"object","additionalProperties":false,"required":["query"],"description":"Object containing a Lucene query string used to search or filter content.","properties":{"query":{"type":"string","description":"Lucene query string. Use the platform's Lucene dialect for advanced filtering.","example":"title:AI AND language:en"}}},"ContentSectionList":{"type":"object","additionalProperties":false,"required":["sections"],"description":"A list of content sections.","properties":{"sections":{"type":"array","uniqueItems":true,"description":"Array of section objects.","items":{"$ref":"#/components/schemas/ContentSection"}}}},"ContentSection":{"type":"object","additionalProperties":false,"required":["id","title","full_details_url"],"description":"Represents a section that groups related content.","properties":{"id":{"type":"integer","description":"Unique identifier of the section.","example":42},"title":{"type":"string","description":"The display title of the section.","example":"Technology"},"full_details_url":{"type":"string","format":"url","description":"API link to fetch full details of this section.","example":"https://api.usea01.idio.episerver.net/1.0/sections/42"}}},"ContentSource":{"type":"object","additionalProperties":false,"required":["id","title","full_details_url","display"],"description":"The source (origin) of the content.","properties":{"id":{"type":"integer","description":"Unique identifier of the source."},"title":{"type":"string","description":"Display name of the source."},"full_details_url":{"type":"string","format":"url","description":"API URL for full source details."},"display":{"type":"string","enum":["full","abstract","link"],"description":"How the source should be displayed."}}},"ContentTopic":{"type":"object","additionalProperties":false,"required":["id","title","full_details_url"],"properties":{"id":{"type":"integer","description":"Unique identifier of the topic."},"title":{"type":"string","description":"Topic title."},"full_details_url":{"type":"string","format":"url","description":"API link to full topic details."}}},"ContentURL":{"type":"object","additionalProperties":false,"required":["original_url"],"description":"Schema for submitting a new content item by URL.","properties":{"original_url":{"type":"string","format":"url","description":"The original URL of the content to be ingested.","example":"https://example.com/news/article123"}}},"DeliveryMap":{"type":"object","description":"A map of delivery identifiers to their corresponding API keys.","properties":{"deliveries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Map"},"description":"Key-value pairs where key is the delivery ID or name and value is the API key."}}},"Delivery":{"type":"object","additionalProperties":false,"required":["id","title","active","configuration","content_selection","sections"],"description":"Represents a content delivery configuration, such as a widget or feed.","properties":{"id":{"type":"integer","description":"Unique identifier of the delivery.","example":101},"title":{"type":"string","description":"Display title of the delivery.","example":"Homepage Recommendations"},"active":{"type":"boolean","description":"Indicates whether this delivery is currently active.","example":true},"configuration":{"$ref":"#/components/schemas/Map"},"content_selection":{"$ref":"#/components/schemas/DeliveryContentSelection"},"sections":{"type":"array","uniqueItems":true,"description":"List of sections included in this delivery.","items":{"$ref":"#/components/schemas/ContentSection"}}}},"DeliveryContentSelection":{"type":"object","additionalProperties":false,"required":["approved","featured"],"description":"Criteria used to select which content is delivered.","properties":{"approved":{"type":"string","enum":["approved","unapproved","all"],"description":"Filter content by approval status.","example":"approved"},"featured":{"type":"string","enum":["featured","unfeatured","all"],"description":"Filter content by featured status.","example":"featured"}}},"RecommendationFlag":{"type":"object","additionalProperties":false,"required":["pending"],"description":"Flag indicating the status of a recommendation.","properties":{"pending":{"type":"boolean","description":"True if the recommendation is still pending, false if it has been processed."}}},"SectionPartial":{"type":"object","additionalProperties":false,"description":"Partial update schema for a section (used in PATCH requests).","properties":{"title":{"type":"string","description":"Updated title of the section.","example":"Tech Updates"},"description":{"type":"string","description":"Updated description for the section.","example":"Updated description for technology section."},"query":{"type":"string","description":"Updated Lucene query string for the section.","example":"category:AI AND language:en"}}},"SectionList":{"type":"object","additionalProperties":false,"required":["sections"],"properties":{"sections":{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/SectionItem"}}}},"SectionItem":{"type":"object","additionalProperties":false,"required":["id","title","content_url"],"properties":{"id":{"type":"integer","example":42},"title":{"type":"string","example":"Technology News"},"content_url":{"type":"string","format":"url","example":"https://api.usea01.idio.episerver.net/1.0/sections/42/content"}}},"User":{"allOf":[{"$ref":"#/components/schemas/UserCore"},{"type":"object","additionalProperties":false,"required":["first_name","last_name","name","service_credentials","additional_info","identifiers"],"properties":{"name":{"type":"string","description":"Full name of the user.","example":"Jordan Lee"}}}]},"UserPartial":{"allOf":[{"$ref":"#/components/schemas/UserCore"},{"type":"object","additionalProperties":false}]},"UserCore":{"type":"object","additionalProperties":false,"required":["email"],"properties":{"first_name":{"type":"string","description":"First name of the user.","example":"Jordan"},"last_name":{"type":"string","description":"Last name of the user.","example":"Lee"},"email":{"type":"string","format":"email","description":"User's email address.","example":"jordan.lee@example.com"},"service_credentials":{"$ref":"#/components/schemas/ServiceCredentials"},"additional_info":{"$ref":"#/components/schemas/Map"},"identifiers":{"$ref":"#/components/schemas/Map"}}},"UserStub":{"type":"object","additionalProperties":false,"required":["id","full_details_url"],"properties":{"id":{"type":"integer","description":"Unique identifier of the user.","example":301},"full_details_url":{"type":"string","format":"url","description":"API URL to fetch full user details.","example":"https://api.usea01.idio.episerver.net/1.0/users/301"}}},"ServiceCredentials":{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/ServiceCredential"}},"ServiceCredential":{"type":"object","additionalProperties":false,"required":["service"],"properties":{"service":{"type":"string","enum":["facebook","twitter","linkedin"],"description":"The third-party service this credential belongs to."}},"discriminator":{"propertyName":"service"}},"ServiceCredentialFacebook":{"allOf":[{"$ref":"#/components/schemas/ServiceCredential"},{"type":"object","additionalProperties":false,"properties":{"access_token":{"type":"string"},"user_id":{"type":"integer"}}}]},"ServiceCredentialTwitter":{"allOf":[{"$ref":"#/components/schemas/ServiceCredential"},{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"secret":{"type":"string"}}}]},"ServiceCredentialLinkedIn":{"allOf":[{"$ref":"#/components/schemas/ServiceCredential"},{"type":"object","additionalProperties":false,"properties":{"access_token":{"type":"string"}}}]},"Map":{"type":"object","additionalProperties":{"type":"string"}},"ID":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","description":"Unique identifier.","example":"12345"}}},"Message":{"type":"object","additionalProperties":false,"required":["message"],"description":"Generic message response object returned by the API.","properties":{"message":{"type":"string","description":"The message content.","example":"User updated successfully."}}}}},"paths":{"/content":{"get":{"operationId":"contentList","summary":"List content","description":"Retrieve a paginated list of content items.","tags":["content"],"parameters":[{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/rpp"},{"$ref":"#/components/parameters/topics"}],"responses":{"200":{"$ref":"#/components/responses/ContentList"},"204":{"description":"No content available in the system"}}},"post":{"operationId":"contentImport","summary":"Import content","description":"Import a content item using a URL. The URL is queued for processing.","tags":["content"],"requestBody":{"required":true,"description":"A content URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentURL"}}}},"responses":{"202":{"description":"Content URL is queued for processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"},"example":{"message":"The Content has been queued for importing"}}}}}}},"/content/_filter":{"post":{"operationId":"contentSearch","summary":"Search content","description":"Retrieve a paginated list of content items matching a Lucene query.","tags":["content"],"parameters":[{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/rpp"},{"$ref":"#/components/parameters/topics"}],"requestBody":{"required":true,"description":"Lucene query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentQuery"}}}},"responses":{"200":{"$ref":"#/components/responses/ContentList"},"204":{"description":"No content matches the query"}}}},"/content/{id}":{"parameters":[{"$ref":"#/components/parameters/contentID"}],"get":{"operationId":"contentGet","summary":"Fetch content by ID","description":"Get detailed information about a specific content item.","tags":["content"],"responses":{"200":{"$ref":"#/components/responses/ContentItem"},"404":{"description":"Content does not exist"}}},"patch":{"operationId":"contentUpdate","summary":"Update content","description":"Update specific fields of a content item. Only 'Approved' and 'Featured' fields can be modified.","tags":["content"],"requestBody":{"required":true,"description":"Map of fields to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItemPartial"}}}},"responses":{"200":{"description":"Confirmation of successful update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"},"example":{"message":"Content updated successfully"}}}},"404":{"description":"Content does not exist"}}}},"/content/{id}/sections":{"parameters":[{"$ref":"#/components/parameters/contentID"}],"get":{"operationId":"contentSectionsList","summary":"List content sections","description":"Retrieve all sections containing the specified content item.","tags":["content"],"responses":{"200":{"description":"List of sections assigned to the content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentSectionList"}}}},"404":{"description":"Content does not exist"}}}},"/deliveries":{"get":{"operationId":"deliveriesList","summary":"List deliveries","description":"Retrieve all widget deliveries, including API keys where applicable.","tags":["deliveries"],"responses":{"200":{"description":"Map of all deliveries","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryMap"}}}},"204":{"description":"No active widget deliveries exist"}}}},"/deliveries/{key}":{"parameters":[{"$ref":"#/components/parameters/deliveryKey"}],"get":{"operationId":"deliveryGet","summary":"Fetch delivery","description":"Retrieve detailed information about a delivery using its API key. Use 'me' for the current delivery.","tags":["deliveries"],"responses":{"200":{"description":"Details of a single delivery","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Delivery"}}}},"404":{"description":"Delivery does not exist"}}}},"/recommendations/{id}":{"parameters":[{"$ref":"#/components/parameters/recommendationGUID"}],"patch":{"operationId":"recommendationUpdate","summary":"Update recommendation","description":"Mark a pending recommendation as read.","tags":["recommendations"],"requestBody":{"required":true,"description":"New pending state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationFlag"}}}},"responses":{"202":{"description":"Recommendation update accepted and queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"},"example":{"message":""}}}},"404":{"description":"Recommendation does not exist."}}}},"/sections/{id}":{"get":{"operationId":"sectionGetMany","summary":"Fetch section by ID","description":"Retrieve detailed information about a specific section.","tags":["sections"],"parameters":[{"$ref":"#/components/parameters/sectionIDList"}],"responses":{"200":{"description":"Array of sections.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionList"}}}},"404":{"description":"One or more of the sections do not exist."}}},"patch":{"operationId":"sectionUpdate","summary":"Update section","description":"Update section attributes, such as title and description.","tags":["sections"],"parameters":[{"$ref":"#/components/parameters/sectionID"}],"requestBody":{"required":true,"description":"Map of fields to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionPartial"}}}},"responses":{"200":{"description":"Section updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ID"}}}},"404":{"description":"Section does not exist"}}}},"/sections/{id}/content":{"parameters":[{"$ref":"#/components/parameters/sectionID"}],"get":{"operationId":"sectionContentList","summary":"List section content","description":"Retrieve a paginated list of content items assigned to the specified section.","tags":["sections"],"parameters":[{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/rpp"},{"$ref":"#/components/parameters/topics"}],"responses":{"200":{"$ref":"#/components/responses/ContentList"},"204":{"description":"Section exists but contains no content"},"404":{"description":"Section does not exist"}}}},"/users":{"post":{"operationId":"userCreate","summary":"Create a new user","description":"Create a new user. Only 'identifiers' and 'additional_info' fields are supported.","tags":["users"],"requestBody":{"required":true,"description":"A user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPartial"}}}},"responses":{"201":{"description":"User created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserStub"}}}}}}},"/users/{id}":{"parameters":[{"$ref":"#/components/parameters/userID"}],"get":{"operationId":"userGet","summary":"Fetch user by ID","description":"Retrieve detailed information about a specific user.","tags":["users"],"responses":{"200":{"description":"A single user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"},"example":{"first_name":"Jordan","last_name":"Lee","name":"Jordan Lee","email":"jordan.lee@example.com","service_credentials":[],"additional_info":{"plan":"enterprise"},"identifiers":{"crm_id":"CRM-00987"}}}}},"404":{"description":"User does not exist"}}},"put":{"operationId":"userUpdate","summary":"Update user","description":"Update an existing user. Only 'identifiers' and 'additional_info' fields are supported.","tags":["users"],"requestBody":{"required":true,"description":"A user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPartial"}}}},"responses":{"200":{"description":"User updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"},"example":{"message":"User 1 updated successfully"}}}},"404":{"description":"User does not exist"}}},"delete":{"operationId":"userDelete","summary":"Delete user","description":"Permanently delete the specified user.","tags":["users"],"responses":{"200":{"description":"Deletion successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"},"example":{"message":"User 1 deleted successfully"}}}},"404":{"description":"User does not exist"}}}},"/users/{id}/content":{"parameters":[{"$ref":"#/components/parameters/userID"}],"get":{"operationId":"userContentList","summary":"Fetch personalised content","description":"Paginated list of personalised content ordered by relevance to the specified user.","tags":["users"],"parameters":[{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/rpp"},{"$ref":"#/components/parameters/topics"},{"$ref":"#/components/parameters/no_fallback"},{"$ref":"#/components/parameters/record"}],"responses":{"200":{"$ref":"#/components/responses/UserContentList"},"204":{"description":"No content in system"},"404":{"description":"User does not exist"}}}},"/users/{id}/content/_filter":{"parameters":[{"$ref":"#/components/parameters/userID"}],"post":{"operationId":"userContentSearch","summary":"Search user content","description":"Paginated list of content matching a Lucene query ordered by relevance to the user.","tags":["users"],"parameters":[{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/rpp"},{"$ref":"#/components/parameters/topics"}],"requestBody":{"required":true,"description":"Lucene query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentQuery"}}}},"responses":{"200":{"$ref":"#/components/responses/UserContentList"},"204":{"description":"No content matching query"},"404":{"description":"User does not exist"}}}}}}