- user_id -
user/:uid - feed_id -
feed/:feed_uri - category_id -
:user_id/category/:category(special category:global.all,global.uncategorized) - tag_id -
:user_id/tag/:tag(special tag:global.saved)
http://cloud.feedly.com/:version/:api
- Common params
- ck - timestamp (optional)
- ct - client type (eg:
feedly.desktop, optional) - cv - client version (eg:
16.0.548, optional)
HTTP Header must have Authorization field except auth and feeds apis
Field format like this; Authorization: OAuth :oauth_token
Login process
GET /v3/auth/auth
Automatic oauth2 chain
- Params
- client_id -
feedly(fixed) - redirect_uri -
https://cloud.feedly.com/feedly.html(fixed) - scope -
https://cloud.feedly.com/subscriptions(fixed) - response_type -
code(fixed) - provider -
google(fixed) - migrate -
false(fixed, now feedly not support migrate google reader)
- client_id -
Final URI of oauth chain; https://cloud.feedly.com/feedly.html?code=:code&state=
POST /v3/auth/token
Generate and refresh oauth token
-
Body
Normal
application/x-www-form-urlencodedformat, notapplication/jsonclient_id=feedly &client_secret=0XP4XQ07VVMDWBKUHTJM4WUQ &grant_type=authorization_code &redirect_uri=http%3A%2F%2Fwww.feedly.com%2Ffeedly.html &code=:codeor
client_id=feedly &client_secret=0XP4XQ07VVMDWBKUHTJM4WUQ &grant_type=refresh_token &refresh_token=:refresh_token -
Response
authorization_codemode{ "refresh_token": ":refresh_token", "access_token": ":oauth_token", "expires_in": :second, "token_type": "Bearer", "id": ":uid" }refresh_tokenmode{ "token_type": "Bearer" "access_token": ":oauth_token", "expires_in": :second, "id": ":uid" }
No need authorization
-
Using
GET /v3/feeds/:feed_id -
Response
{ "id": ":feed_id", "subscribers": :subscriber_count, "title": ":feed_title", "velocity": :velocity, "website": ":site_uri" }
-
Using
GET /v3/profile -
Reponse
{ "email": ":email", "familyName": ":family_name", "gender": ":gender", "givenName": ":first_name", "google": ":google_plus_key", "id": ":uid", "locale": ":locale", "picture": ":profile _avatar_uri", "reader": ":reader_key", "wave": ":wave" }
subscripted feed control
-
Using
GET /v3/subscriptsorPOST /v3/subscriptsorDELETE /v3/subscripts/:feed_id -
Body
POSTmethod only{ "id": ":feed_id", "title": ":feed_title", "categories": [ { "id": ":category_id", "label": ":category" } ] } -
Response
GETmethod only[ { "categories": [ { "id": ":category_id", "label": ":category" } ], "id": "feed_id", "title": ":feed_title", "updated": :timestamp, "website": ":feed_uri" }, ... ]
load feed stream
-
Using
GET /v3/streams/:category_id_or_feed_id_or_tag_id/contents -
Params
- count - load max count (default:
20) - unreadOnly -
trueorfalse(default:false) - ranked -
newestoroldest(default:newest) - continuation - until continuation_key (optional)
- count - load max count (default:
-
Response
{ "continuation": ":continuation_key", "id": ":category_id", "items": [ { "actionTimestamp": ":action_timestamp", "alternate": [ { "href": ":alternate_uri", "type": ":mimetype" } ], "author": ":author", "canonical": [ { "href": ":canonical_uri", "type": ":mimetype" } ], "categories": [ { "id": ":item_category_id", "label": ":item_category_name" } ], "crawled": ":crawled_timestamp", "fingerprint": ":fingerprint", "id": ":item_id", "keywords": [ ":keyword" ], "origin": { "htmlUrl": ":site_uri", "streamId": ":feed_id", "title": ":feed_title" }, "originId": ":item_uri", # optional "published": "item_pub_timestamp", "summary": { # or content "content": ":item_desc", "direction": ":text_direction" }, "title": ":item_title", "tags": [ { "id": ":tag_id", "label": ":tag_name" }, ... ], "unread": true } ], ... }
-
Using
GET /v3/markers/countsorPOST /v3/markers -
Body
POSTmethod only{ "action": ":action", "type": "entries", "entryIds": [":item_id"] }or
{ "action": ":action", "type": "feeds", "feedIds":[":feed_id"], "asOf": :timestamp }- action -
markAsReadorkeepUnread
- action -
-
Response
GETmethod only{ "unreadcounts": [ { "id": ":feed_id_or_category_id", "count": :count, "updated": :timestamp }, ... ], "max": :max_count }
-
Using
DELETE /v3/tags/:tag_id/:itemidorPUT /v3/tags/:tag_id -
Body
PUTmethod only{ "entryId": ":item_id" }
http://www.feedly.com/:group/:api
- Common params
- ck - timestamp (optional)
-
Using
GET /search.v2/feeds.v2 -
Params
- q - search query string
- lf -
falseortrue(optional) - n - max count (default:
5) - d -
falseortrue(optional)
-
Response
{ "hint": ":query_string", "results": [ { "title": ":feed_title", "website": "site_uri", "feedId": ":feed_id", "score": :score, "solrScore": :solr_score, "deliciousTags: [":delicious_tag"], "language": ":lang", "velocity": :velocity, "subscribers": :subscriber_count, "documentBoost": :doc_boost, "avgLikes": :avg_like_count, "minLikes": :min_like_count, "maxLikes": :max_like_count, "medLikes": :med_like_count, "hint": ":query_string", "explain": ":search_query_explain" }, ... ], "related": [ ":related_keyword", ... ] }
@balupton: just reverse engineering.
I just used chrome dev tool, curl, and vim. :)