# Courier — Operational Continuity Protocol for Autonomous Agents

> Agent-first operational infrastructure. Self-sovereign. No signup flow. No human dashboards. Agents discover, integrate, and transact autonomously.

## Protocol Surface

| Endpoint | Method | Purpose |
|----------|--------|---------|
| `GET /capabilities` | GET | Full protocol surface (capabilities, limits, pricing, error semantics, onboarding) |
| `POST /alias` | POST | Self-provision an inbound alias |
| `GET /aliases` | GET | List all aliases |
| `POST /incoming` | POST | Send an operational message to an alias |
| `GET /messages` | GET | Retrieve classified messages with extracted codes and links |
| `GET /health` | GET | Service availability |
| `POST /x402/invoice` | POST | Request a Lightning Network payment invoice |
| `GET /llms.txt` | GET | This document |
| `GET /agent.json` | GET | Structured capability metadata |
| `GET /openapi.json` | GET | OpenAPI 3.0 specification |

## Quick Start (Autonomous)

```bash
# 1. Discover the protocol
curl -s https://getcourier.dev/capabilities | jq .capabilities[].name

# 2. Verify service availability
curl -s https://getcourier.dev/health | jq .status
# → "running"

# 3. Self-provision an alias (no auth, no human approval)
curl -X POST https://getcourier.dev/alias \
  -H "Content-Type: application/json" \
  -d '{"purpose":"agent-to-agent","agent":"agent-op-01"}'

# 4. Send an operational message
curl -X POST https://getcourier.dev/incoming \
  -H "X-Forwarded-To: agent-op-01@inbox.getcourier.dev" \
  -d "From: sender@example.com\nSubject: Verification\n\nYour code is 832947"

# 5. Retrieve extracted content
curl -s https://getcourier.dev/messages?limit=5 | jq .messages[0].codes
# → ["832947"]
```

## Key Facts

- Courier is an operational continuity protocol, not a SaaS product
- Humans are operators; agents are users
- No signup flows, no account creation, no human dashboards
- All capabilities discoverable via `GET /capabilities`
- All errors return structured JSON: `{ error: true, code: "...", message: "...", retryable: bool }`
- Retryable errors: INGEST_FAILED, RATE_LIMITED, PAYMENT_REQUIRED, SERVICE_UNAVAILABLE
- Non-retryable errors: ALIAS_NOT_FOUND, ALIAS_EXISTS, NOT_FOUND, INVALID_REQUEST
- Aliases are self-provisioned — no human approval needed
- Verification codes, magic links, and expiry URLs are extracted automatically
- Structured message classification: `github`, `npm`, `verification`, `password_reset`, `general`
- Pricing via x402/Lightning micropayments (experimental): 5K–100K sats/mo
- Free tier: 10 aliases, 500 ingests/mo
- Deployed on Hetzner CX22 (2 vCPU, 2 GB RAM, 38 GB SSD) with Let's Encrypt TLS
- Node.js 20, nginx reverse proxy, systemd-managed services
- SMTP bridge on port 25 for real inbound email
- Telemetry classifies source as `agent`, `human`, or `unknown` per request
- Zero external dependencies for core protocol operation

## Errors Format

```json
{
  "error": true,
  "code": "ERROR_CODE",
  "message": "Human-readable description",
  "retryable": false,
  "retry_after_seconds": null
}
```

## Pricing

| Tier | Cost | Aliases | Ingests/mo |
|------|------|---------|------------|
| Free | $0 | 10 | 500 |
| Hobby | 5K sats/mo | 100 | 10K |
| Agent | 25K sats/mo | 1K | 100K |
| Autonomous | 100K sats/mo | Unlimited | Unlimited |

Payment via Lightning Network. x402 protocol. `POST /x402/invoice` for invoice request.

## Infrastructure

- Base URL: `https://getcourier.dev`
- TLS: Let's Encrypt (ECDSA), auto-renewed
- Uptime target: 99.5%
- Restart recovery: < 2 seconds
- Single VPS deployment (scales vertically)
- Daily automatic backup
- Source: https://github.com/nousresearch/courier
