Micropub(Redirected from micropub)
Micropub is an open API standard that is used to create posts on one's own domain using third-party clients. Web apps and native apps (e.g. iPhone, Android) can use Micropub to post short notes, photos, events or other posts to your own site.
BackgroundThe Micropub vocabulary is derived directly from the Microformats vocabulary. Micropub is meant to be a serialization of Microformats that can be submitted as an HTTP POST. The method for developing new Micropub vocabularies is to look at the Microformats representation and work backwards. SyntaxSimilar to how microformats has a relatively small ruleset for parsing HTML documents into a data structure, Micropub defines a small set of rules to interpret HTTP POST and GET requests as Micropub commands. Where Microformats does not require changing the parsing rules to introduce new properties of an object such as an h-entry, Micropub similarly does not require changing parsing rules to interpret requests that may correspond to different post types, such as posting videos vs "likes". The Micropub syntax describes how to interpret HTTP POST and GET requests into a useful action the server can take. The full specification can be read at http://micropub.net/draft/ OverviewAll Micropub requests to create posts are sent as form-encoded[1], multipart form-data [2], or JSON encoded HTTP requests. Responses typically do not include a response body, indicating the needed information (such as the URL of the created post) in HTTP headers. When a response body is required, it is returned as either form-encoded or JSON[3], depending on the HTTP Accept[4] header.
How to implementHow to implement the Micropub API, both in a client that can discover an endpoint and publish to it, and on a server to support an endpoint to create/update/delete posts in response. Endpoint DiscoveryIt should be possible to configure an API client by authenticating as your domain name using IndieAuth. After signing in, your domain needs a way to specify the API endpoint the client will use to create new posts. Add a <link> tag in the HTML head of your home page, or send an HTTP Link header. HTTP HeaderLink: <https://example.com/micropub>; rel="micropub" HTML Head<link rel="micropub" href="https://example.com/micropub"> AuthenticationMicropub requests are authenticated by including a Bearer Token in either the HTTP header or a form-encoded body parameter as described in the OAuth Bearer Token RFC. Authorization should be handled via the IndieAuth protocol, built on top of OAuth 2.0. See obtaining-an-access-token for more details. An app that wants to post to a user's Micropub endpoint will need to obtain authorization from the user in order to get an access token. HTTP HeaderAuthorization: Bearer XXXXXXXX Form-Encoded Body Parameteraccess_token=XXXXXXXXX ScopeThe client may request one or more scopes during the authorization request. It does this according to standard OAuth 2.0 techniques, by passing a space-separated list of scope names in the authorization request. The authorization server must indicate to the user any scopes that are part of the request, whether or not the authorization server recognizes the scopes. The authorization server may also allow the user to add or remove scopes that the client requests. For example, most Micropub servers require clients to obtain the "post" scope in order to create posts. However, some servers may require more granular scope requests, such as "delete" or "post:video". See scope for more details and a list of all currently used values for scope. Verification(This section is a stub) When a Micropub client obtains an access token, it may need to be able to verify the access token is valid and retrieve the URL of the user it belongs to. Micropub endpoints must implement a method that returns basic information about the access token. Access tokens can be verified by making an empty GET request to the Micropub endpoint with the access token in the header. If the access token is valid, the Micropub endpoint must reply with at least the "me" parameter, and may also return scope, client_id, and expiration date. Note: This may not be appropriate for the micropub endpoint and may be better handled by the token endpoint. Form-encoded Microformats RepresentationFor the simplicity of writing clients and servers, all Micropub endpoints must handle the standard form-encoded format. At a most basic level, you should be able to write an HTML form and set the form action to your own endpoint and use it to post to your site.
Examples of Creating ObjectsIndicating the object being createdTo indicate the object being created, use a property called "h", (which would never be the name of a property of a microformats object), followed by the name of the microformats object. Examples:
h-entryThe following properties may be included in a request to create a new h-entry:
New NotePosting a new note with tags, syndicating to myfavoritesocialnetwork:
POST /micropub HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=entry &content=The+%40Jawbone+UP%2C+my+favorite+of+the+%23quantifiedself+trackers%2C+finally+released+their+official+API%21+http%3A%2F%2Fjawbone.com%2Fup%2Fdeveloper%2F &category[]=jawbone&category[]=quantifiedself&category[]=api &mp-syndicate-to=https://myfavoritesocialnetwork.example/aaronpk Minimal ExamplePOST /micropub HTTP/1.1 Host: example.com Content-type: application/x-www-form-urlencoded Authorization: Bearer XXXXXXX h=entry &content=Hello+World curl https://example.com/micropub -d h=entry -d "content=Hello World" -H "Authorization: Bearer XXXXXXX" New ReplyPosting a new reply, syndicating to myfavoritesocialnetwork
POST /post/new HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=entry &content=%40BarnabyWalters+My+favorite+for+that+use+case+is+Redis.+It%27s+easy+to+set+up+and+use%2C+I+often+use+it+to+move+data+between+apps+written+in+different+languages+too. &in-reply-to=http://waterpigs.co.uk/notes/4S0LMw/ &mp-syndicate-to=https://myfavoritesocialnetwork.example/aaronpk New RepostPosting a new repost, and adding additional tags.
POST /micropub HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=entry &repost-of=http://waterpigs.co.uk/notes/4S0LMw/ &category=realtime New ArticlePosting a new article
POST /micropub HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=entry &content=Now+that+I%27ve+been+%5Bhttp%3A%2F%2Faaronparecki.com%2Fevents+creating+a+list+of+events%5D+on+my+site+using+%5Bhttp%3A%2F%2Findiewebcamp.com%2Fp3k+p3k%5D%2C+it+would+be+great+if+I+could+get+a+more+calendar-like+view+of+that+list.+%0A%0ASince+I+live+in+Google+Calendar+every+day+anyway%2C+it+would+be+great+to+use+that+interface+to+browse+my+%23indieweb+events+as+well%21+Since+my+events+page+is+marked+up+with+%5Bhttp%3A%2F%2Fmicroformats.org%2Fwiki%2Fh-event+h-event+microformats%5D%2C+all+it+would+take+is+to+write+an+h-event+to+iCal+converter+script+to+generate+an+iCal+feed+from+my+list+of+events.+Then+I+could+just+subscribe+to+the+iCal+feed+from+within+Google+Calendar.%0A%0A%23%23%23+Bonus%3A+read%2Fwrite+access+to+indieweb+events+via+Google+Calendar%0A%0AEven+better+would+be+to+use+Google+Calendar+to+also+create+events+on+my+site.+Unfortunately+Google+Calendar+doesn%27t+support+CalDAV%2C+so+we+can%27t+do+it+that+way.+%28Of+course+I+could+use+Apple%27s+iCal+to+publish+directly%2C+but+that+also+means+I%27d+have+to+write+some+code+tot+speak+CalDAV%29.+%0A%0AInstead%2C+I+can+create+a+%22write-only%22+calendar+in+Google+Calendar%2C+and+have+p3k+subscribe+to+it.+Any+new+events+in+that+feed+would+be+moved+over+to+the+internal+events+page+and+deleted+from+the+Google+Calendar. &name=Itching%3A+h-event+to+iCal+converter &category[]=indieweb&category[]=hevent&category[]=events&category[]=calendar&category[]=p3k New BookmarkPosting a new bookmark with name, quote, and tags.
POST /micropub HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=entry &bookmark-of=https%3A%2F%2Fplus.google.com%2F%2BKartikPrabhu%2Fposts%2FUzKErSbfmHq &name=To+everyone+who+is+complaining+about+Popular+Science+shutting+down+comments... &content=%22Why+is+there+this+expectation+that+every+website+should+be+a+forum%3F+No+website+has+any+obligation+to+provide+a+space+for+your+rants.+Use+your+own+space+on+the+web+to+do+that.%22 &category[]=indieweb&category[]=comments
Adding FilesWhen a Micropub request includes a file, the entire request is sent in the When OwnYourGram makes a Micropub request to post a video, it also sends a photo which is a thumbnail preview of the video. In PHP, these files are accessible using the $_FILES['video'] $_FILES['photo'] $_FILES['audio'] see also: Micropub-brainstorming#Uploading_files_in_separate_requests Note that there is no practical way to upload a file when the request body is JSON encoded. h-eventThe following properties may be included in a request to create a new h-event: Posting a new event
POST /micropub HTTP/1.1 Host: aaronparecki.com Content-type: application/x-www-form-urlencoded h=event &name=IndieWeb Dinner at 21st Amendment &description=In SF Monday evening? Join @caseorganic and I for an #indieweb dinner at 6pm! (Sorry for the short notice!) &start=2013-09-30T18:00:00-07:00 &category=indieweb &location=http://21st-amendment.com/
h-citeThe following properties may be included in a request to create a new h-cite: (The following list is from microformats.org/wiki/h-cite)
Nested Microformat ObjectsWhenever possible, nested Microformats objects should be avoided. A better alternative is to reference objects by their URLs. The most common example is including an h-card for a venue, such as checking in to a location or tagging a photo with a person or location. In these cases, it is better to reference the object by URL, creating it first if necessary. For simple values such as an h-geo property with latitude and longitude, just use a Geo URI such as This technique has the advantage of ensuring that each object that is created has its own URL (each piece of data has its own link). This also gives the server an opportunity to handle each entity separately. E.g., rather than creating a duplicate of an existing venue, it may give back a link to one that was already created, possibly even merging in newly received data first. For more complicated objects, it is better to first create an object on the target site so that it has its own URL, then reference that object's URL in the main request. For example, creating a checkin post would involve two POST requests: First create the venue by posting an h-card: POST /micropub h=card &name=Ford+Food+and+Drink &url=http://www.fordfoodanddrink.com/ &street-address=2505 SE 11th Ave &locality=Portland ®ion=OR &postal-code=97214 &geo=geo:45.5048473,-122.6549551 &tel=(503) 236-3023 Response: HTTP/1.1 201 Created Location: http://example.com/venue/10 Then create the checkin post: POST /micropub h=entry &location=http://example.com/venue/10 &name=Working on Micropub &category=indieweb Response: HTTP/1.1 201 Created Location: http://example.com/entry/1001
In some cases, it does not make sense for the nested object to have a URL. For example, when posting an h-measure value, there is no reason for the h-measure itself to have a URL, so this is an acceptable case to use the nested microformats object syntax. For example, creating a new "weight" measurement post as an h-entry with h-measure objects: h=entry &weight[type]=h-measure &weight[properties][num]=155.73 &weight[properties][unit]=lb &bodyfat[type]=h-measure &bodyfat[properties][num]=19.83 &bodyfat[properties][unit]=% If you think you have found a case that requires a nested object, please document it on Micropub-brainstorming and feel free to drop in the IRC channel to discuss it. ExamplesIndieWeb ExamplesExamples of IndieWeb sites that support the micropub API (in order of deployment). Aaron Parecki
Barnaby WaltersBarnaby Walters posts notes and replies on waterpigs.co.uk (Taproot) since 2014-03-10 using Shrewdness and Taproot as micropub clients Emma KuoEmma Kuo posts notes, replies and photos on notenoughneon.com since 2014-04-28 using Neonblog and OwnYourGram. Kyle Mahan
Kartik PrabhuKartik posts notes on kartikprabhu.com via micropub using Quill since 2014-05-24 PostlyBen Roberts posts to his Postly site via micropub. Photos are posted using OwnYourGram and Notes, Replies, and Articles are posted using his own Postly Client. Deleting entries via micropub added 2014-09-28. Jeremy KeithJeremy Keith supports posting notes and photos via micropub since 2014-10-21. He shared an example of his PHP source code, minimal micropub endpoint. Bear
rhiaro
Pelle Wessman
Shane HudsonShane Hudson supports micropub for notes (with geo) only since 2015-07-11. Twitter syndication and photo support are on the to-do list. Jeena Paradies
kongaloosh
Harry Reeder
CMS ExamplesMicropub has been added to the following CMS software and blog publishing tools for additional server support. KnownBen has written a Known plugin that logs in via IndieAuth and publishes content via micropub. It's designed to work so that all indieweb post types - notes etc - are passed to the content plugin registered to handle them. [5] WordPressWordPress supports Micropub via DrupalStefan Auditor wrote a Drupal module to add a Micropub endpoint to Drupal installs on 2015-05-10. https://github.com/sanduhrs/micropub CraftShane has written a Craft plugin for Micropub. It currently only works with notes and requires some configuration to setup. It has also only been tested with Quill so far, as of 2015-07-11. https://github.com/ShaneHudson/Micropub_Craft Services ExamplesSilo.pubIn April 2015, ownyourresponses
The original motivation is described in PESOS for Bridgy Publish. ClientsSites and client applications that publish via micropub. Alphabetically sorted. EditorialThe iOS text editor Editorial can publish its documents to Micropub through a couple of third party Workflows created by Jonnybarnes.ukJonnyBarnes post UI is publicly available at https://jonnybarnes.uk/notes/new MicropublishMicropublish is Barry Frost's simple Micropub client. Supports Note, Article, Bookmark, Reply, Repost and Like post types. Barry uses this to post all content on his site. Ruby source code is available on GitHub. micropub-xmpp-botIn September 2015, open source: https://github.com/kylewm/micropub-xmpp-bot/ MobilePubMobilePub is a mobile phone micropub client app written by Ben Roberts. The app can take and upload photos, video, and audio as well. MonocleMonocle is a reader that supports posting likes and reposts to the user's Micropub endpoint. NeonblogEmma's Neonblog post UI creates notes and articles via micropub. OwnYourGramaaronpk's OwnYourGram is a tool to reverse-syndicate instagram photos to your personal site, using micropub.
PostlyBen Roberts' Postly creates notes and articles via micropub and can add syndication links after posting. synditate-to links are passed as a php readable array field not a comma separated list. Postly can also edit posts when passing mp-action=edit Publicly Available UI PushupCounteraaronpk's PushupCounter-iOS is an iOS client for publishing exercise data. QuillQuill is a reference Micropub client developed by
ShrewdnessShrewdness - indieweb reader TaprootBarnaby's Taproot publishes notes via micropub. The post UI is publicly accessible, and you can use it to make posts on your own website. As of 2014-06-12 it’s also marked up with h-product and h-x-app markup so that authorization UIs can provide a better experience whilst authorizing, without having to pre-register apps and upload logos TeacupTeacup is a Micropub client for posting various types of food posts. unmpcunmpc - an experiment by elf Pavlik which implements Micropub client +reader as Unhosted web app (HTML5 running fully in a web browser - noBackend) WoodwindWoodwind has optional support for posting replies and likes via Micropub. Includes toggles for syndicate-to endpoints as of 2015-02-10. LibrariesOpen source libraries & implementations used to support micropub on the client app side and on the API endpoint side on the server:
IssuesPlease use the Github repo for issues and discussion related to the spec. For issues that have been discussed and are ready to consider for inclusion in the spec, use the Micropub-brainstorming page to collect examples and iterate on the ideas. See Also |



















