{"info":{"_postman_id":"633053d4-3a0a-4092-b139-d0a1aa152db9","name":"SEO Research Ambit API","description":"<html><head></head><body><h1 id=\"research-search-api\">Research Search API</h1>\n<p>A hybrid semantic + keyword search API for research documents powered by OpenSearch and SPECTER2 embeddings.</p>\n<h2 id=\"features\">Features</h2>\n<ul>\n<li><p><strong>Hybrid Search</strong>: Combines BM25 keyword search with SPECTER2 semantic embeddings</p>\n</li>\n<li><p><strong>N-gram Analyzers</strong>: Partial matching on author names, subject areas, and fields</p>\n</li>\n<li><p><strong>Faceted Search</strong>: Filter by year, document type, field, and subject area</p>\n</li>\n<li><p><strong>Flexible Sorting</strong>: Sort by relevance, date, or citations</p>\n</li>\n</ul>\n<h2 id=\"base-url\">Base URL</h2>\n<ul>\n<li><p>Local: <code>http://localhost:3000/api/v1</code></p>\n</li>\n<li><p>Production: Update the <code>http://localhost:3000/api/v1</code> variable</p>\n</li>\n</ul>\n<h2 id=\"authentication\">Authentication</h2>\n<p>No authentication required for search endpoints.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Research Search API","slug":"research-search-api"}],"owner":"32690520","collectionId":"633053d4-3a0a-4092-b139-d0a1aa152db9","publishedId":"2sB3dWqmb1","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-12-20T07:27:46.000Z"},"item":[{"name":"Search","item":[{"name":"Hybrid Search","id":"667e1750-4f3a-4f04-97c4-168668a4e15e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"query\": \"polymer degradation\",\n    \"page\": 1,\n    \"per_page\": 20,\n    \"sort\": \"relevance\"\n}"},"url":"http://localhost:3000/api/v1/search","description":"<h2 id=\"hybrid-search\">Hybrid Search</h2>\n<p>Search research documents using a combination of BM25 keyword matching and SPECTER2 semantic embeddings.</p>\n<h3 id=\"request-body\">Request Body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>query</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Search query (1-500 characters)</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>integer</td>\n<td>❌</td>\n<td>Page number (default: 1)</td>\n</tr>\n<tr>\n<td><code>per_page</code></td>\n<td>integer</td>\n<td>❌</td>\n<td>Results per page (1-100, default: 20)</td>\n</tr>\n<tr>\n<td><code>sort</code></td>\n<td>string</td>\n<td>❌</td>\n<td>Sort order: <code>relevance</code>, <code>date</code>, <code>citations</code></td>\n</tr>\n<tr>\n<td><code>filters</code></td>\n<td>object</td>\n<td>❌</td>\n<td>Filter options (see below)</td>\n</tr>\n<tr>\n<td><code>search_in</code></td>\n<td>array</td>\n<td>❌</td>\n<td>Fields to search: <code>title</code>, <code>abstract</code>, <code>author</code>, <code>subject_area</code>, <code>field</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"filter-options\">Filter Options</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>year_from</code></td>\n<td>integer</td>\n<td>Minimum publication year</td>\n</tr>\n<tr>\n<td><code>year_to</code></td>\n<td>integer</td>\n<td>Maximum publication year</td>\n</tr>\n<tr>\n<td><code>field_associated</code></td>\n<td>string</td>\n<td>Department/field filter</td>\n</tr>\n<tr>\n<td><code>document_type</code></td>\n<td>string</td>\n<td>Article, Review, Conference Paper, etc.</td>\n</tr>\n<tr>\n<td><code>subject_area</code></td>\n<td>array</td>\n<td>Subject area codes</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>Returns matching documents with facets for filtering and pagination info.</p>\n","urlObject":{"path":["search"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[{"id":"aac3d52f-1908-4cd8-99d9-2b24f9e3289d","name":"Success - Results Found","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"query\": \"polymer\"\n}"},"url":"http://localhost:3000/api/v1/search"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"results\": [\n        {\n            \"_id\": \"693ea76583acace877692939\",\n            \"title\": \"Interaction potential between polymer grafted nanosheets\",\n            \"abstract\": \"We examine the polymer mediated interaction...\",\n            \"authors\": [\n                {\n                    \"author_name\": \"Chokshi, P.\",\n                    \"author_affiliation\": \"Indian Institute of Technology Delhi\"\n                }\n            ],\n            \"publication_year\": 2019,\n            \"document_type\": \"Article\",\n            \"field_associated\": \"Chemical Engineering\",\n            \"citation_count\": 6\n        }\n    ],\n    \"facets\": {\n        \"years\": [{\"value\": 2024, \"count\": 79}],\n        \"document_types\": [{\"value\": \"Article\", \"count\": 150}],\n        \"fields\": [{\"value\": \"Chemical Engineering\", \"count\": 45}]\n    },\n    \"pagination\": {\n        \"page\": 1,\n        \"per_page\": 20,\n        \"total\": 250,\n        \"total_pages\": 13\n    },\n    \"cacheHit\": false\n}"}],"_postman_id":"667e1750-4f3a-4f04-97c4-168668a4e15e"},{"name":"Search with Filters","id":"39ef9f14-6199-4d44-a775-bc1c603f952e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"query\": \"machine learning\",\n    \"page\": 1,\n    \"per_page\": 10,\n    \"sort\": \"citations\",\n    \"filters\": {\n        \"year_from\": 2020,\n        \"year_to\": 2024,\n        \"field_associated\": \"Computer Science\",\n        \"document_type\": \"Article\"\n    }\n}"},"url":"http://localhost:3000/api/v1/search","description":"<h2 id=\"search-with-filters\">Search with Filters</h2>\n<p>Search with year range, field, and document type filters applied.</p>\n<h3 id=\"example-filters\">Example Filters</h3>\n<ul>\n<li><strong>Year Range</strong>: 2020-2024</li>\n<li><strong>Field</strong>: Computer Science</li>\n<li><strong>Document Type</strong>: Article</li>\n<li><strong>Sort</strong>: By citation count (most cited first)</li>\n</ul>\n","urlObject":{"path":["search"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"39ef9f14-6199-4d44-a775-bc1c603f952e"},{"name":"Search by Author (N-gram)","id":"6f30d32b-772d-4786-8c96-6defb1243b99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"query\": \"Sharma\",\n    \"search_in\": [\"author\"],\n    \"per_page\": 20\n}"},"url":"http://localhost:3000/api/v1/search","description":"<h2 id=\"search-by-author-name\">Search by Author Name</h2>\n<p>Search specifically in author names using N-gram partial matching.</p>\n<h3 id=\"n-gram-matching\">N-gram Matching</h3>\n<p>The API uses N-gram analyzers (2-4 characters) for partial matching:</p>\n<ul>\n<li>Searching \"Sha\" will match \"Sharma\", \"Shah\", \"Shankar\"</li>\n<li>Searching \"Kumar\" will match all variations</li>\n</ul>\n<h3 id=\"search_in-options\"><code>search_in</code> Options</h3>\n<ul>\n<li><code>author</code> - Author names only</li>\n<li><code>title</code> - Paper titles only</li>\n<li><code>abstract</code> - Abstracts only</li>\n<li><code>subject_area</code> - Subject areas</li>\n<li><code>field</code> - Associated fields</li>\n</ul>\n","urlObject":{"path":["search"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"6f30d32b-772d-4786-8c96-6defb1243b99"},{"name":"Search by Subject Area","id":"788bd58d-ea1d-4356-b42c-078a8266e0fb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"query\": \"Engineering\",\n    \"search_in\": [\"subject_area\", \"field\"],\n    \"per_page\": 20\n}"},"url":"http://localhost:3000/api/v1/search","description":"<h2 id=\"search-by-subject-area-or-field\">Search by Subject Area or Field</h2>\n<p>Search specifically in subject areas and associated fields.</p>\n<h3 id=\"example\">Example</h3>\n<p>Searching \"Eng\" will match:</p>\n<ul>\n<li>\"Chemical Engineering\"</li>\n<li>\"Mechanical Engineering\"</li>\n<li>\"Environmental Engineering\"</li>\n</ul>\n<h3 id=\"combined-field-search\">Combined Field Search</h3>\n<p>You can search in multiple fields by providing an array:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">\"search_in\": [\"subject_area\", \"field\"]\n</code></pre>\n","urlObject":{"path":["search"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"788bd58d-ea1d-4356-b42c-078a8266e0fb"},{"name":"Search Health Check","id":"abab03f2-3070-4510-afe3-c10ca2aeffec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/search/health","description":"<h2 id=\"health-check\">Health Check</h2>\n<p>Check the health status of search services including:</p>\n<ul>\n<li>OpenSearch connection</li>\n<li>Embedding service availability</li>\n<li>Redis cache status</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>Returns status of all dependent services.</p>\n","urlObject":{"path":["search","health"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[{"id":"c2e2701d-c785-41f8-a738-de7f78222a6d","name":"Healthy","originalRequest":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/search/health"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"healthy\",\n    \"services\": {\n        \"opensearch\": \"connected\",\n        \"embedding\": \"available\",\n        \"redis\": \"connected\"\n    }\n}"}],"_postman_id":"abab03f2-3070-4510-afe3-c10ca2aeffec"}],"id":"437c1f79-a1a0-4a43-aaa7-6af642fc369e","description":"<p>Search endpoints for finding research documents</p>\n","_postman_id":"437c1f79-a1a0-4a43-aaa7-6af642fc369e"},{"name":"Documents","item":[{"name":"Get Document by ID","id":"4d656f94-c21d-4067-82e6-cf9185251321","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/document/:id","description":"<h2 id=\"get-document-by-id\">Get Document by ID</h2>\n<p>Retrieve a single research document by its ID.</p>\n<h3 id=\"parameters\">Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>MongoDB ObjectId or OpenSearch document ID</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>Returns full document details including:</p>\n<ul>\n<li>Title and abstract</li>\n<li>Authors with affiliations</li>\n<li>Publication metadata</li>\n<li>Citation count</li>\n<li>Subject areas</li>\n<li>External links</li>\n</ul>\n","urlObject":{"path":["document",":id"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[{"id":"3a78be7b-2815-4510-83da-16c1677d1ef7","description":{"content":"<p>MongoDB ObjectId or OpenSearch document ID</p>\n","type":"text/plain"},"type":"any","value":"693ea76583acace877692939","key":"id"}]}},"response":[{"id":"8f90acf8-d14e-48ad-8665-8f41af393a8b","name":"Document Found","originalRequest":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/document/693ea76583acace877692939"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"document\": {\n        \"_id\": \"693ea76583acace877692939\",\n        \"title\": \"Interaction potential between polymer grafted nanosheets\",\n        \"abstract\": \"We examine the polymer mediated interaction between two brush coated nanosheets...\",\n        \"authors\": [\n            {\n                \"author_name\": \"Chokshi, P.\",\n                \"author_email\": \"paresh@chemical.iitd.ac.in\",\n                \"author_affiliation\": \"Indian Institute of Technology Delhi\"\n            }\n        ],\n        \"publication_year\": 2019,\n        \"document_type\": \"Article\",\n        \"field_associated\": \"Chemical Engineering\",\n        \"citation_count\": 6,\n        \"subject_area\": [\"Chemical Engineering\", \"Materials Science\"]\n    }\n}"},{"id":"567aee06-fd17-4fa4-af0f-90aa20e0f24b","name":"Document Not Found","originalRequest":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/document/invalid-id"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Not Found\",\n    \"message\": \"Document not found\",\n    \"statusCode\": 404\n}"}],"_postman_id":"4d656f94-c21d-4067-82e6-cf9185251321"},{"name":"Get Documents by Author","id":"5d35a96d-dce9-4a15-9766-4db72896880d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/documents/by-author/:authorId?page=1&per_page=20","description":"<h2 id=\"get-documents-by-author\">Get Documents by Author</h2>\n<p>Retrieve all research documents published by a specific author.</p>\n<h3 id=\"parameters\">Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Location</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>authorId</code></td>\n<td>string</td>\n<td>path</td>\n<td>Scopus Author ID</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>integer</td>\n<td>query</td>\n<td>Page number (default: 1)</td>\n</tr>\n<tr>\n<td><code>per_page</code></td>\n<td>integer</td>\n<td>query</td>\n<td>Results per page (1-100, default: 20)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>Returns paginated list of documents by the author.</p>\n","urlObject":{"path":["documents","by-author",":authorId"],"host":["http://localhost:3000/api/v1"],"query":[{"description":{"content":"<p>Page number (default: 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Results per page (1-100, default: 20)</p>\n","type":"text/plain"},"key":"per_page","value":"20"}],"variable":[{"id":"7f9eb7c4-bc85-4435-8f9b-036459cda6da","description":{"content":"<p>Scopus Author ID</p>\n","type":"text/plain"},"type":"any","value":"22952938400","key":"authorId"}]}},"response":[],"_postman_id":"5d35a96d-dce9-4a15-9766-4db72896880d"}],"id":"38bb7170-3db1-4619-b587-cb60ef144221","description":"<p>Endpoints for retrieving individual documents</p>\n","_postman_id":"38bb7170-3db1-4619-b587-cb60ef144221"},{"name":"Server","item":[{"name":"Server Health","id":"f4a47ae5-081c-494a-8d6b-a91dfd1b67a0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:3000/api/v1/../health","description":"<h2 id=\"server-health\">Server Health</h2>\n<p>Check overall server health status.</p>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET /health</code></p>\n<h3 id=\"response\">Response</h3>\n<p>Returns server status and uptime information.</p>\n","urlObject":{"path":["..","health"],"host":["http://localhost:3000/api/v1"],"query":[],"variable":[]}},"response":[{"id":"521933c8-9d14-4a34-85d3-bc58e5a2939e","name":"Healthy","originalRequest":{"method":"GET","header":[],"url":"http://localhost:3000/health"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"healthy\"\n}"}],"_postman_id":"f4a47ae5-081c-494a-8d6b-a91dfd1b67a0"}],"id":"3e150f20-f635-4c6b-9bcc-96695b5bfb02","description":"<p>Server health and status endpoints</p>\n","_postman_id":"3e150f20-f635-4c6b-9bcc-96695b5bfb02"}],"variable":[{"key":"base_url","value":"http://localhost:3000/api/v1","type":"string"}]}