{"note":"OpenAPI conversion -- returning structured metadata","name":"typesense","description":"Typesense API","version":"30.0","base_url":"http://localhost:8108","endpoints":79,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Typesense API\n@base http://localhost:8108\n@version 30.0\n@auth ApiKey X-TYPESENSE-API-KEY in header\n@endpoints 79\n@hint download_for_search\n@toc collections(14), synonym_sets(8), curation_sets(8), conversations(5), keys(4), aliases(4), debug(1), health(1), operations(5), config(1), multi_search(1), analytics(9), metrics.json(1), stats.json(1), stopwords(4), presets(4), stemming(3), nl_search_models(5)\n\n@group collections\n@endpoint GET /collections\n@desc List all collections\n@optional {getCollectionsParameters: map}\n@returns(200) List of all collections\n\n@endpoint POST /collections\n@desc Create a new collection\n@required {name: str # Name of the collection, fields: [map{name!: str, type!: str, optional: bool, facet: bool, index: bool, locale: str, sort: bool, infix: bool, reference: str, async_reference: bool, num_dim: int, drop: bool, store: bool, vec_dist: str, range_index: bool, stem: bool, stem_dictionary: str, token_separators: [str], symbols_to_index: [str], embed: map}] # A list of fields for querying, filtering and faceting}\n@optional {default_sorting_field: str= # The name of an int32 / float field that determines the order in which the search results are ranked when a sort_by clause is not provided during searching. This field must indicate some kind of popularity., token_separators: [str]= # List of symbols or special characters to be used for splitting the text into individual words in addition to space and new-line characters., synonym_sets: [str] # List of synonym set names to associate with this collection, enable_nested_fields: bool=false # Enables experimental support at a collection level for nested object or object array fields. This field is only available if the Typesense server is version `0.24.0.rcn34` or later., symbols_to_index: [str]= # List of symbols or special characters to be indexed., voice_query_model: map{model_name: str} # Configuration for the voice query model, metadata: map # Optional details about the collection, e.g., when it was created, who created it etc.}\n@returns(201) Collection successfully created\n@errors {400: Bad request, see error message for details, 409: Collection already exists}\n\n@endpoint GET /collections/{collectionName}\n@desc Retrieve a single collection\n@required {collectionName: str # The name of the collection to retrieve}\n@returns(200) Collection fetched\n@errors {404: Collection not found}\n\n@endpoint PATCH /collections/{collectionName}\n@desc Update a collection\n@required {collectionName: str # The name of the collection to update, fields: [map{name!: str, type!: str, optional: bool, facet: bool, index: bool, locale: str, sort: bool, infix: bool, reference: str, async_reference: bool, num_dim: int, drop: bool, store: bool, vec_dist: str, range_index: bool, stem: bool, stem_dictionary: str, token_separators: [str], symbols_to_index: [str], embed: map}] # A list of fields for querying, filtering and faceting}\n@optional {synonym_sets: [str] # List of synonym set names to associate with this collection, metadata: map # Optional details about the collection, e.g., when it was created, who created it etc.}\n@returns(200) {fields: [map], synonym_sets: [str], metadata: map} # The updated partial collection schema\n@errors {400: Bad request, see error message for details, 404: The collection was not found}\n\n@endpoint DELETE /collections/{collectionName}\n@desc Delete a collection\n@required {collectionName: str # The name of the collection to delete}\n@returns(200) Collection deleted\n@errors {404: Collection not found}\n\n@endpoint POST /collections/{collectionName}/documents\n@desc Index a document\n@required {collectionName: str # The name of the collection to add the document to}\n@optional {action: str # Additional action to perform, dirty_values: str # Dealing with Dirty Data}\n@returns(201) Document successfully created/indexed\n@errors {404: Collection not found}\n\n@endpoint PATCH /collections/{collectionName}/documents\n@desc Update documents with conditional query\n@required {collectionName: str # The name of the collection to update documents in}\n@optional {updateDocumentsParameters: map}\n@returns(200) {num_updated: int} # The response contains a single field, `num_updated`, indicating the number of documents affected.\n@errors {400: Bad request, see error message for details, 404: The collection was not found}\n\n@endpoint DELETE /collections/{collectionName}/documents\n@desc Delete a bunch of documents\n@required {collectionName: str # The name of the collection to delete documents from}\n@optional {deleteDocumentsParameters: map}\n@returns(200) {num_deleted: int} # Documents successfully deleted\n@errors {404: Collection not found}\n\n@endpoint GET /collections/{collectionName}/documents/search\n@desc Search for documents in a collection\n@required {collectionName: str # The name of the collection to search for the document under, searchParameters: map}\n@returns(200) {facet_counts: [map], found: int, found_docs: int, search_time_ms: int, out_of: int, search_cutoff: bool, page: int, grouped_hits: [map], hits: [map], request_params: map{collection_name: str, first_q: str, q: str, per_page: int, voice_query: map{transcribed_query: str}}, conversation: map{answer: str, conversation_history: [map], conversation_id: str, query: str}, union_request_params: [map], metadata: map} # Search results\n@errors {400: Bad request, see error message for details, 404: The collection or field was not found}\n\n@endgroup\n\n@group synonym_sets\n@endpoint GET /synonym_sets\n@desc List all synonym sets\n@returns(200) List of all synonym sets\n\n@endpoint GET /synonym_sets/{synonymSetName}\n@desc Retrieve a synonym set\n@required {synonymSetName: str # The name of the synonym set to retrieve}\n@returns(200) Synonym set fetched\n@errors {404: Synonym set not found}\n\n@endpoint PUT /synonym_sets/{synonymSetName}\n@desc Create or update a synonym set\n@required {synonymSetName: str # The name of the synonym set to create/update, items: [any] # Array of synonym items}\n@returns(200) Synonym set successfully created/updated\n@errors {400: Bad request, see error message for details}\n\n@endpoint DELETE /synonym_sets/{synonymSetName}\n@desc Delete a synonym set\n@required {synonymSetName: str # The name of the synonym set to delete}\n@returns(200) {name: str} # Synonym set successfully deleted\n@errors {404: Synonym set not found}\n\n@endpoint GET /synonym_sets/{synonymSetName}/items\n@desc List items in a synonym set\n@required {synonymSetName: str # The name of the synonym set to retrieve items for}\n@returns(200) List of synonym items\n@errors {404: Synonym set not found}\n\n@endpoint GET /synonym_sets/{synonymSetName}/items/{itemId}\n@desc Retrieve a synonym set item\n@required {synonymSetName: str # The name of the synonym set, itemId: str # The id of the synonym item to retrieve}\n@returns(200) Synonym item fetched\n@errors {404: Synonym item not found}\n\n@endpoint PUT /synonym_sets/{synonymSetName}/items/{itemId}\n@desc Create or update a synonym set item\n@required {synonymSetName: str # The name of the synonym set, itemId: str # The id of the synonym item to upsert, synonyms: [str] # Array of words that should be considered as synonyms}\n@optional {root: str # For 1-way synonyms, indicates the root word that words in the synonyms parameter map to, locale: str # Locale for the synonym, leave blank to use the standard tokenizer, symbols_to_index: [str] # By default, special characters are dropped from synonyms. Use this attribute to specify which special characters should be indexed as is}\n@returns(200) Synonym item successfully created/updated\n@errors {400: Bad request, see error message for details}\n\n@endpoint DELETE /synonym_sets/{synonymSetName}/items/{itemId}\n@desc Delete a synonym set item\n@required {synonymSetName: str # The name of the synonym set, itemId: str # The id of the synonym item to delete}\n@returns(200) {id: str} # Synonym item successfully deleted\n@errors {404: Synonym item not found}\n\n@endgroup\n\n@group curation_sets\n@endpoint GET /curation_sets\n@desc List all curation sets\n@returns(200) List of all curation sets\n\n@endpoint GET /curation_sets/{curationSetName}\n@desc Retrieve a curation set\n@required {curationSetName: str # The name of the curation set to retrieve}\n@returns(200) Curation set fetched\n@errors {404: Curation set not found}\n\n@endpoint PUT /curation_sets/{curationSetName}\n@desc Create or update a curation set\n@required {curationSetName: str # The name of the curation set to create/update, items: [map{rule!: map, includes: [map], excludes: [map], filter_by: str, remove_matched_tokens: bool, metadata: map, sort_by: str, replace_query: str, filter_curated_hits: bool, effective_from_ts: int, effective_to_ts: int, stop_processing: bool, id: str}] # Array of curation items}\n@optional {description: str # Optional description for the curation set}\n@returns(200) Curation set successfully created/updated\n@errors {400: Bad request, see error message for details}\n\n@endpoint DELETE /curation_sets/{curationSetName}\n@desc Delete a curation set\n@required {curationSetName: str # The name of the curation set to delete}\n@returns(200) {name: str} # Curation set successfully deleted\n@errors {404: Curation set not found}\n\n@endpoint GET /curation_sets/{curationSetName}/items\n@desc List items in a curation set\n@required {curationSetName: str # The name of the curation set to retrieve items for}\n@returns(200) List of curation items\n@errors {404: Curation set not found}\n\n@endpoint GET /curation_sets/{curationSetName}/items/{itemId}\n@desc Retrieve a curation set item\n@required {curationSetName: str # The name of the curation set, itemId: str # The id of the curation item to retrieve}\n@returns(200) Curation item fetched\n@errors {404: Curation item not found}\n\n@endpoint PUT /curation_sets/{curationSetName}/items/{itemId}\n@desc Create or update a curation set item\n@required {curationSetName: str # The name of the curation set, itemId: str # The id of the curation item to upsert, rule: map{tags: [str], query: str, match: str, filter_by: str}}\n@optional {includes: [map{id!: str, position!: int}] # List of document `id`s that should be included in the search results with their corresponding `position`s., excludes: [map{id!: str}] # List of document `id`s that should be excluded from the search results., filter_by: str # A filter by clause that is applied to any search query that matches the curation rule., remove_matched_tokens: bool # Indicates whether search query tokens that exist in the curation's rule should be removed from the search query., metadata: map # Return a custom JSON object in the Search API response, when this rule is triggered. This can can be used to display a pre-defined message (eg: a promotion banner) on the front-end when a particular rule is triggered., sort_by: str # A sort by clause that is applied to any search query that matches the curation rule., replace_query: str # Replaces the current search query with this value, when the search query matches the curation rule., filter_curated_hits: bool # When set to true, the filter conditions of the query is applied to the curated records as well. Default: false., effective_from_ts: int # A Unix timestamp that indicates the date/time from which the curation will be active. You can use this to create rules that start applying from a future point in time., effective_to_ts: int # A Unix timestamp that indicates the date/time until which the curation will be active. You can use this to create rules that stop applying after a period of time., stop_processing: bool # When set to true, curation processing will stop at the first matching rule. When set to false curation processing will continue and multiple curation actions will be triggered in sequence. Curations are processed in the lexical sort order of their id field., id: str # ID of the curation item}\n@returns(200) Curation item successfully created/updated\n@errors {400: Bad request, see error message for details}\n\n@endpoint DELETE /curation_sets/{curationSetName}/items/{itemId}\n@desc Delete a curation set item\n@required {curationSetName: str # The name of the curation set, itemId: str # The id of the curation item to delete}\n@returns(200) {id: str} # Curation item successfully deleted\n@errors {404: Curation item not found}\n\n@endgroup\n\n@group collections\n@endpoint GET /collections/{collectionName}/documents/export\n@desc Export all documents in a collection\n@required {collectionName: str # The name of the collection}\n@optional {exportDocumentsParameters: map}\n@returns(200) Exports all the documents in a given collection.\n@errors {404: The collection was not found}\n\n@endpoint POST /collections/{collectionName}/documents/import\n@desc Import documents into a collection\n@required {collectionName: str # The name of the collection}\n@optional {importDocumentsParameters: map}\n@returns(200) Result of the import operation. Each line of the response indicates the result of each document present in the request body (in the same order). If the import of a single document fails, it does not affect the other documents. If there is a failure, the response line will include a corresponding error message and as well as the actual document content.\n@errors {400: Bad request, see error message for details, 404: The collection was not found}\n\n@endpoint GET /collections/{collectionName}/documents/{documentId}\n@desc Retrieve a document\n@required {collectionName: str # The name of the collection to search for the document under, documentId: str # The Document ID}\n@returns(200) The document referenced by the ID\n@errors {404: The document or collection was not found}\n\n@endpoint PATCH /collections/{collectionName}/documents/{documentId}\n@desc Update a document\n@required {collectionName: str # The name of the collection to search for the document under, documentId: str # The Document ID}\n@optional {dirty_values: str # Dealing with Dirty Data}\n@returns(200) The document referenced by the ID was updated\n@errors {404: The document or collection was not found}\n\n@endpoint DELETE /collections/{collectionName}/documents/{documentId}\n@desc Delete a document\n@required {collectionName: str # The name of the collection to search for the document under, documentId: str # The Document ID}\n@returns(200) The document referenced by the ID was deleted\n@errors {404: The document or collection was not found}\n\n@endgroup\n\n@group conversations\n@endpoint GET /conversations/models\n@desc List all conversation models\n@returns(200) List of all conversation models\n\n@endpoint POST /conversations/models\n@desc Create a conversation model\n@returns(201) Created Conversation Model\n@errors {400: Bad request, see error message for details}\n\n@endpoint GET /conversations/models/{modelId}\n@desc Retrieve a conversation model\n@required {modelId: str # The id of the conversation model to retrieve}\n@returns(200) A conversation model\n\n@endpoint PUT /conversations/models/{modelId}\n@desc Update a conversation model\n@required {modelId: str # The id of the conversation model to update}\n@optional {id: str # An explicit id for the model, otherwise the API will return a response with an auto-generated conversation model id., model_name: str # Name of the LLM model offered by OpenAI, Cloudflare or vLLM, api_key: str # The LLM service's API Key, history_collection: str # Typesense collection that stores the historical conversations, account_id: str # LLM service's account ID (only applicable for Cloudflare), system_prompt: str # The system prompt that contains special instructions to the LLM, ttl: int # Time interval in seconds after which the messages would be deleted. Default: 86400 (24 hours), max_bytes: int # The maximum number of bytes to send to the LLM in every API call. Consult the LLM's documentation on the number of bytes supported in the context window., vllm_url: str # URL of vLLM service}\n@returns(200) The conversation model was successfully updated\n\n@endpoint DELETE /conversations/models/{modelId}\n@desc Delete a conversation model\n@required {modelId: str # The id of the conversation model to delete}\n@returns(200) The conversation model was successfully deleted\n\n@endgroup\n\n@group keys\n@endpoint GET /keys\n@desc Retrieve (metadata about) all keys.\n@returns(200) {keys: [any]} # List of all keys\n\n@endpoint POST /keys\n@desc Create an API Key\n@required {description: str, actions: [str], collections: [str]}\n@optional {value: str, expires_at: int(int64)}\n@returns(201) Created API key\n@errors {400: Bad request, see error message for details, 409: API key generation conflict}\n\n@endpoint GET /keys/{keyId}\n@desc Retrieve (metadata about) a key\n@required {keyId: int(int64) # The ID of the key to retrieve}\n@returns(200) The key referenced by the ID\n@errors {404: The key was not found}\n\n@endpoint DELETE /keys/{keyId}\n@desc Delete an API key given its ID.\n@required {keyId: int(int64) # The ID of the key to delete}\n@returns(200) {id: int(int64)} # The key referenced by the ID\n@errors {400: Bad request, see error message for details, 404: Key not found}\n\n@endgroup\n\n@group aliases\n@endpoint GET /aliases\n@desc List all aliases\n@returns(200) {aliases: [map]} # List of all collection aliases\n\n@endpoint PUT /aliases/{aliasName}\n@desc Create or update a collection alias\n@required {aliasName: str # The name of the alias to create/update, collection_name: str # Name of the collection you wish to map the alias to}\n@returns(200) {name: str, collection_name: str} # The collection alias was created/updated\n@errors {400: Bad request, see error message for details, 404: Alias not found}\n\n@endpoint GET /aliases/{aliasName}\n@desc Retrieve an alias\n@required {aliasName: str # The name of the alias to retrieve}\n@returns(200) {name: str, collection_name: str} # Collection alias fetched\n@errors {404: The alias was not found}\n\n@endpoint DELETE /aliases/{aliasName}\n@desc Delete an alias\n@required {aliasName: str # The name of the alias to delete}\n@returns(200) {name: str, collection_name: str} # Collection alias was deleted\n@errors {404: Alias not found}\n\n@endgroup\n\n@group debug\n@endpoint GET /debug\n@desc Print debugging information\n@returns(200) {version: str} # Debugging information\n\n@endgroup\n\n@group health\n@endpoint GET /health\n@desc Checks if Typesense server is ready to accept requests.\n@returns(200) {ok: bool} # Search service is ready for requests.\n\n@endgroup\n\n@group operations\n@endpoint GET /operations/schema_changes\n@desc Get the status of in-progress schema change operations\n@returns(200) List of schema changes in progress\n\n@endpoint POST /operations/snapshot\n@desc Creates a point-in-time snapshot of a Typesense node's state and data in the specified directory.\n@required {snapshot_path: str # The directory on the server where the snapshot should be saved.}\n@returns(201) {success: bool} # Snapshot is created.\n\n@endpoint POST /operations/vote\n@desc Triggers a follower node to initiate the raft voting process, which triggers leader re-election.\n@returns(200) {success: bool} # Re-election is performed.\n\n@endpoint POST /operations/cache/clear\n@desc Clear the cached responses of search requests in the LRU cache.\n@returns(200) {success: bool} # Clear cache succeeded.\n\n@endpoint POST /operations/db/compact\n@desc Compacting the on-disk database\n@returns(200) {success: bool} # Compacting the on-disk database succeeded.\n\n@endgroup\n\n@group config\n@endpoint POST /config\n@desc Toggle Slow Request Log\n@required {log-slow-requests-time-ms: int}\n@returns(200) {success: bool} # Toggle Slow Request Log database succeeded.\n\n@endgroup\n\n@group multi_search\n@endpoint POST /multi_search\n@desc send multiple search requests in a single HTTP request\n@required {multiSearchParameters: map, searches: [any]}\n@optional {union: bool=false # When true, merges the search results from each search query into a single ordered set of hits.}\n@returns(200) {results: [any], conversation: map{answer: str, conversation_history: [map], conversation_id: str, query: str}} # Search results\n@errors {400: Bad request, see error message for details}\n\n@endgroup\n\n@group analytics\n@endpoint POST /analytics/events\n@desc Create an analytics event\n@required {name: str # Name of the analytics rule this event corresponds to, event_type: str # Type of event (e.g., click, conversion, query, visit), data: map{user_id: str, doc_id: str, doc_ids: [str], q: str, analytics_tag: str} # Event payload}\n@returns(200) {ok: bool} # Analytics event successfully created\n@errors {400: Bad request, see error message for details}\n\n@endpoint GET /analytics/events\n@desc Retrieve analytics events\n@required {user_id: str, name: str # Analytics rule name, n: int # Number of events to return (max 1000)}\n@returns(200) {events: [map]} # Events fetched\n@errors {400: Bad request, see error message for details}\n\n@endpoint POST /analytics/flush\n@desc Flush in-memory analytics to disk\n@returns(200) {ok: bool} # Flush triggered\n\n@endpoint GET /analytics/status\n@desc Get analytics subsystem status\n@returns(200) {popular_prefix_queries: int, nohits_prefix_queries: int, log_prefix_queries: int, query_log_events: int, query_counter_events: int, doc_log_events: int, doc_counter_events: int} # Status fetched\n\n@endpoint POST /analytics/rules\n@desc Create analytics rule(s)\n@returns(200) Analytics rule(s) successfully created\n@errors {400: Bad request, see error message for details}\n\n@endpoint GET /analytics/rules\n@desc Retrieve analytics rules\n@optional {rule_tag: str # Filter rules by rule_tag}\n@returns(200) Analytics rules fetched\n\n@endpoint PUT /analytics/rules/{ruleName}\n@desc Upserts an analytics rule\n@required {ruleName: str # The name of the analytics rule to upsert}\n@optional {name: str, rule_tag: str, params: map{destination_collection: str, limit: int, capture_search_requests: bool, meta_fields: [str], expand_query: bool, counter_field: str, weight: int}}\n@returns(200) Analytics rule successfully upserted\n@errors {400: Bad request, see error message for details}\n\n@endpoint GET /analytics/rules/{ruleName}\n@desc Retrieves an analytics rule\n@required {ruleName: str # The name of the analytics rule to retrieve}\n@returns(200) Analytics rule fetched\n@errors {404: Analytics rule not found}\n\n@endpoint DELETE /analytics/rules/{ruleName}\n@desc Delete an analytics rule\n@required {ruleName: str # The name of the analytics rule to delete}\n@returns(200) Analytics rule deleted\n@errors {404: Analytics rule not found}\n\n@endgroup\n\n@group metrics.json\n@endpoint GET /metrics.json\n@desc Get current RAM, CPU, Disk & Network usage metrics.\n@returns(200) Metrics fetched.\n\n@endgroup\n\n@group stats.json\n@endpoint GET /stats.json\n@desc Get stats about API endpoints.\n@returns(200) {delete_latency_ms: num(double), delete_requests_per_second: num(double), import_latency_ms: num(double), import_requests_per_second: num(double), latency_ms: map, overloaded_requests_per_second: num(double), pending_write_batches: num(double), requests_per_second: map, search_latency_ms: num(double), search_requests_per_second: num(double), total_requests_per_second: num(double), write_latency_ms: num(double), write_requests_per_second: num(double)} # Stats fetched.\n\n@endgroup\n\n@group stopwords\n@endpoint GET /stopwords\n@desc Retrieves all stopwords sets.\n@returns(200) {stopwords: [map]} # Stopwords sets fetched.\n\n@endpoint PUT /stopwords/{setId}\n@desc Upserts a stopwords set.\n@required {setId: str # The ID of the stopwords set to upsert., stopwords: [str]}\n@optional {locale: str}\n@returns(200) {id: str, stopwords: [str], locale: str} # Stopwords set successfully upserted.\n@errors {400: Bad request, see error message for details.}\n\n@endpoint GET /stopwords/{setId}\n@desc Retrieves a stopwords set.\n@required {setId: str # The ID of the stopwords set to retrieve.}\n@returns(200) {stopwords: map{id: str, stopwords: [str], locale: str}} # Stopwords set fetched.\n@errors {404: Stopwords set not found.}\n\n@endpoint DELETE /stopwords/{setId}\n@desc Delete a stopwords set.\n@required {setId: str # The ID of the stopwords set to delete.}\n@returns(200) {id: str} # Stopwords set rule deleted.\n@errors {404: Stopwords set not found.}\n\n@endgroup\n\n@group presets\n@endpoint GET /presets\n@desc Retrieves all presets.\n@returns(200) {presets: [any]} # Presets fetched.\n\n@endpoint GET /presets/{presetId}\n@desc Retrieves a preset.\n@required {presetId: str # The ID of the preset to retrieve.}\n@returns(200) Preset fetched.\n@errors {404: Preset not found.}\n\n@endpoint PUT /presets/{presetId}\n@desc Upserts a preset.\n@required {presetId: str # The name of the preset set to upsert., value: any}\n@returns(200) Preset successfully upserted.\n@errors {400: Bad request, see error message for details}\n\n@endpoint DELETE /presets/{presetId}\n@desc Delete a preset.\n@required {presetId: str # The ID of the preset to delete.}\n@returns(200) {name: str} # Preset deleted.\n@errors {404: Preset not found.}\n\n@endgroup\n\n@group stemming\n@endpoint GET /stemming/dictionaries\n@desc List all stemming dictionaries\n@returns(200) {dictionaries: [str]} # List of all dictionaries\n\n@endpoint GET /stemming/dictionaries/{dictionaryId}\n@desc Retrieve a stemming dictionary\n@required {dictionaryId: str # The ID of the dictionary to retrieve}\n@returns(200) {id: str, words: [map]} # Stemming dictionary details\n@errors {404: Dictionary not found}\n\n@endpoint POST /stemming/dictionaries/import\n@desc Import a stemming dictionary\n@required {id: str # The ID to assign to the dictionary}\n@returns(200) Dictionary successfully imported\n@errors {400: Bad request, see error message for details}\n\n@endgroup\n\n@group nl_search_models\n@endpoint GET /nl_search_models\n@desc List all NL search models\n@returns(200) List of all NL search models\n\n@endpoint POST /nl_search_models\n@desc Create a NL search model\n@returns(201) NL search model successfully created\n@errors {400: Bad request, see error message for details}\n\n@endpoint GET /nl_search_models/{modelId}\n@desc Retrieve a NL search model\n@required {modelId: str # The ID of the NL search model to retrieve}\n@returns(200) NL search model fetched\n@errors {404: NL search model not found}\n\n@endpoint PUT /nl_search_models/{modelId}\n@desc Update a NL search model\n@required {modelId: str # The ID of the NL search model to update}\n@returns(200) NL search model successfully updated\n@errors {400: Bad request, see error message for details, 404: NL search model not found}\n\n@endpoint DELETE /nl_search_models/{modelId}\n@desc Delete a NL search model\n@required {modelId: str # The ID of the NL search model to delete}\n@returns(200) {id: str} # NL search model successfully deleted\n@errors {404: NL search model not found}\n\n@endgroup\n\n@end\n"}