Transports
Docs / Control plane

Transports

Read-only. Credentials never leave the server. GET /v1/transports and GET /v1/transports/{id}. Plain SMTP still says it cannot report post-handoff events.

Authentication

Authorization: Bearer spw_…

Requires transports:read (or transports:manage).

Keys rule — prefix, shown once, abilities never widen, and no key carries both messages:send and messages:read-content.

Worked example

curl https://spoolway.com/api/v1/transports/2 \
  -H "Authorization: Bearer spw_…"
200 — health demoted
{
  "data": {
    "id": 2,
    "name": "stale-smtp",
    "type": "smtp",
    "supports_feedback": false,
    "feedback_note": "cannot report post-handoff events — permanent, by design",
    "health": {
      "state": "unknown",
      "label": "unknown",
      "detail": "last check 3d ago — older than 24h reads as unknown, not healthy",
      "checked_at": "2026-08-03T08:11:01+00:00",
      "until": null
    },
    "max_concurrency": 5,
    "max_per_minute": null,
    "max_per_day": null,
    "fallback_transport_id": null,
    "disabled_at": null,
    "deferral_until": null
  }
}

Fields

typesmtp, mailgun, or postmark. Those are the types the panel form accepts.
health.statedisabled when the transport is switched off. deferred while a backoff is still in the future. unknown when there is no check, the check is older than 24 hours, or the stored status is none of the words below. failing when the stored status is failing, failed, unhealthy, error, or down and the check is still inside 24 hours. healthy when the stored status is ok, healthy, or up and the check is still inside 24 hours.
max_concurrencyHow many sends may be in flight. The column defaults to 5, and a blank pacing field stores 5 rather than removing the ceiling.
max_per_minuteSends per minute, or null when that cap is not set. Null skips the per-minute check.
max_per_daySends per day, or null when that cap is not set. Null skips the per-day check.
fallback_transport_idThe transport a failed delivery tries once, or null. A fallback does not itself fall back.

24h honesty

HONESTY NOTE — UNKNOWN, NOT HEALTHYA transport whose last health check is older than 24h (or never checked) returns health.state: "unknown", even if the stored status was ok. The detail spells it out: older than 24h reads as unknown, not healthy. feedback_note is permanent for plain SMTP — it cannot report post-handoff events. Config and credentials are never in the payload.

Responses & failures

403 without the ability. Cross-account id is 404. No write path on v1 — use the panel to test or replace credentials.