Where readers came from in a date range.
Tracked views grouped by channel (organic search, social, email, AI assistants, referral, direct and paid), then by source, then by campaign, with share and change. Pass post_id for one post.
https://app.softsolz.uk/api/v1/services/blogs/performance/sourcesRecent Requests
Kept only in this browserHeaders
AuthorizationstringrequiredBearer token: `Bearer sk_live_...` (or `sk_test_...` for sandbox). A login token will not work here.
Query Params
fromstringFirst day, YYYY-MM-DD (UTC).
tostringLast day, YYYY-MM-DD (UTC), inclusive.
daysintegerLength of the range ending today, 1 to 400, when from and to are not given. Default 30.
comparestringprevious (default) compares with the period before, year with the same period last year, none turns comparison off.
post_idintegerLimit the report to one post.
Response
Response Body
rangeobject | nullThe reported period: from, to (inclusive) and days.previous_rangeobject | nullThe comparison period, or null when compare=none.comparestring | nullComparison mode used.post_idnumber | nullThe post the report is limited to, or null.tracked_viewsnumber | nullViews with a recorded source in the period.previous_tracked_viewsnumber | nullThe same for the comparison period.changenumber | nullChange in tracked views as a ratio.channelsarray of objectsChannels with views, previous_views, share, change, reads and sources.Request
curl --request GET \ --url https://app.softsolz.uk/api/v1/services/blogs/performance/sources \ --header 'Authorization: Bearer sk_live_your_key'Credentials
Sent as a Bearer token and used in the samples above and in Try it. Kept only in this browser. Use an sk_test_ key to stay in your sandbox.
Response · 200
{ "data": { "range": { "from": "2026-09-08", "to": "2026-10-07", "days": 30 }, "previous_range": {}, "compare": "previous", "post_id": 1, "tracked_views": 980, "previous_tracked_views": 860, "change": 0.14, "channels": [ {} ] }}