GET /v1/lines/{lineId}/reputation

How one of your lines is doing with recipients and Apple — its status, every measure beside its limit, what to do about it, and the last seven days.

GET /v1/lines/{lineId}/reputation

Use this to see a slow-down coming before it happens. A line is graded on two axes: load, what it sends before anyone reacts (new chats, sends per day and per hour, people reached), and quality, how recipients and Apple react (delivered share, sends with no known outcome, reply rate, opt-outs). Every measure is published beside the limit it is read against, so a reading such as "38 of 50 new chats" is one you can act on before the status moves.

The status is the worse of the two axes:

StatusWhat to do
HEALTHYSend normally.
AT_RISKSlow down on new cold chats, and keep replying.
CRITICALStop opening cold chats. Replies and warm chats are fine.
FLAGGEDRest the line, and use another of your lines for new chats.

actionItems says what to do in words, most important first. A reading is taken about every 15 minutes. GET /v1/whoami carries each line's status in a word under lines[].reputation; this route is the full reading.

curl https://api.mapier.ai/v1/lines/0192a7b0-3e4f-7051-8c6d-7e8f9a0b1c2d/reputation \
  -H "Authorization: Bearer $MAPIER_API_KEY" \
  -H "x-mapier-version: 2026-10-15"

Request

Prop

Type

Response

200 OK (one measure per axis shown)
{
  "lineId": "0192a7b0-3e4f-7051-8c6d-7e8f9a0b1c2d",
  "reputation": {
    "status": "AT_RISK",
    "confidence": "ok",
    "confidenceReasons": [],
    "computedAt": "2026-10-16T14:15:00.000Z",
    "policyVersion": "2026-10-15b",
    "primaryDriver": {
      "axis": "load",
      "key": "cold_new_chats_24h",
      "summary": "20 of 30 new chats opened by the line in the last 24 hours"
    },
    "load": {
      "status": "AT_RISK",
      "components": [
        {
          "key": "cold_new_chats_24h",
          "value": 20,
          "limit": 30,
          "unit": "count",
          "status": "warn",
          "note": "New chats we opened in 24 hours, group creates included."
        }
      ]
    },
    "quality": {
      "status": "HEALTHY",
      "components": [
        {
          "key": "cold_reply_rate_7d",
          "value": 0.29,
          "limit": 0.15,
          "unit": "share",
          "status": "ok"
        }
      ]
    },
    "chats": {
      "active": 186,
      "counts": { "HEALTHY": 171, "AT_RISK": 9, "CRITICAL": 2, "OPTED_OUT": 4 }
    },
    "actionItems": [
      {
        "key": "pace_new_chats",
        "title": "Pace new chats",
        "detail": "20 of 30 new chats opened by the line in the last 24 hours. Hold new cold chats until the count falls; replies and warm chats are fine."
      }
    ]
  },
  "history": [
    { "computedAt": "2026-10-16T14:00:00.000Z", "status": "HEALTHY" },
    { "computedAt": "2026-10-16T14:15:00.000Z", "status": "AT_RISK" }
  ]
}

Prop

Type

reputation

Prop

Type

components[] item

Prop

Type

With a test key

A test line has no reading, so a test key always gets reputation: null and an empty history for its sandbox lines.

Errors

StatusCodeCause
401invalid_credentialsNo key, or one that is unknown, revoked or expired
404not_foundNo line this key can see has that id: it never existed, or it is another project's or the other environment's
409project_archivedThe project is archived
422validation_failedlineId is not a UUID, or an x-mapier-version this build does not answer to
429rate_limited60 requests per minute, per key; the Retry-After header says how long to wait
500internal_errorAn unhandled failure, reported; details.requestId names the log line when present
503service_busyThe platform had no database connection free in time and did nothing; wait details.retryAfter seconds and ask again
503upstream_unavailableThe service could not answer

On this page