Skip to main content

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 server is a lightweight local bridge that lets Node.js, Go, shell scripts, or any HTTP client use IssueLoop without importing the Python package. Start it once alongside your workflow and talk to it over plain HTTP from whatever language you prefer.

Starting the server

Run issueloop serve from any terminal where the Python package is installed. The server starts on port 8787 by default.
1

Start on the default port

issueloop serve
The server prints issueloop serving on http://127.0.0.1:8787 (Ctrl+C to stop) and is immediately ready to accept requests.
2

Use a custom port

Pass --port to listen on a different port:
issueloop serve --port 9000
The server binds exclusively to 127.0.0.1 (localhost) and has no authentication. It is safe for local development and CI pipelines where only trusted local processes connect. If you ever need to expose it beyond localhost, put it behind a gateway or reverse proxy that handles authentication and TLS.

REST endpoints

The server exposes five REST endpoints covering the core ticket lifecycle.

GET /health

Returns a simple liveness check. Use this to confirm the server is running before making other requests.
curl http://127.0.0.1:8787/health
{"status": "ok"}

GET /errors/top?repo=<name>

Claims and returns the single highest-priority pending ticket for the given repo, marking it in_progress. Returns an empty object {} when there are no pending tickets.
curl "http://127.0.0.1:8787/errors/top?repo=myrepo"
{
  "id": "abc123",
  "repo": "myrepo",
  "priority": "high",
  "status": "in_progress",
  "error_summary": "AttributeError in auth module",
  "raw_log_ref": "logs/myrepo/run_001.log",
  "command": "pytest tests/test_auth.py",
  "test_id": "tests/test_auth.py::test_login",
  "attempts": 1,
  "created_at": "2024-01-15T10:30:00Z",
  "dispensed_at": "2024-01-15T10:31:00Z",
  "resolved_at": null,
  "escalation_summary": null,
  "proposed_fix": null
}

GET /errors/all?repo=<name>

Returns all open tickets for the given repo, wrapped in a tickets array.
curl "http://127.0.0.1:8787/errors/all?repo=myrepo"
{
  "tickets": [
    {
      "id": "abc123",
      "repo": "myrepo",
      "priority": "high",
      "status": "in_progress",
      "error_summary": "AttributeError in auth module"
    },
    {
      "id": "def456",
      "repo": "myrepo",
      "priority": "normal",
      "status": "pending",
      "error_summary": "KeyError in config loader"
    }
  ]
}

POST /errors/resolve

Marks a ticket as resolved. The request body must be a JSON object containing the ticket id.
curl -X POST http://127.0.0.1:8787/errors/resolve \
  -H "Content-Type: application/json" \
  -d '{"id": "abc123"}'
{"status": "resolved"}

POST /errors/fail

Marks a ticket as failed (the fix attempt did not succeed). The request body must be a JSON object containing the ticket id.
curl -X POST http://127.0.0.1:8787/errors/fail \
  -H "Content-Type: application/json" \
  -d '{"id": "abc123"}'
{"status": "failed"}

Error responses

Any POST request that does not match /errors/resolve or /errors/fail, or that is missing the id field, receives a 400 response:
{"error": "expected JSON body with an 'id' field"}
A malformed JSON body returns the same 400 status with:
{"error": "invalid JSON body"}
Any unrecognised GET path returns 404:
{"error": "not found"}
The HTTP bridge only exposes these five endpoints. For programmatic access to the full Python API from Node.js or Go, use the typed client libraries — see the Node.js client and Go client pages.

Build docs developers (and LLMs) love