# Essay Analysis API - Exact JSON Format ## API Endpoints Overview This API provides comprehensive essay analysis with the exact JSON format required by the web development team. ### Available Endpoints 1. **`/api/essay-analysis`** - Comprehensive essay analysis (supports optional question parameter) 2. **`/api/essay-analysis-with-question`** - **NEW** Comprehensive essay analysis based on a specific question 3. **`/api/feedback`** - Feedback generation (supports optional question parameter) 4. **`/api/feedback-with-question`** - **NEW** Feedback generation based on a specific question ## Updated API Endpoint: `/api/essay-analysis` This endpoint now supports an optional question parameter for question-specific analysis. ### Request - **Method**: POST - **Content-Type**: application/x-www-form-urlencoded - **Body**: - `essay_text=` (required) - `question=` (optional) ### Response Format The API returns a JSON object with the following exact structure: **When no question is provided (general analysis):** ```json { "originalEssayWordCount": 300, "reWrittenEssayWordCount": 300, "originalEssay": "Your original essay text here...", "reWrittenEssay": "Your rewritten essay text here...", "overallEssayEvaluationScore": 70, "analysisType": "general", "evaluationAndScoring": [ { "label": "Grammar & Punctuation", "score": 70, "analysis": "Detailed analysis of grammar and punctuation", "issuesCount": 2, "issuesList": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positivePoints": ["Specific examples of good grammar usage"] } ], "essayStructure": [ { "label": "Introduction & Thesis", "features": [ { "label": "Clear Thesis Statement", "isCorrect": true }, { "label": "Engaging Introduction", "isCorrect": false, "errorMessage": "Introduction should be more engaging and capture reader's attention." } ] } ], "topicSpecificFeedback": { "topicCoverage": "Detailed analysis of how well the topic is addressed", "missingAspects": ["Aspects that could be better covered"], "strengths": ["Specific strengths in topic handling"], "improvementSuggestions": ["Specific suggestions for better topic coverage"] } } ``` **When a question is provided (question-specific analysis):** ```json { "originalEssayWordCount": 300, "reWrittenEssayWordCount": 300, "originalEssay": "Your original essay text here...", "reWrittenEssay": "Your rewritten essay text here...", "overallEssayEvaluationScore": 70, "analysisType": "question_specific", "question": "Your specific question here...", "questionSpecificFeedback": { "question": "Your specific question here...", "question_relevance_score": 85, "question_coverage": "Detailed analysis of how well the question is addressed", "covered_aspects": ["Specific aspects of the question that are well covered"], "missing_aspects": ["Aspects of the question that are missing or poorly addressed"], "strengths": ["Specific strengths in addressing the question"], "improvement_suggestions": ["Specific suggestions for better question coverage"] }, "evaluationAndScoring": [ { "label": "Grammar & Punctuation", "score": 70, "analysis": "Detailed analysis of grammar and punctuation", "issuesCount": 2, "issuesList": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positivePoints": ["Specific examples of good grammar usage"] } ], "essayStructure": [ { "label": "Introduction & Thesis", "features": [ { "label": "Clear Thesis Statement", "isCorrect": true }, { "label": "Engaging Introduction", "isCorrect": false, "errorMessage": "Introduction should be more engaging and capture reader's attention." } ] } ] } ``` ## Updated API Endpoint: `/api/feedback` This endpoint now supports an optional question parameter for question-specific feedback. ### Request - **Method**: POST - **Content-Type**: application/x-www-form-urlencoded - **Body**: - `essay_text=` (required) - `question=` (optional) ### Response Format **When no question is provided (general feedback):** ```json { "feedback": { "sections": [ { "name": "Grammar & Punctuation", "score": 85, "analysis": "Detailed analysis of grammar and punctuation", "issues": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positive_points": ["Specific examples of good grammar usage"], "issues_count": 1 } ], "overall_score": 82, "essay_structure": { "Introduction & Thesis": { "Clear Thesis Statement": { "value": true, "explanation": "Thesis is clearly stated", "suggestions": "Consider strengthening the thesis" } } } }, "feedback_type": "general", "question": null, "pdf_path": "/path/to/generated/pdf" } ``` **When a question is provided (question-specific feedback):** ```json { "feedback": { "sections": [ { "name": "Grammar & Punctuation", "score": 85, "analysis": "Detailed analysis of grammar and punctuation", "issues": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positive_points": ["Specific examples of good grammar usage"], "issues_count": 1 } ], "overall_score": 82, "essay_structure": { "Introduction & Thesis": { "Clear Thesis Statement": { "value": true, "explanation": "Thesis is clearly stated", "suggestions": "Consider strengthening the thesis" } } }, "question_specific_feedback": { "question": "Your specific question here...", "question_relevance_score": 85, "question_coverage": "Detailed analysis of how well the question is addressed", "covered_aspects": ["Specific aspects of the question that are well covered"], "missing_aspects": ["Aspects of the question that are missing or poorly addressed"], "strengths": ["Specific strengths in addressing the question"], "improvement_suggestions": ["Specific suggestions for better question coverage"] } }, "feedback_type": "question_specific", "question": "Your specific question here...", "pdf_path": "/path/to/generated/pdf" } ``` ## New API Endpoint: `/api/essay-analysis-with-question` This endpoint provides comprehensive essay analysis with the exact JSON format required by the web development team, but now includes question-specific evaluation. ### Request - **Method**: POST - **Content-Type**: application/x-www-form-urlencoded - **Body**: - `essay_text=` - `question=` ### Response Format The API returns a JSON object with the following exact structure: ```json { "originalEssayWordCount": 300, "reWrittenEssayWordCount": 300, "originalEssay": "Your original essay text here...", "reWrittenEssay": "Your rewritten essay text here...", "overallEssayEvaluationScore": 70, "question": "Your specific question here...", "questionSpecificFeedback": { "question": "Your specific question here...", "question_relevance_score": 85, "question_coverage": "Detailed analysis of how well the question is addressed", "covered_aspects": ["Specific aspects of the question that are well covered"], "missing_aspects": ["Aspects of the question that are missing or poorly addressed"], "strengths": ["Specific strengths in addressing the question"], "improvement_suggestions": ["Specific suggestions for better question coverage"] }, "evaluationAndScoring": [ { "label": "Grammar & Punctuation", "score": 70, "analysis": "Detailed analysis of grammar and punctuation", "issuesCount": 2, "issuesList": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positivePoints": ["Specific examples of good grammar usage"] }, { "label": "Vocabulary Usage", "score": 75, "analysis": "Detailed analysis of vocabulary usage", "issuesCount": 1, "issuesList": [ { "before": "Original word/phrase", "after": "Improved word/phrase", "explanation": "Why this improvement is suggested" } ], "positivePoints": ["Specific examples of good vocabulary usage"] }, { "label": "Sentence Structure", "score": 100, "analysis": "Detailed analysis of sentence structure", "issuesCount": 0, "issuesList": [], "positivePoints": ["Specific examples of good sentence structure"] } ], "essayStructure": [ { "label": "Introduction & Thesis", "features": [ { "label": "Clear Thesis Statement", "isCorrect": true }, { "label": "Engaging Introduction", "isCorrect": false, "errorMessage": "Introduction should be more engaging and capture reader's attention." }, { "label": "Background Context", "isCorrect": true } ] }, { "label": "Body Development", "features": [ { "label": "Topic Sentences", "isCorrect": true }, { "label": "Supporting Evidence", "isCorrect": true }, { "label": "Logical Flow", "isCorrect": true }, { "label": "Paragraph Coherence", "isCorrect": true } ] }, { "label": "Content Quality", "features": [ { "label": "Relevance to Topic", "isCorrect": true }, { "label": "Depth of Analysis", "isCorrect": false, "errorMessage": "Analysis could be deeper with more critical examination of the topic." }, { "label": "Use of Examples", "isCorrect": true }, { "label": "Critical Thinking", "isCorrect": true } ] }, { "label": "Evidence & Citations", "features": [ { "label": "Factual Accuracy", "isCorrect": true }, { "label": "Source Credibility", "isCorrect": true }, { "label": "Proper Citations", "isCorrect": false, "errorMessage": "Citations should follow proper academic format." }, { "label": "Statistical Data", "isCorrect": true } ] }, { "label": "Conclusion", "features": [ { "label": "Summary of Arguments", "isCorrect": true }, { "label": "Policy Recommendations", "isCorrect": true }, { "label": "Future Implications", "isCorrect": true }, { "label": "Strong Closing", "isCorrect": true } ] } ] } ``` ## New API Endpoint: `/api/feedback-with-question` This endpoint provides detailed feedback based on a specific question. ### Request - **Method**: POST - **Content-Type**: application/x-www-form-urlencoded - **Body**: - `essay_text=` - `question=` ### Response Format ```json { "feedback": { "sections": [ { "name": "Grammar & Punctuation", "score": 85, "analysis": "Detailed analysis of grammar and punctuation", "issues": [ { "before": "Original text with error", "after": "Corrected text", "explanation": "Why this change is needed" } ], "positive_points": ["Specific examples of good grammar usage"], "issues_count": 1 } ], "overall_score": 82, "essay_structure": { "Introduction & Thesis": { "Clear Thesis Statement": { "value": true, "explanation": "Thesis is clearly stated", "suggestions": "Consider strengthening the thesis" } } }, "question_specific_feedback": { "question": "Your specific question here...", "question_relevance_score": 85, "question_coverage": "Detailed analysis of how well the question is addressed", "covered_aspects": ["Specific aspects of the question that are well covered"], "missing_aspects": ["Aspects of the question that are missing or poorly addressed"], "strengths": ["Specific strengths in addressing the question"], "improvement_suggestions": ["Specific suggestions for better question coverage"] } }, "question": "Your specific question here...", "pdf_path": "/path/to/generated/pdf" } ``` ## Field Descriptions ### Top-level Fields (for essay-analysis-with-question) - `originalEssayWordCount` (integer): Number of words in the original essay - `reWrittenEssayWordCount` (integer): Number of words in the rewritten essay - `originalEssay` (string): The original essay text submitted by the user - `reWrittenEssay` (string): The AI-improved version of the essay - `overallEssayEvaluationScore` (integer): Overall score from 0-100 - `question` (string): The specific question that was evaluated (only when question is provided) - `questionSpecificFeedback` (object): Detailed feedback on how well the essay addresses the question (only when question is provided) - `evaluationAndScoring` (array): Detailed evaluation in multiple categories - `essayStructure` (array): Essay structure analysis - `analysisType` (string): Either "general" or "question_specific" ### questionSpecificFeedback Object - `question` (string): The specific question being evaluated - `question_relevance_score` (integer): Score from 0-100 indicating how well the essay addresses the question - `question_coverage` (string): Detailed analysis of question coverage - `covered_aspects` (array): List of question aspects that are well covered - `missing_aspects` (array): List of question aspects that are missing or poorly addressed - `strengths` (array): List of strengths in addressing the question - `improvement_suggestions` (array): List of suggestions for better question coverage ### evaluationAndScoring Array Each item contains: - `label` (string): Category name - `score` (integer): Score from 0-100 for this category - `analysis` (string): Detailed analysis of the category - `issuesCount` (integer): Number of issues found - `issuesList` (array): List of specific issues with before/after corrections and explanations - `positivePoints` (array): List of positive aspects in this category ### essayStructure Array Each item contains: - `label` (string): Structure category name - `features` (array): List of features evaluated in this category - `label` (string): Feature name - `isCorrect` (boolean): Whether the feature is correct - `errorMessage` (string, optional): Error message if `isCorrect` is false ## Example Usage ### Testing the Updated Endpoints ```python import requests # Test the updated essay analysis endpoint without question response = requests.post( "http://localhost:8000/api/essay-analysis", data={"essay_text": "Your essay text here..."}, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Overall Score: {result['overallEssayEvaluationScore']}") print(f"Analysis Type: {result['analysisType']}") # Test the updated essay analysis endpoint with question response = requests.post( "http://localhost:8000/api/essay-analysis", data={ "essay_text": "Your essay text here...", "question": "Discuss the impact of climate change on global economies." }, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Overall Score: {result['overallEssayEvaluationScore']}") print(f"Question: {result['question']}") print(f"Question Relevance Score: {result['questionSpecificFeedback']['question_relevance_score']}") print(f"Analysis Type: {result['analysisType']}") # Test the updated feedback endpoint without question response = requests.post( "http://localhost:8000/api/feedback", data={"essay_text": "Your essay text here..."}, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Feedback Type: {result['feedback_type']}") print(f"Overall Score: {result['feedback']['overall_score']}") # Test the updated feedback endpoint with question response = requests.post( "http://localhost:8000/api/feedback", data={ "essay_text": "Your essay text here...", "question": "Analyze the role of technology in modern education." }, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Feedback Type: {result['feedback_type']}") print(f"Question: {result['question']}") print(f"Question Relevance Score: {result['feedback']['question_specific_feedback']['question_relevance_score']}") ``` ### Testing the New Question-Specific Endpoint ```python import requests # Test the new question-specific API response = requests.post( "http://localhost:8000/api/essay-analysis-with-question", data={ "essay_text": "Your essay text here...", "question": "Discuss the impact of climate change on global economies." }, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Overall Score: {result['overallEssayEvaluationScore']}") print(f"Question: {result['question']}") print(f"Question Relevance Score: {result['questionSpecificFeedback']['question_relevance_score']}") print(f"Original Word Count: {result['originalEssayWordCount']}") print(f"Rewritten Word Count: {result['reWrittenEssayWordCount']}") ``` ### Testing the Feedback with Question Endpoint ```python import requests # Test the feedback with question API response = requests.post( "http://localhost:8000/api/feedback-with-question", data={ "essay_text": "Your essay text here...", "question": "Analyze the role of technology in modern education." }, headers={"Content-Type": "application/x-www-form-urlencoded"} ) if response.status_code == 200: result = response.json() print(f"Question: {result['question']}") print(f"Overall Score: {result['feedback']['overall_score']}") print(f"Question Relevance Score: {result['feedback']['question_specific_feedback']['question_relevance_score']}") ``` ## Testing Run the test script to verify the API format: ```bash python test_api_format.py ``` This will test all endpoints including the updated existing endpoints and new question-specific ones and save the full responses to JSON files for inspection. ## Key Differences Between Endpoints 1. **Updated Existing Endpoints** (`/api/essay-analysis`, `/api/feedback`): - Accept optional `question` parameter - Provide general analysis/feedback when no question is provided - Provide question-specific analysis/feedback when question is provided - Include `analysisType` or `feedback_type` field to indicate the type of analysis - Backward compatible with existing implementations 2. **New Question-Specific Endpoints** (`/api/essay-analysis-with-question`, `/api/feedback-with-question`): - Require both `essay_text` and `question` parameters - Always provide question-specific analysis and feedback - Include question relevance scoring - Focus on how well the essay addresses the specific question - Provide detailed feedback on question coverage and missing aspects