Get portfolio health
const url = 'https://api.tryletterhead.com/api/v3/metrics/portfolio-health?api=true';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.tryletterhead.com/api/v3/metrics/portfolio-health?api=true' \ --header 'Authorization: Bearer <token>'The latest per-channel growth snapshot for every channel under your company: subscriber
counts, 30-day net growth, cleaned count, an engagement-tier breakdown (loyalists,
newly-and-engaged, casual, fading, ghosts), a single-newsletter-subscriber count, and an
overall health label (growing, stable, or needsAttention). Backs the goals pageβs
Portfolio Health and Top Performers cards. Snapshots are refreshed at most once an hour.
v3 endpoints expect a company API key.
Authorizations
Section titled βAuthorizations βParameters
Section titled β Parameters βQuery Parameters
Section titled βQuery Parameters βRequired. Set to true.
Responses
Section titled β Responses βGet portfolio health
object
object
Change in total subscribers over the trailing 30 days.
growing, stable, or needsAttention.
Present only when a sender health score has been computed for this channel; omitted (not null) otherwise.
object
Example
{ "items": [ { "brandSlug": "an-example-channel", "brandName": "An Example Newsletter", "channel": "an-example-channel", "channelName": "An Example Newsletter", "totalSubscribers": 4800, "newSubscribers": 42, "unsubscribes": 8, "netGrowth": 34, "totalCleaned": 120, "loyalistsCount": 1200, "newAndEngagedCount": 800, "casualCount": 1500, "fadingCount": 900, "ghostsCount": 400, "singleNewsletterCount": 2000, "health": "growing", "senderHealth": { "score": 82, "severity": "healthy", "trend": "stable" } } ], "message": "Portfolio health snapshots retrieved successfully.", "total": 1}Still can’t find what you need? Contact support.