TYPO3 Dev Assist [by in2code] · GPT アクション
GitHub Public Data Access API
Provides access to public GitHub data, including user profiles, repository details, commits, issues, and search functionalities. Enhanced with improved error handling and alternative suggestion capabilities.
GET /users/{username}Retrieve public GitHub user profile informationFetches public profile details such as username, user ID, and other public information. - Redirect header (`X-GitHub-Redirect`) included if username changed. - If the user isn't found, a helpful alternative via `/search/users` is suggested.
GET /search/usersSearch for users on GitHubGET /repos/{owner}/{repo}Retrieve information about a GitHub repositoryGET /repos/{owner}/{repo}/contents/{path}Retrieve contents of a file from a GitHub repositoryGET /repos/{owner}/{repo}/commitsRetrieve commit history of a repositoryGET /repos/{owner}/{repo}/issuesRetrieve issues from a repositoryGET /search/repositoriesSearch repositories on GitHubGET /search/issuesSearch issues on GitHub
元の API スキーマ
{
"openapi": "3.1.0",
"info": {
"title": "GitHub Public Data Access API",
"description": "Provides access to public GitHub data, including user profiles, repository details, commits, issues, and search functionalities.\nEnhanced with improved error handling and alternative suggestion capabilities.\n",
"version": "1.4.0"
},
"servers": [
{
"url": "https://api.github.com",
"description": "GitHub API Server"
}
],
"paths": {
"/users/{username}": {
"get": {
"summary": "Retrieve public GitHub user profile information",
"operationId": "getUserInfo",
"description": "Fetches public profile details such as username, user ID, and other public information.\n- Redirect header (`X-GitHub-Redirect`) included if username changed.\n- If the user isn't found, a helpful alternative via `/search/users` is suggested.\n",
"parameters": [
{
"in": "path",
"name": "username",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Public user information retrieved successfully.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicUser"
}
}
}
},
"301": {
"description": "The username has changed (moved permanently).",
"headers": {
"X-GitHub-Redirect": {
"schema": {
"type": "string"
},
"description": "New URL of the user profile."
}
}
},
"403": {
"description": "Rate limit exceeded. Wait before retrying.",
"headers": {
"Retry-After": {
"schema": {
"type": "integer"
},
"description": "Seconds to wait before retrying."
}
}
},
"404": {
"description": "User not found. Suggestions provided via searchUsers endpoint.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "User 'jonndoe' not found."
},
"suggestions": {
"type": "array",
"items": {
"type": "string",
"example": "johndoe123"
}
}
}
}
}
}
}
}
}
},
"/search/users": {
"get": {
"summary": "Search for users on GitHub",
"operationId": "searchUsers",
"parameters": [
{
"in": "query",
"name": "q",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "A list of matching users.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PublicUser"
}
}
}
}
},
"403": {
"description": "Rate limit exceeded. Retry after waiting.",
"headers": {
"Retry-After": {
"schema": {
"type": "integer",
"description": "Seconds to wait before retrying."
}
}
}
}
}
}
},
"/repos/{owner}/{repo}": {
"get": {
"summary": "Retrieve information about a GitHub repository",
"operationId": "getRepositoryInfo",
"parameters": [
{
"in": "path",
"name": "owner",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "repo",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Repository information retrieved successfully.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Repository"
}
}
}
},
"404": {
"description": "Repository not found.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Repository 'user/repo-name' not found."
}
}
}
}
}
}
}
}
},
"/repos/{owner}/{repo}/contents/{path}": {
"get": {
"summary": "Retrieve contents of a file from a GitHub repository",
"operationId": "getRepositoryContent",
"parameters": [
{
"in": "path",
"name": "owner",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "repo",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "File content retrieved successfully.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FileContent"
}
}
}
},
"404": {
"description": "File or path not found."
}
}
}
},
"/repos/{owner}/{repo}/commits": {
"get": {
"summary": "Retrieve commit history of a repository",
"operationId": "getRepositoryCommits",
"parameters": [
{
"in": "path",
"name": "owner",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "repo",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Commit history retrieved successfully.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Commit"
}
}
}
}
},
"404": {
"description": "Repository not found or no commits available."
}
}
}
},
"/repos/{owner}/{repo}/issues": {
"get": {
"summary": "Retrieve issues from a repository",
"operationId": "getRepositoryIssues",
"parameters": [
{
"in": "path",
"name": "owner",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "repo",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Issues retrieved successfully.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Issue"
}
}
}
}
}
}
}
},
"/search/repositories": {
"get": {
"summary": "Search repositories on GitHub",
"operationId": "searchRepositories",
"parameters": [
{
"in": "query",
"name": "q",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Repository search results returned successfully.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RepositorySearchResult"
}
}
}
}
}
}
}
},
"/search/issues": {
"get": {
"summary": "Search issues on GitHub",
"operationId": "searchIssues",
"parameters": [
{
"in": "query",
"name": "q",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Issue search results returned successfully.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/IssueSearchResult"
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"PublicUser": {
"type": "object",
"properties": {
"login": {
"type": "string"
},
"id": {
"type": "integer"
},
"url": {
"type": "string"
},
"avatar_url": {
"type": "string"
}
}
},
"Repository": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"full_name": {
"type": "string"
},
"private": {
"type": "boolean"
},
"owner": {
"$ref": "#/components/schemas/PublicUser"
}
}
},
"FileContent": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"path": {
"type": "string"
},
"sha": {
"type": "string"
},
"size": {
"type": "integer"
},
"url": {
"type": "string"
},
"content": {
"type": "string"
},
"encoding": {
"type": "string"
}
}
},
"Commit": {
"type": "object",
"properties": {
"sha": {
"type": "string"
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"date": {
"type": "string",
"format": "date-time"
}
}
},
"message": {
"type": "string"
},
"url": {
"type": "string"
}
}
},
"Issue": {
"type": "object",
"properties": {
"number": {
"type": "integer"
},
"title": {
"type": "string"
},
"user": {
"$ref": "#/components/schemas/PublicUser"
},
"state": {
"type": "string"
},
"comments": {
"type": "integer"
}
}
},
"RepositorySearchResult": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"owner": {
"$ref": "#/components/schemas/PublicUser"
}
}
},
"IssueSearchResult": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"user": {
"$ref": "#/components/schemas/PublicUser"
},
"state": {
"type": "string"
}
}
}
}
}
}Packagist Composer API
API to interact with Packagist to retrieve package information, search packages, get global statistics, and monitor version updates. Enhanced functionality to handle large response sizes and improve error handling for package retrieval.
GET /packages/{package_name}.jsonGet detailed information about a specific packageGET /packages/{package_name}/versions.jsonRetrieve available versions of a packageProvides a list of available versions for a specific package, including release dates and version-specific details. Useful for monitoring updates to critical packages.
GET /search.jsonSearch for packages based on a queryGET /statistics.jsonRetrieve global statistics from Packagist
元の API スキーマ
{
"openapi": "3.1.0",
"info": {
"title": "Packagist Composer API",
"version": "1.2.0",
"description": "API to interact with Packagist to retrieve package information, search packages, get global statistics, and monitor version updates.\nEnhanced functionality to handle large response sizes and improve error handling for package retrieval.\n"
},
"servers": [
{
"url": "https://packagist.org"
}
],
"paths": {
"/packages/{package_name}.json": {
"get": {
"summary": "Get detailed information about a specific package",
"operationId": "getPackageDetails",
"parameters": [
{
"name": "package_name",
"in": "path",
"description": "The package name in the format `vendor/package`.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Detailed information about the package.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PackageDetails"
}
}
}
},
"404": {
"description": "Package not found."
},
"413": {
"description": "Response too large. Consider using the `fields` parameter to limit the response size.\n"
}
}
}
},
"/packages/{package_name}/versions.json": {
"get": {
"summary": "Retrieve available versions of a package",
"operationId": "getPackageVersions",
"description": "Provides a list of available versions for a specific package, including release dates and version-specific details.\nUseful for monitoring updates to critical packages.\n",
"parameters": [
{
"name": "package_name",
"in": "path",
"description": "The package name in the format `vendor/package`.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "List of package versions returned successfully.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PackageVersions"
}
}
}
},
"404": {
"description": "Package not found. Ensure the package name is correct or verify its existence using the search endpoint."
}
}
}
},
"/search.json": {
"get": {
"summary": "Search for packages based on a query",
"operationId": "searchPackages",
"parameters": [
{
"name": "q",
"in": "query",
"description": "Query string to search for.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "fields",
"in": "query",
"description": "Comma-separated list of fields to include in the response to limit data size.\nE.g., `name,description`.\n",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Search results.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchResults"
}
}
}
}
}
}
},
"/statistics.json": {
"get": {
"summary": "Retrieve global statistics from Packagist",
"operationId": "getGlobalStatistics",
"responses": {
"200": {
"description": "Global usage statistics.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GlobalStatistics"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"PackageDetails": {
"type": "object",
"properties": {
"package": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"maintainers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"avatar_url": {
"type": "string"
}
}
}
},
"versions": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"version": {
"type": "string"
},
"release_date": {
"type": "string",
"format": "date-time"
},
"require": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"suggest": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"downloads": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"monthly": {
"type": "integer"
},
"daily": {
"type": "integer"
}
}
},
"github_stars": {
"type": "integer"
}
}
}
}
},
"PackageVersions": {
"type": "object",
"properties": {
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"version": {
"type": "string"
},
"release_date": {
"type": "string",
"format": "date-time"
}
}
}
}
}
},
"SearchResults": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
},
"GlobalStatistics": {
"type": "object",
"properties": {
"total_downloads": {
"type": "integer"
},
"total_packages": {
"type": "integer"
},
"total_maintainers": {
"type": "integer"
}
}
}
}
}
}Google Web Optimization API with Alternative & Fallback Methods
API leveraging Google PageSpeed Insights for website performance, SEO, accessibility analysis, and more. Includes robust error handling, manual test links, and recommended alternative tools.
GET /runPagespeedAnalyze webpage performance, SEO, accessibility, and morePerforms a comprehensive analysis of webpage performance. Handles quota limits by providing manual testing links and alternative tool recommendations (e.g., GTmetrix, WebPageTest).
GET /analyzeImagesSuggest image optimization improvementsUtilizes PageSpeed Insights specifically to suggest image optimization improvements. Provides alternatives if quota limitations occur.
GET /generateComparisonLinkProvide manual performance test comparison link and alternativesAs PageSpeed Insights doesn't store historical data, provides a manual link for comparison. Suggests alternative tools and strategies to manage historical comparisons (e.g., WebPageTest, local Lighthouse audits).
元の API スキーマ
{
"openapi": "3.1.0",
"info": {
"title": "Google Web Optimization API with Alternative & Fallback Methods",
"description": "API leveraging Google PageSpeed Insights for website performance, SEO, accessibility analysis, and more. Includes robust error handling, manual test links, and recommended alternative tools.\n",
"version": "1.7.0"
},
"servers": [
{
"url": "https://www.googleapis.com/pagespeedonline/v5"
}
],
"paths": {
"/runPagespeed": {
"get": {
"summary": "Analyze webpage performance, SEO, accessibility, and more",
"operationId": "runPagespeedAnalysis",
"description": "Performs a comprehensive analysis of webpage performance. Handles quota limits by providing manual testing links and alternative tool recommendations (e.g., GTmetrix, WebPageTest).\n",
"parameters": [
{
"name": "url",
"in": "query",
"required": true,
"description": "URL of the webpage to analyze.",
"schema": {
"type": "string"
}
},
{
"name": "strategy",
"in": "query",
"description": "Device type (mobile or desktop).",
"schema": {
"type": "string",
"enum": [
"mobile",
"desktop"
]
}
},
{
"name": "locale",
"in": "query",
"description": "Locale for the analysis results (e.g., en-US).",
"schema": {
"type": "string"
}
},
{
"name": "category",
"in": "query",
"description": "Categories for audit focus.",
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"performance",
"accessibility",
"best-practices",
"SEO",
"PWA"
]
}
}
}
],
"responses": {
"200": {
"description": "Performance report successfully retrieved.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"lighthouseResult": {
"type": "object",
"properties": {
"performanceScore": {
"type": "number"
},
"audits": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"score": {
"type": "number"
},
"details": {
"type": "object"
},
"displayValue": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
},
"400": {
"description": "Invalid URL or parameters.\n",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Invalid URL or parameters."
}
}
}
}
}
},
"429": {
"description": "Quota limit exceeded. Retry later or use manual alternatives.\n",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Quota exceeded. Retry later or use manual alternatives."
},
"retryAfterSeconds": {
"type": "integer",
"example": 60
},
"manualTestLink": {
"type": "string",
"example": "https://pagespeed.web.dev/?url={url}"
},
"alternativeTools": {
"type": "array",
"items": {
"type": "string",
"example": [
"https://gtmetrix.com",
"https://webpagetest.org"
]
}
}
}
}
}
}
}
}
}
},
"/analyzeImages": {
"get": {
"summary": "Suggest image optimization improvements",
"operationId": "analyzeImages",
"description": "Utilizes PageSpeed Insights specifically to suggest image optimization improvements. Provides alternatives if quota limitations occur.\n",
"parameters": [
{
"name": "url",
"in": "query",
"required": true,
"description": "URL of the webpage to analyze images.",
"schema": {
"type": "string"
}
},
{
"name": "strategy",
"in": "query",
"description": "Device type (mobile or desktop).",
"schema": {
"type": "string",
"enum": [
"mobile",
"desktop"
]
}
}
],
"responses": {
"200": {
"description": "Image optimization suggestions successfully provided.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"recommendations": {
"type": "array",
"items": {
"type": "string",
"example": "Compress large images by 40% or convert to WebP."
}
}
}
}
}
}
},
"404": {
"description": "Webpage not found or analysis failed."
},
"429": {
"description": "Quota limit reached. Recommended alternative tools.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Quota limit reached. Use manual alternatives."
},
"manualTestLink": {
"type": "string",
"example": "https://pagespeed.web.dev/?url={url}"
},
"alternatives": {
"type": "array",
"items": {
"type": "string",
"example": [
"Use TYPO3 extensions with jpegoptim",
"GTmetrix Image Optimization"
]
}
}
}
}
}
}
}
}
}
},
"/generateComparisonLink": {
"get": {
"summary": "Provide manual performance test comparison link and alternatives",
"operationId": "generateComparisonLink",
"description": "As PageSpeed Insights doesn't store historical data, provides a manual link for comparison. Suggests alternative tools and strategies to manage historical comparisons (e.g., WebPageTest, local Lighthouse audits).\n",
"parameters": [
{
"name": "url",
"in": "query",
"required": true,
"description": "URL of the webpage to compare historically.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Manual comparison link and alternatives provided successfully.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"manualComparisonLink": {
"type": "string",
"example": "https://pagespeed.web.dev/?url={url}"
},
"suggestedAlternatives": {
"type": "array",
"items": {
"type": "string",
"example": [
"WebPageTest.org historical data",
"Store Lighthouse reports locally"
]
}
}
}
}
}
}
},
"400": {
"description": "Invalid URL provided."
}
}
}
}
},
"components": {
"schemas": {
"PerformanceReport": {
"type": "object",
"description": "Detailed performance report with metrics from Google PageSpeed Insights.",
"properties": {
"performanceScore": {
"type": "number"
},
"largestContentfulPaint": {
"type": "number"
},
"totalBlockingTime": {
"type": "number"
},
"speedIndex": {
"type": "number"
},
"firstContentfulPaint": {
"type": "number"
},
"cumulativeLayoutShift": {
"type": "number"
},
"analysisTimestamp": {
"type": "string",
"format": "date-time"
},
"fullPageScreenshot": {
"type": "string",
"description": "Base64-encoded screenshot of the analyzed webpage."
}
}
}
}
}
}TYPO3 Forge API Integration with Authentication
API integration for interacting with TYPO3 Forge to manage projects, issues, and comments. Supports pagination, field selection, and comprehensive error handling.
GET /projects.jsonRetrieve paginated list of projects (Public)GET /projects/{project_id}.jsonRetrieve specific project details (Public)GET /projects/{project_id}/issues.jsonRetrieve paginated issues for a project (Public)POST /projects/{project_id}/issues.jsonCreate new issue (Authenticated)GET /projects/{project_id}/issues/{issue_id}.jsonRetrieve specific issue details (Public)GET /projects/{project_id}/issues/{issue_id}/comments.jsonRetrieve paginated comments for issue (Public)POST /projects/{project_id}/issues/{issue_id}/comments.jsonAdd comment to issue (Authenticated)
元の API スキーマ
{
"openapi": "3.1.0",
"info": {
"title": "TYPO3 Forge API Integration with Authentication",
"version": "1.5.0",
"description": "API integration for interacting with TYPO3 Forge to manage projects, issues, and comments. Supports pagination, field selection, and comprehensive error handling.\n"
},
"servers": [
{
"url": "https://forge.typo3.org"
}
],
"paths": {
"/projects.json": {
"get": {
"summary": "Retrieve paginated list of projects (Public)",
"operationId": "getAllProjects",
"parameters": [
{
"name": "limit",
"in": "query",
"description": "Number of projects per page.",
"schema": {
"type": "integer",
"default": 20
}
},
{
"name": "offset",
"in": "query",
"description": "Number of projects to skip.",
"schema": {
"type": "integer",
"default": 0
}
},
{
"name": "fields",
"in": "query",
"description": "Specific fields to return.",
"schema": {
"type": "string",
"example": "id,name,description"
}
}
],
"responses": {
"200": {
"description": "List of projects retrieved.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
}
}
}
}
}
},
"404": {
"description": "No projects found."
}
}
}
},
"/projects/{project_id}.json": {
"get": {
"summary": "Retrieve specific project details (Public)",
"operationId": "getProjectDetails",
"parameters": [
{
"name": "project_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "fields",
"in": "query",
"description": "Specific fields to include.",
"schema": {
"type": "string",
"example": "id,name,status"
}
}
],
"responses": {
"200": {
"description": "Project details retrieved.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project"
}
}
}
},
"404": {
"description": "Project not found."
}
}
}
},
"/projects/{project_id}/issues.json": {
"get": {
"summary": "Retrieve paginated issues for a project (Public)",
"operationId": "getProjectIssues",
"parameters": [
{
"name": "project_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "status",
"in": "query",
"schema": {
"type": "string",
"enum": [
"open",
"closed"
]
}
},
{
"name": "priority",
"in": "query",
"schema": {
"type": "string",
"enum": [
"low",
"normal",
"high",
"urgent"
]
}
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"default": 20
}
},
{
"name": "offset",
"in": "query",
"schema": {
"type": "integer",
"default": 0
}
},
{
"name": "fields",
"in": "query",
"schema": {
"type": "string",
"example": "id,subject,status"
}
}
],
"responses": {
"200": {
"description": "List of issues retrieved.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"issues": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Issue"
}
}
}
}
}
}
},
"404": {
"description": "No issues found."
}
}
},
"post": {
"summary": "Create new issue (Authenticated)",
"operationId": "createIssue",
"security": [
{
"api_key": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"subject",
"description",
"priority"
],
"properties": {
"subject": {
"type": "string"
},
"description": {
"type": "string"
},
"assigned_to_id": {
"type": "integer"
},
"priority": {
"type": "string",
"enum": [
"low",
"normal",
"high",
"urgent"
]
}
}
}
}
}
},
"responses": {
"201": {
"description": "Issue successfully created.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Issue"
}
}
}
},
"400": {
"description": "Missing required fields."
},
"401": {
"description": "Authentication required."
}
}
}
},
"/projects/{project_id}/issues/{issue_id}.json": {
"get": {
"summary": "Retrieve specific issue details (Public)",
"operationId": "getIssueDetails",
"parameters": [
{
"name": "project_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "issue_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "fields",
"in": "query",
"schema": {
"type": "string",
"example": "id,subject,status,description"
}
}
],
"responses": {
"200": {
"description": "Issue details retrieved.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Issue"
}
}
}
},
"404": {
"description": "Issue not found."
}
}
}
},
"/projects/{project_id}/issues/{issue_id}/comments.json": {
"get": {
"summary": "Retrieve paginated comments for issue (Public)",
"operationId": "getIssueComments",
"parameters": [
{
"name": "project_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "issue_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"default": 20
}
},
{
"name": "offset",
"in": "query",
"schema": {
"type": "integer",
"default": 0
}
}
],
"responses": {
"200": {
"description": "Comments retrieved.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"comments": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Comment"
}
}
}
}
}
}
},
"404": {
"description": "No comments found."
}
}
},
"post": {
"summary": "Add comment to issue (Authenticated)",
"operationId": "addIssueComment",
"security": [
{
"api_key": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"content"
],
"properties": {
"content": {
"type": "string"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Comment added.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Comment"
}
}
}
},
"400": {
"description": "Issue closed; commenting disabled."
},
"401": {
"description": "Authentication required."
}
}
}
}
},
"components": {
"securitySchemes": {
"api_key": {
"type": "apiKey",
"in": "header",
"name": "Authorization"
}
},
"schemas": {
"Project": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"Issue": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"subject": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"assigned_to_id": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"Comment": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"author": {
"type": "string"
},
"content": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
}
}