{"id":20777390,"url":"https://github.com/oxguy3/patreon-api","last_synced_at":"2025-05-11T10:31:20.497Z","repository":{"id":30730306,"uuid":"34286593","full_name":"oxguy3/patreon-api","owner":"oxguy3","description":"Reverse engineered documentation of Patreon's API","archived":true,"fork":false,"pushed_at":"2015-10-06T15:08:42.000Z","size":155,"stargazers_count":49,"open_issues_count":2,"forks_count":7,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-11T21:45:45.642Z","etag":null,"topics":["json-api","patreon-api"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oxguy3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-20T21:08:48.000Z","updated_at":"2025-02-19T13:39:09.000Z","dependencies_parsed_at":"2022-09-09T01:50:15.889Z","dependency_job_id":null,"html_url":"https://github.com/oxguy3/patreon-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxguy3%2Fpatreon-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxguy3%2Fpatreon-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxguy3%2Fpatreon-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxguy3%2Fpatreon-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oxguy3","download_url":"https://codeload.github.com/oxguy3/patreon-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253551729,"owners_count":21926344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json-api","patreon-api"],"created_at":"2024-11-17T13:15:14.908Z","updated_at":"2025-05-11T10:31:19.699Z","avatar_url":"https://github.com/oxguy3.png","language":null,"funding_links":["https://www.patreon.com/"],"categories":[],"sub_categories":[],"readme":"# Patreon API\nPatreon is developing an API of sorts. It's currently not used for a lot of actions on their website, other than for a few cleaned up features. It's also not documented yet. I'm doing some digging and am going to try my best to provide some documentation for it. I am not at all affiliated with Patreon and provide no warranty that this information will work in the future or even now. I'm just publishing it in the hope that it will be useful and will help people extend the Patreon platform in awesome ways.\n\n## Notes\n\nSome important information to look at before diving into this API.\n\n### Making requests\n\nPatreon is making use of the [JSON API spec](http://jsonapi.org) so some implementation details can be found by plumbing that documentation. The root of the API is at api.patreon.com\n\n### API keys\n\nSome requests require that you have an API key when you make them. This is done by appending \"?api_key=YOUR API KEY\" to the end of the URL. At present, it looks like there's only one API key shared by everyone: 1745177328c8a1d48100a9b14a1d38c1. Methods that require an api key are marked as such.\n\n\n### Timestamps\n\nUnless otherwise indicated, assume all timestamps are in this format: 1970-12-31T23:59:59\n\n\n\n## Methods\n\n\n### /login (POST)\n\nMethod for iniating a user session. Also retrieves a lot of information about the logged in user.\n\n**Body data**\n\n* email: user's patreon login email\n* password: user's patreon login password\n\n**Response**\n\n* data: user object\n\nIn addition to returning a JSON object with information about the user, the server also responds with a Set-Cookie header that sets a cookie named \"session_id\" to a unique session ID on the domain \"patreon.com\". This cookie appears to expire a month later by default.\n\n\n### /user (POST)\n\nCreates a user, currently used for FB registrations\n\n**Body data**\n\n* fb\\_access\\_token: presumably an access token for Facebook's API?\n* email: the email associated with the user's Facebook account?\n\n**Response**\n\n* data: user object\n\n\n### /user/:userid (GET)\n\nRetrieves data about a given user **[requires api key]**\n\n**Response**\n\n* data: user object\n\n\n### /current_user (GET)\n\nRetrieves information about the currently logged-in user. Appending \"?include=cards\" to the URL causes credit card information to be included as well.\n\n**Response**\n\n* data: user object\n* If \"?include=cards\", card objects (see below) will be linked.\n\n\n\n### /notifications\n\nUnfinished endpoint for an unreleased feature\n\n**Response**\n\n* data: currently an empty array\n\n\n\n### /campaign (GET)\n\nRetrieves a list of campaigns. Only seems to work if \"?filter=subbable\" is appended to the URL\n\n**Response**\n\n* data: array of campaign objects\n\n\n\n### /campaign/current_campaign (GET)\n\nUnfinished endpoint for an unreleased feature **[requires api key]**\n\n\n\n### /campaign/:campaignid (GET)\n\nRetrieves information about a particular campaign **[requires api key]**\n\n**Response**\n\n* data: array of all category objects\n* included: array of all reward objects and the user object for the creator of this campaign\n\n\n\n### /campaign/:campaignid/drafts (GET)\n\nUnfinished endpoint for an unreleased feature **[requires api key]**\n\n\n\n### /categories (GET)\n\nGets a list of all the categories on the site (this is part of an unreleased feature) **[requires api key]**\n\n**Response**\n\n* data: array of all category objects\n\n\n\n### /reward/:rewardid (GET)\n\nRetrieves a given reward by its numeric ID **[requires api key]**\n\n**Response**\n\n* data: a reward object\n* included: the user object of the creator\n\n\n\n### /post (GET)\n\nCreates a post??? Or maybe creates an ID for a post, which can then be modified with another call??? **[requires api key]**\n\n\n### /post/:postid (GET)\n\nUnfinished endpoint for an unreleased feature (but seems to be relatively functional at present).\n\nRetrieves a given post by its numeric ID **[requires api key]**\n\n**Response**\n\n* data: a post object\n\n\n### /post/:postid (POST)\n\nUnfinished endpoint for an unreleased feature\n\nModifies an existing post **[requires api key]**\n\n\n### /post/:postid (DELETE)\n\nUnfinished endpoint for an unreleased feature\n\nDeletes an existing post **[requires api key]**\n\n\n### /post/:postid/undelete (GET?)\n\nUnfinished endpoint for an unreleased feature\n\nUndeletes a previously-deleted post **[requires api key]**\n\n\n### /post/:postid/attachments (GET)\n\nUnfinished endpoint for an unreleased feature\n\nRetrieves the attachments for a given post **[requires api key]**\n\n**Response**\n\n* data: an array, presumably of attachments?\n\n\n### /post/:postid/attachments (POST)\n\nUnfinished endpoint for an unreleased feature\n\nUploads an attachment **[requires api key]**\n\n\n### /post/:postid/attachments (DELETE)\n\nUnfinished endpoint for an unreleased feature\n\nDeletes an existing attachment **[requires api key]**\n\n\n\n\n\n## Data types\n\nThese are the types of objects that may be included in requests or responses, either as the main \"data\" object, or as an object in the \"linked\" array.\n\n### Campaign\n\nRepresents a campaign (i.e. a content creator's patreon page, essentially). Often, the 'included' array will include all the reward objects for this campaign and a user object for the creator of this campaign.\n\n```\n{\n  \"about\": \"\u003cdescription of campaign\u003e\", // can contain HTML markup\n  \"created_at\": \"\u003ctimestamp\u003e\"\n  \"creation_name\": \"\u003cname of campaign\u003e\",\n  \"creator\": \u003cnumber\u003e, // seems to be a Subbable-only thing??\n  \"creator_name\": \"\u003cname of creator\u003e\", //seems to be a Subbable-only thing??\n  \"id\": \u003cnumber\u003e, // campaign ID number\n  \"image_small_url\": \"\u003curl to 320x320 image\u003e\",\n  \"image_url\": \"\u003curl to 714x402 image\u003e\",\n  \"is_monthly\": \u003cboolean\u003e, // does this campaign charge per-month or per-creation?\n  \"is_nsfw\": \u003cboolean\u003e,\n  \"links\": {\n    \"rewards\": {\n      \"linkage\": [\n        // array of reward objects\n      ]\n    }\n  }\n  \"main_video_embed\": \"\u003chtml\u003e\", // an embed tag for the campaign's main video\n  \"main_video_url\": \"\u003curl\u003e\", // an url to the campaign's main video\n  \"one_liner\": \"\u003cshort description of campaign\u003e\",\n  \"patron_count\": \u003cnumber\u003e,\n  \"pay_per_name\": \"\u003cpay per what?\u003e\" // what are supporters being charged for? (e.g. \"month\", \"video\", etc.)\n  \"pledge_sum\": \u003cnumber\u003e, // pledged amount in cents\n  \"published_at\": \"\u003ctimestamp\u003e\",\n  \"summary\": \"\u003chtml markup\u003e\",\n  \"thanks_embed\": \"\u003chtml\u003e\", // embed tag for patron thanks video (null if no video),\n  \"thanks_msg\": \"\u003ctext\u003e\", // message shown to thank patrons\n  \"thanks_video_url\": \"\u003curl\u003e\", // url for patron thanks video (null if no video),\n  \"type\": \"campaign\",\n  \"url\": \"\u003curl to patreon campaign\u003e\" // generally https://www.patreon.com/\u003cusername\u003e\n}\n```\n\n### Card\n\nRepresents a credit card or other payment method (i.e. PayPal)\n\n```\n{\n  \"card_type\": \"\u003cname of payment method\u003e\", // known possibilities: \"PayPal\", \"Visa\"\n  \"expiration_date\": \"\u003cexpiration date of card in YYYY-MM-DD format\u003e\", // will be null for PayPal\n  \"id\": \"\u003cunique identifier\u003e\",\n  \"links\": {\n    \"user\": {\n      \"id\": \"\u003cuser id\u003e\",\n      \"type\": \"user\"\n    }\n  },\n  \"number\": \u003clast four digits of credit card\u003e, // will be 0 for PayPal\n  \"type\": \"card\"\n}\n```\n\n### Category\n\nRepresents a category of campaign (e.g. Music, Comics, etc)\n\n```\n{\n  \"id\": \u003cnumeric id\u003e, // at time of writing, categories are ids 0-14, except the \"All\" category, which has id 99\n  \"name\": \u003cdisplay name for category\u003e,\n  \"type\": \"category\"\n}\n```\n\n\n### Comment\n\nRepresents a comment on a post\n\n```\n{\n  \"type\": \"\u003ccomment|like|success|other\u003e\",\n  \"body\": \"\u003cbody of the comment\u003e\",\n  \"links\": {\n    \"parent\": {\n      \"linkage\": {\n        \"type\": \"\u003ccomment|like|success|other\u003e\",\n        \"id\": \"\u003cid of parent comment\u003e\"\n      }\n    }\n  }\n}\n```\n\n\n### Post\n\nRepresents a post or creation on a campaign\n\n```\n{\n  \"campaign_id\": \"\u003cid of associated campaign\u003e\",\n  \"category\": \u003ccategory if relevant\u003e, // null if no comment set\n  \"cents_pledged_at_creation\": \u003cnumber\u003e, // what was the total sum of all pledges at the time when this was posted?\n  \"comment_count\": \u003ccomment count\u003e,\n  \"content\": \"\u003cbody text\u003e\",\n  \"created_at\": \"\u003ctimestamp\u003e\", // presumably can't be null\n  \"current_user_has_liked\": \u003cboolean\u003e, // has the logged in user liked this post?\n  \"deleted_at\": \u003ctimestamp\u003e, // null if not deleted\n  \"edited_at\": \u003ctimestamp\u003e, // null if not edited\n  \"embed\": { // stuff for embedding videos. if it's not a video, all sub-fields will be set to null\n      \"description\": null, // video description\n      \"domain\": null, // web domain of platform where video is uploaded\n      \"html\": null, // video embed code\n      \"subject\": null, // video title\n      \"url\": null // video url (i.e. on youtube or whatever other platform)\n  },\n  \"id\": \"\u003cid of this post\u003e\",\n  \"image_height\": \u003cheight of large image\u003e, // 0 if no image\n  \"image_large_url\": \"\u003curl of full size image\u003e\", // null if no image\n  \"image_url\": \"\u003curl of image shrunk to 320px wide\u003e\", // null if no image\n  \"image_width\": \u003cwidth of large image\u003e, // 0 if no image\n  \"is_creation\": \u003cboolean\u003e, // is this a creation or just a post?\n  \"is_paid\": \u003cboolean\u003e, // true if this is an automated post after a month/content is completed, else false\n  \"like_count\": \u003cnumber of likes\u003e,\n  \"min_cents_pledged_to_view\": \u003cnumber\u003e, // minimum individual pledge necessary to view post\n  \"post_type\": \"\u003cimage|text_only|link\u003e\", // may be other unknown values\n  \"published_at\": \"\u003ctimestamp\u003e\", // null if unpublished\n  \"thumbnail_url\": \"\u003curl of 75x75 image\u003e\", // null if no image\n  \"title\": \"\u003cpost title\u003e\",\n  \"type\": \"post\",\n  \"url\": \"\u003curl to this post\u003e\",\n  \"user_id\": \"\u003cid of user who posted\u003e\"\n}\n```\n\n\n### Reward\n\nRepresents a reward tier for a campaign. There are two reward objects, id:-1 \"Everyone\" and id:0 \"Patrons Only\", that seem to be global and constant for all campaigns.\n\n```\n{\n  \"amount\": \u003cnumber\u003e, // pledge in cents required to access this reward (null if unrestricted)\n  \"created_at\": \u003ctimestamp\u003e, // null for global rewards\n  \"creator_id\": null, // only appears for global rewards\n  \"description\": \"\u003chtml markup\u003e\", // description of what this \n  \"id\": \"\u003cunique identifier\u003e\",\n  \"links\": {\n    \"creator\": {\n      \"linkage\": {\n          \"id\": \"\u003cuser id of creator of this reward\u003e\",\n          \"type\": \"user\"\n      }\n    }\n  },\n  \"requires_shipping\": \u003cboolean\u003e, // does patreon require a shipping address from users who enter at this level?\n  \"type\": \"reward\",\n  \"user_limit\": \u003cnumber\u003e // how many users are allowed to claim this reward? 0 if unlimited, null for global rewards\n},\n```\n\n\n### User\n\nA user object contains information about a Patreon user, usually the currently logged-in user.\n\n```\n{\n  \"about\": \"\u003cabout me\u003e\", // an optional bio, can be null\n  \"created\": \"\u003ctimestamp\u003e\",\n  \"email\": \"\u003cuser email\u003e\",\n  \"first_name\": \"\u003cfirst name\u003e\",\n  \"full_name\": \"\u003cfirst and last name\u003e\",\n  \"gender\": \u003cnumber\u003e, // 0 if unset, 1 if male, 2 if female\n  \"id\": \"\u003cuser id\u003e\", // is always numeric afaik, but appears as a string nonetheless\n  \"image_url\": \"\u003curl to 200x200 jpg\u003e\",\n  \"last_name\": \"\u003clast name\u003e\",\n  \"status\": 1, // not sure what this means, usually it's 1 but I have seen 0\n  \"thumb_url\": \"\u003curl to 50x50 jpg\u003e\",\n  \"type\": \"user\",\n  \"url\": \"\u003cclean url to user profile\u003e\",\n  \"vanity\": \"\u003ccustom url username\u003e\" // null if no vanity username set\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxguy3%2Fpatreon-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foxguy3%2Fpatreon-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxguy3%2Fpatreon-api/lists"}