This workflow corresponds to n8n.io template #10314 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "kUTC73D6gGpNDtiq",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI-Powered Qwen-Max Journal Paper Generator from Title and Abstract",
"tags": [],
"nodes": [
{
"id": "fc6d2f46-8469-462f-a1ac-1a8e0ef1e34a",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
912,
576
],
"parameters": {
"path": "generate-paper",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "0d552fde-1c24-46a9-bd40-4c6b6e61b8d6",
"name": "Extract Input Data",
"type": "n8n-nodes-base.set",
"position": [
1136,
576
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1",
"name": "paperTitle",
"type": "string",
"value": "={{ $json.body.title }}"
},
{
"id": "a2",
"name": "paperAbstract",
"type": "string",
"value": "={{ $json.body.abstract }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "57b17808-e757-46c3-bdae-ec214be11adc",
"name": "Search CrossRef",
"type": "n8n-nodes-base.httpRequest",
"position": [
1360,
384
],
"parameters": {
"url": "https://api.crossref.org/works",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{
"name": "query.title",
"value": "={{ $json.paperTitle }}"
},
{
"name": "rows",
"value": "12"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "015359f6-359f-4fc0-8c2d-8cff17be10e9",
"name": "Search Semantic Scholar",
"type": "n8n-nodes-base.httpRequest",
"position": [
1360,
576
],
"parameters": {
"url": "https://api.semanticscholar.org/graph/v1/paper/search",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "={{ $('Extract Input Data').item.json.paperTitle }}"
},
{
"name": "limit",
"value": "12"
},
{
"name": "fields",
"value": "title,authors,year,abstract,citationCount,url,venue,publicationDate"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "6374ccb8-2ed8-4da5-9965-62e2a1fb2065",
"name": "Search OpenAlex",
"type": "n8n-nodes-base.httpRequest",
"position": [
1360,
768
],
"parameters": {
"url": "https://api.openalex.org/works",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "search",
"value": "={{ $('Extract Input Data').item.json.paperTitle }}"
},
{
"name": "per-page",
"value": "11"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "ca5b6a0d-6580-4e58-9ab8-ccb0e8abcd3b",
"name": "Merge Reference Sources",
"type": "n8n-nodes-base.merge",
"position": [
1584,
480
],
"parameters": {
"mode": "combine",
"options": {}
},
"typeVersion": 3
},
{
"id": "6ee4af2c-cf29-4d74-82f5-97cc69ce5ce7",
"name": "Process References",
"type": "n8n-nodes-base.code",
"position": [
1744,
480
],
"parameters": {
"jsCode": "const crossrefData = $input.first().json.message?.items || [];\nconst semanticData = $input.all()[1]?.json?.data || [];\nconst openalexData = $input.all()[2]?.json?.results || [];\n\nconst references = [];\n\n// Process CrossRef papers\ncrossrefData.forEach((paper, idx) => {\n references.push({\n id: `ref${references.length + 1}`,\n title: paper.title?.[0] || 'Unknown Title',\n authors: paper.author?.map(a => `${a.given} ${a.family}`).join(', ') || 'Unknown Author',\n year: paper.published?.['date-parts']?.[0]?.[0] || 'n.d.',\n venue: paper['container-title']?.[0] || 'Unknown Venue',\n doi: paper.DOI || '',\n url: paper.URL || '',\n abstract: paper.abstract || '',\n source: 'CrossRef'\n });\n});\n\n// Process Semantic Scholar papers\nsemanticData.forEach((paper, idx) => {\n references.push({\n id: `ref${references.length + 1}`,\n title: paper.title || 'Unknown Title',\n authors: paper.authors?.map(a => a.name).join(', ') || 'Unknown Author',\n year: paper.year || 'n.d.',\n venue: paper.venue || 'Unknown Venue',\n doi: '',\n url: paper.url || '',\n abstract: paper.abstract || '',\n citationCount: paper.citationCount || 0,\n source: 'Semantic Scholar'\n });\n});\n\n// Process OpenAlex papers\nopenalexData.forEach((paper, idx) => {\n references.push({\n id: `ref${references.length + 1}`,\n title: paper.title || 'Unknown Title',\n authors: paper.authorships?.map(a => a.author?.display_name).filter(Boolean).join(', ') || 'Unknown Author',\n year: paper.publication_year || 'n.d.',\n venue: paper.primary_location?.source?.display_name || 'Unknown Venue',\n doi: paper.doi || '',\n url: paper.doi ? `https://doi.org/${paper.doi.replace('https://doi.org/', '')}` : '',\n abstract: paper.abstract || '',\n source: 'OpenAlex'\n });\n});\n\n// Remove duplicates based on title similarity\nconst uniqueRefs = [];\nconst seenTitles = new Set();\n\nreferences.forEach(ref => {\n const normalizedTitle = ref.title.toLowerCase().trim();\n if (!seenTitles.has(normalizedTitle)) {\n seenTitles.add(normalizedTitle);\n uniqueRefs.push(ref);\n }\n});\n\nreturn [{ json: { references: uniqueRefs.slice(0, 35) } }];"
},
"typeVersion": 2
},
{
"id": "e037dbf7-bdab-4bf6-84db-dce20b0c67dd",
"name": "Prepare AI Context",
"type": "n8n-nodes-base.set",
"position": [
1904,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1",
"name": "paperTitle",
"type": "string",
"value": "={{ $('Extract Input Data').item.json.paperTitle }}"
},
{
"id": "a2",
"name": "paperAbstract",
"type": "string",
"value": "={{ $('Extract Input Data').item.json.paperAbstract }}"
},
{
"id": "a3",
"name": "references",
"type": "array",
"value": "={{ $json.references }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "798b2912-20b4-4cfe-97ee-bffa0c0620e6",
"name": "AI - Introduction",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2048,
480
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Introduction section for an academic paper. Use the provided references to support your writing with proper in-text citations in APA format (Author, Year). Ensure the introduction:\n1. Provides background context\n2. Establishes the research gap\n3. States the research objectives\n4. Outlines the paper structure\n5. Uses relevant citations from the reference list\n6. Is original and avoids plagiarism\n7. Is approximately 800-1000 words\n\nFormat citations as: (Smith, 2020) or Smith (2020) found that..."
}
},
"typeVersion": 1.7
},
{
"id": "7517912b-3040-4395-934e-a4de5188e1f1",
"name": "AI - Literature Review",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2400,
552
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Literature Review section for an academic paper. Use the provided references extensively to support your writing with proper in-text citations in APA format. Ensure the literature review:\n1. Synthesizes existing research thematically\n2. Identifies trends and patterns in the literature\n3. Highlights gaps and contradictions\n4. Organizes content logically by themes or chronologically\n5. Uses citations from the reference list extensively (aim for 15-20 citations)\n6. Is original and avoids plagiarism\n7. Is approximately 1500-2000 words\n\nFormat citations properly and ensure smooth transitions between topics."
}
},
"typeVersion": 1.7
},
{
"id": "85a4abe9-a9db-4d93-bba0-808527ac92bb",
"name": "AI - Methodology",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2672,
624
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Methodology section for an academic paper. Based on the paper title and abstract, create a detailed methodology that:\n1. Describes the research design and approach\n2. Explains data collection methods\n3. Details analysis techniques\n4. Justifies methodological choices with citations\n5. Addresses validity and reliability\n6. Uses relevant methodological references\n7. Is original and avoids plagiarism\n8. Is approximately 1000-1200 words\n\nFormat citations as: (Author, Year) and ensure the methodology is coherent and replicable."
}
},
"typeVersion": 1.7
},
{
"id": "2b0d308d-596d-4f00-8b44-a7a1f85e2581",
"name": "AI - Results",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2944,
624
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Results section for an academic paper. Based on the methodology and research context, create detailed results that:\n1. Present findings clearly and objectively\n2. Use appropriate data presentation formats (describe tables/figures conceptually)\n3. Highlight key findings without interpretation\n4. Reference relevant supporting studies where appropriate\n5. Maintain academic rigor\n6. Is original and avoids plagiarism\n7. Is approximately 1000-1200 words\n\nNote: Since this is a generated paper, create plausible results based on the research topic and methodology."
}
},
"typeVersion": 1.7
},
{
"id": "e7ef23a5-69ac-4929-9652-61e98d1d0bd6",
"name": "AI - Discussion",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3296,
624
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Discussion section for an academic paper. Based on all previous sections, create a discussion that:\n1. Interprets the results in context of existing literature\n2. Compares findings with cited studies\n3. Addresses research questions/hypotheses\n4. Discusses implications for theory and practice\n5. Acknowledges limitations\n6. Uses extensive citations to support interpretations\n7. Is original and avoids plagiarism\n8. Is approximately 1200-1500 words\n\nEnsure deep analysis and integration with the literature review."
}
},
"typeVersion": 1.7
},
{
"id": "21449345-642a-4727-ba35-ecb4fa714a7b",
"name": "AI - Conclusion",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3648,
624
],
"parameters": {
"options": {
"systemMessage": "You are an expert academic writer specializing in research papers. Your task is to write a comprehensive Conclusion section for an academic paper. Based on all previous sections, create a conclusion that:\n1. Summarizes key findings\n2. Restates the research contribution\n3. Discusses broader implications\n4. Suggests future research directions\n5. Provides a strong closing statement\n6. Uses minimal citations (2-3 if necessary)\n7. Is original and avoids plagiarism\n8. Is approximately 600-800 words\n\nEnsure the conclusion provides closure and reinforces the paper's significance."
}
},
"typeVersion": 1.7
},
{
"id": "4dcd7857-1872-4708-acc6-cc36ab364f25",
"name": "Merge All Sections",
"type": "n8n-nodes-base.merge",
"position": [
2832,
432
],
"parameters": {
"mode": "combine",
"options": {}
},
"typeVersion": 3
},
{
"id": "a6b631b3-7e40-4bec-b219-08ff05b343e9",
"name": "Compile Document",
"type": "n8n-nodes-base.code",
"position": [
2992,
432
],
"parameters": {
"jsCode": "const title = $('Extract Input Data').item.json.paperTitle;\nconst abstract = $('Extract Input Data').item.json.paperAbstract;\nconst references = $('Process References').item.json.references;\n\nconst introduction = $input.all()[0]?.json?.output || '';\nconst literatureReview = $input.all()[1]?.json?.output || '';\nconst methodology = $input.all()[2]?.json?.output || '';\nconst results = $input.all()[3]?.json?.output || '';\nconst discussion = $input.all()[4]?.json?.output || '';\nconst conclusion = $input.all()[5]?.json?.output || '';\n\n// Format references in APA style\nconst formattedReferences = references.map(ref => {\n const authors = ref.authors || 'Unknown Author';\n const year = ref.year || 'n.d.';\n const title = ref.title || 'Unknown Title';\n const venue = ref.venue || '';\n const doi = ref.doi ? `https://doi.org/${ref.doi}` : ref.url;\n \n return `${authors} (${year}). ${title}. ${venue}${venue ? '.' : ''} ${doi ? doi : ''}`;\n}).join('\\n\\n');\n\n// Compile full document\nconst fullDocument = `\nTITLE: ${title}\n\nABSTRACT\n${abstract}\n\n1. INTRODUCTION\n${introduction}\n\n2. LITERATURE REVIEW\n${literatureReview}\n\n3. METHODOLOGY\n${methodology}\n\n4. RESULTS\n${results}\n\n5. DISCUSSION\n${discussion}\n\n6. CONCLUSION\n${conclusion}\n\nREFERENCES\n${formattedReferences}\n`;\n\nreturn [{ \n json: { \n fullDocument,\n title,\n abstract,\n introduction,\n literatureReview,\n methodology,\n results,\n discussion,\n conclusion,\n references: formattedReferences,\n wordCount: fullDocument.split(/\\s+/).length\n } \n}];"
},
"typeVersion": 2
},
{
"id": "4cfb91af-d425-4a2c-b555-b6231f88ad68",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
2704,
880
],
"parameters": {
"model": "qwen/qwen-max",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "fb7918f8-af6f-49f2-b78d-a3327edd849a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
48
],
"parameters": {
"width": 880,
"height": 416,
"content": "## Introduction\nGenerates complete scientific papers from title and abstract using AI. Designed for researchers, automating literature search, content generation, and citation formatting.\n## How It Works\nExtracts input, searches academic databases (CrossRef, Semantic Scholar, OpenAlex), merges sources, processes citations, generates AI sections (Introduction, Literature Review, Methodology, Results, Discussion, Conclusion), compiles document.\n## Workflow Template\nWebhook \u2192 Extract Data \u2192 Search (CrossRef + Semantic Scholar + OpenAlex) \u2192 Merge Sources \u2192 Process References \u2192 Prepare Context \u2192 AI Generate (Introduction + Literature Review + Methodology + Results + Discussion + Conclusion via OpenAI) \u2192 Merge Sections \u2192 Compile Document\n## Workflow Steps\n1. **Input & Search:** Webhook receives title/abstract; searches CrossRef, Semantic Scholar, OpenAlex; merges and processes references\n2. **AI Generation:** OpenAI generates six sections with in-text citations using retrieved references\n3. **Assembly:** Merges sections; compiles formatted document with reference list\n"
},
"typeVersion": 1
},
{
"id": "864a043a-2294-4347-af2b-126a000ab7b1",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2624,
48
],
"parameters": {
"width": 784,
"height": 320,
"content": "## Setup Instructions\n1. **Trigger & APIs:** Configure webhook URL; add OpenAI API key; customize prompts\n2. **Databases:** Set up CrossRef, Semantic Scholar, OpenAlex API access; configure search parameters\n## Prerequisites\nOpenAI API, CrossRef API, Semantic Scholar API, OpenAlex API, webhook platform, n8n instance\n## Customization\nAdjust reference limits, modify prompts for research fields, add citation styles (APA/IEEE)\n## Benefits\nAutomates paper drafting, comprehensive literature integration, proper citations"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "7057358b-faf6-4a13-acb9-188f4fbfd307",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Extract Input Data",
"type": "main",
"index": 0
}
]
]
},
"AI - Results": {
"main": [
[
{
"node": "AI - Discussion",
"type": "main",
"index": 0
}
]
]
},
"AI - Discussion": {
"main": [
[
{
"node": "AI - Conclusion",
"type": "main",
"index": 0
}
]
]
},
"Search CrossRef": {
"main": [
[
{
"node": "Merge Reference Sources",
"type": "main",
"index": 0
}
]
]
},
"AI - Methodology": {
"main": [
[
{
"node": "AI - Results",
"type": "main",
"index": 0
}
]
]
},
"AI - Introduction": {
"main": [
[
{
"node": "AI - Literature Review",
"type": "main",
"index": 0
},
{
"node": "Merge All Sections",
"type": "main",
"index": 0
}
]
]
},
"Extract Input Data": {
"main": [
[
{
"node": "Search CrossRef",
"type": "main",
"index": 0
},
{
"node": "Search Semantic Scholar",
"type": "main",
"index": 0
},
{
"node": "Search OpenAlex",
"type": "main",
"index": 0
}
]
]
},
"Merge All Sections": {
"main": [
[
{
"node": "Compile Document",
"type": "main",
"index": 0
}
]
]
},
"Prepare AI Context": {
"main": [
[
{
"node": "AI - Introduction",
"type": "main",
"index": 0
}
]
]
},
"Process References": {
"main": [
[
{
"node": "Prepare AI Context",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "AI - Introduction",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI - Literature Review",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI - Methodology",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI - Results",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI - Discussion",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI - Conclusion",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"AI - Literature Review": {
"main": [
[
{
"node": "AI - Methodology",
"type": "main",
"index": 0
},
{
"node": "Merge All Sections",
"type": "main",
"index": 1
}
]
]
},
"Merge Reference Sources": {
"main": [
[
{
"node": "Process References",
"type": "main",
"index": 0
}
]
]
},
"Search Semantic Scholar": {
"main": [
[
{
"node": "Merge Reference Sources",
"type": "main",
"index": 1
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Generates complete scientific papers from title and abstract using AI. Designed for researchers, automating literature search, content generation, and citation formatting.
Source: https://n8n.io/workflows/10314/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
🧪 LABR - nuevo asistente (REPARADO). Uses httpRequest, postgres, postgresTool, toolCalculator. Webhook trigger; 63 nodes.
leads. Uses supabase, gmail, formTrigger, httpRequest. Webhook trigger; 62 nodes.
Brokeria-v20. Uses n8n-nodes-waha, httpRequest, redis, googleGemini. Webhook trigger; 56 nodes.
Brokeria-v15. Uses n8n-nodes-waha, httpRequest, postgres, redis. Webhook trigger; 55 nodes.
Transform your WhatsApp group conversations into actionable business intelligence through automated AI analysis and daily reporting. This workflow eliminates manual conversation monitoring by capturin