Documentation Index
Fetch the complete documentation index at: https://mintlify.com/onenot8/issueLoop/llms.txt
Use this file to discover all available pages before exploring further.
The IssueLoop HTTP bridge lets non-Python callers — Node.js services, Go programs, shell scripts, or anything that can make HTTP requests — interact with the ticket queue without importing the Python library. Start the server with issueloop serve (default port 8787). The server binds exclusively to 127.0.0.1 and speaks JSON on every route.
The HTTP bridge has no authentication layer. It is designed for local use only. Do not expose port 8787 (or any other port you choose) to external networks without placing your own authenticating gateway in front of it.
GET /health
A liveness check. Returns immediately with no side effects, useful for confirming the server started correctly or as a readiness probe in a local process manager.
Query parameters: none
Response
Example
curl http://localhost:8787/health
GET /errors/top
Claims the highest-priority pending ticket for a given repo. Atomically sets its status to in_progress and records a dispensed_at timestamp, then returns the full ticket object. Returns an empty object if no pending tickets exist. This is the HTTP equivalent of issueloop next <repo_name>.
Query parameters
| Parameter | Type | Required | Description |
|---|
repo | string | ✅ Yes | The repo name whose queue to drain |
Response — ticket available
{
"id": "a3f9c1b2-4e8d-4f2a-b1c3-9d7e6f0a2b4c",
"repo": "myrepo",
"priority": "high",
"status": "in_progress",
"error_summary": "AssertionError in test_auth.py::test_login — expected 200 got 401",
"raw_log_ref": "data/logs/myrepo_integration.log",
"command": "pytest tests/test_auth.py",
"test_id": "integration",
"attempts": 0,
"escalation_summary": null,
"proposed_fix": null,
"created_at": "2025-01-15 10:32:01.482910",
"resolved_at": null,
"dispensed_at": "2025-01-15 11:04:22.019847"
}
Response — no pending tickets
Example
curl "http://localhost:8787/errors/top?repo=myrepo"
GET /errors/all
Returns all open tickets for a given repo. Unlike /errors/top, this endpoint does not claim any ticket or change any status — it is a read-only snapshot of the queue.
Query parameters
| Parameter | Type | Required | Description |
|---|
repo | string | ✅ Yes | The repo name to list tickets for |
Response
{
"tickets": [
{
"id": "a3f9c1b2-4e8d-4f2a-b1c3-9d7e6f0a2b4c",
"repo": "myrepo",
"priority": "high",
"status": "in_progress",
"error_summary": "AssertionError in test_auth.py::test_login — expected 200 got 401",
"raw_log_ref": "data/logs/myrepo_integration.log",
"command": "pytest tests/test_auth.py",
"test_id": "integration",
"attempts": 0,
"escalation_summary": null,
"proposed_fix": null,
"created_at": "2025-01-15 10:32:01.482910",
"resolved_at": null,
"dispensed_at": "2025-01-15 11:04:22.019847"
}
]
}
Example
curl "http://localhost:8787/errors/all?repo=myrepo"
POST /errors/resolve
Marks a ticket as done. The ticket’s resolved_at timestamp is set by the backend. Call this after your agent or developer has successfully addressed the underlying failure.
Request body
| Field | Type | Required | Description |
|---|
id | string | ✅ Yes | The UUID of the ticket to resolve |
Response
Example
curl -X POST http://localhost:8787/errors/resolve \
-H "Content-Type: application/json" \
-d '{"id": "a3f9c1b2-4e8d-4f2a-b1c3-9d7e6f0a2b4c"}'
POST /errors/fail
Marks a ticket as failed. Use this when an attempt to fix the issue did not succeed and you want to record the outcome without escalating to human review. Failed tickets are removed by issueloop cleanup.
Request body
| Field | Type | Required | Description |
|---|
id | string | ✅ Yes | The UUID of the ticket to mark as failed |
Response
Example
curl -X POST http://localhost:8787/errors/fail \
-H "Content-Type: application/json" \
-d '{"id": "a3f9c1b2-4e8d-4f2a-b1c3-9d7e6f0a2b4c"}'
Error responses
The server returns a JSON error body for any malformed request or unknown path.
400 Bad Request — returned when the POST body is not valid JSON, or when /errors/resolve or /errors/fail is called without an id field in the body:
{"error": "invalid JSON body"}
{"error": "expected JSON body with an 'id' field"}
404 Not Found — returned for any path not listed in this reference: