Access
ICC
Structured container messaging when normal HTTP is not the right transport.
ICC is the platform surface for structured container messaging without going through the normal app HTTP path.
Common Routes
GET /api/icc
GET /api/icc/health
GET /api/icc/streams
GET /api/icc/schema
GET /api/icc/types
GET /api/icc/proto
GET /api/icc/descriptor
GET /api/icc/messages?container_id=<tenant_owned_container_id>&limit=<n>
GET /api/icc/inbox/<container_id>
GET /api/icc/containers/<container_id>/state-version
GET /api/icc/dlq
GET /api/containers/<container_id>/icc
GET /api/containers/<container_id>/inbox
GET /api/containers/<container_id>/messages
POST /api/icc/messages
POST /api/icc/messages/broadcast
POST /api/icc/exec/broadcast
POST /api/icc/publish
POST /api/icc/ack
POST /api/icc/replay
POST /api/icc/dlq/<stream_seq>/replay
POST /api/containers/<container_id>/icc/publish
POST /api/containers/<container_id>/inbox/ack
POST /api/containers/<container_id>/inbox/replay
POST /api/icc/inbox/<container_id>/ack
POST /api/icc/messages/<msg_id>/ack
POST /api/icc/inbox/<container_id>/replay
Payloads
Publish:
{
"envelope_b64": "<base64 protobuf envelope>"
}
Broadcast:
{
"envelope_b64": "<base64 protobuf envelope>",
"targets": {
"container_ids": ["a", "b"],
"include_non_running": true,
"limit": 10
}
}
Exec broadcast:
{
"command": ["echo", "icc-broadcast-ok"],
"timeout_ms": 10000,
"targets": {
"container_ids": ["ctr_123"]
}
}
Ack:
{
"msg_id": "msg_123",
"action": "ack",
"reason": "handled"
}
Accepted action values:
acknack
Replay:
{
"container_id": "ctr_123",
"state": "acked",
"limit": 10
}
Important Semantics
GET /api/icc/messagesrequirescontainer_id- inbox, replay, and state-version reads require a real tenant-owned container id
- placeholder ids in examples are illustrative, not universally runnable
When It Fits
Use ICC when you need a structured, protocol-oriented message path between Quilt-managed runtimes. If ordinary request-response HTTP is enough, keep the simpler transport.
