Looks like the Great Firewall or something like it is preventing you from completely loading www.skritter.com because it is hosted on Google App Engine, which is periodically blocked. Try instead our mirror:


This might also be caused by an internet filter, such as SafeEyes. If you have such a filter installed, try adding appspot.com to the list of allowed domains.

Skritter API Overview


This is my first time designing and implementing an API, so feedback is welcome! This is the beta (v0) version of the API; it will be changing often.

API Design

I'll try to follow these guidelines, for the most part. Here are the design guidelines in short:

  • All API endpoints will start with /api/v(version num)/
  • Resource endpoints will generally be of the form /api/v(version num)/(entity name)
  • GET, PUT, DELETE, POST and common HTTP codes will be used throughout
  • When trying to fetch specific resources which do not exist, such as by id, the system will return null in place of the object in the response, still with status code 200
  • Pagination will use cursor strings, not numerical offsets. This is how Google App Engine does pagination.
  • All responses and some parameters will be in JSON
  • Attribute names will be in CamelCase, lower case for properties, upper case for entities. Query parameters use underscores.
  • For now you should use the API through beta.skritter.com. On launch the stable API will be at api.skritter.com, and continuing development will be at beta.skritter.com
  • Authentication will use OAuth2. No scoping.
  • To limit the number of calls needed, there will be shortcuts to also fetch related entities in a single query.
  • To lower bandwidth needed, partial response (the fields property) and gzip'd responses will be supported throughout.
  • There are three general ways to fetch items: by ids, by query (as in a database query) or by search. All these will share the same url for a resource, and the fetch type is determined by which GET parameters you use.
  • As much as possible, making changes will follow the Active Record Pattern, in that clients download an entity, make changes to its properties, and then send back the entity to the server.