Official Go client library.


go get


See all functionality and usages in the API documentation.

Example usage
import ""

func main() {
	// Create the client
	c := writeas.NewClient()

	// Publish a post
	p, err := c.CreatePost(&writeas.PostParams{
		Title:   "Title!",
		Content: "This is a post.",
		Font:    "sans",
	if err != nil {
		// Perhaps show err.Error()

	// Save token for later, since it won't ever be returned again
	token := p.Token

	// Update a published post
	p, err = c.UpdatePost(p.ID, token, &writeas.PostParams{
		Content: "Now it's been updated!",
	if err != nil {
		// handle

	// Get a published post
	p, err = c.GetPost(p.ID)
	if err != nil {
		// handle

	// Delete a post
	err = c.DeletePost(p.ID, token)


The library covers our usage, but might not be comprehensive of the API. So we always welcome contributions and improvements from the community. Before sending pull requests, make sure you've done the following:

  • Run goimports on all updated .go files.
  • Document all exported structs and funcs.





    Package writeas provides the binding for the API




    View Source
    const (
    	TypePost            PostType = "post"
    	TypePrompt                   = "prompt"
    	TypePromptArchive            = "prompt-arch"
    	TypeSubmission               = "submission"
    	TypeSubmissionDraft          = "submission-draft"
    View Source
    const (
    	// Current go-writeas version
    	Version = "2"


    This section is empty.


    This section is empty.


    type AuthUser

    type AuthUser struct {
    	AccessToken string `json:"access_token,omitempty"`
    	Password    string `json:"password,omitempty"`
    	User        *User  `json:"user"`

      AuthUser represents a just-authenticated user. It contains information that'll only be returned once (now) per user session.

      type BatchPostResult

      type BatchPostResult struct {
      	ID           string `json:"id,omitempty"`
      	Code         int    `json:"code,omitempty"`
      	ErrorMessage string `json:"error_msg,omitempty"`

        BatchPostResult contains the post-specific result as part of a larger batch operation.

        type BodyResponse

        type BodyResponse struct {
        	Body string `json:"body"`

        type ClaimPostResult

        type ClaimPostResult struct {
        	ID           string `json:"id,omitempty"`
        	Code         int    `json:"code,omitempty"`
        	ErrorMessage string `json:"error_msg,omitempty"`
        	Post         *Post  `json:"post,omitempty"`

          ClaimPostResult contains the post-specific result for a request to associate a post to an account.

          type Client

          type Client struct {
          	// UserAgent overrides the default User-Agent header
          	UserAgent string
          	// contains filtered or unexported fields

            Client is used to interact with the API. It can be used to make authenticated or unauthenticated calls.

            func NewClient

            func NewClient() *Client

              NewClient creates a new API client. By default, all requests are made unauthenticated. To optionally make authenticated requests, call `SetToken`.

              c := writeas.NewClient()

              func NewClientWith

              func NewClientWith(c Config) *Client

                NewClientWith builds a new API client with the provided configuration.

                func NewDevClient

                func NewDevClient() *Client

                  NewDevClient creates a new API client for development and testing. It'll communicate with our development servers, and SHOULD NOT be used in production.

                  func NewTorClient

                  func NewTorClient(port int) *Client

                    NewTorClient creates a new API client for communicating with the Tor hidden service, using the given port to connect to the local SOCKS proxy.

                    func (*Client) ClaimPosts

                    func (c *Client) ClaimPosts(sp *[]OwnedPostParams) (*[]ClaimPostResult, error)

                      ClaimPosts associates anonymous posts with a user / account.

                      func (*Client) CreateCollection

                      func (c *Client) CreateCollection(sp *CollectionParams) (*Collection, error)

                        CreateCollection creates a new collection, returning a user-friendly error if one comes up. Requires a subscription. See

                        func (*Client) CreatePost

                        func (c *Client) CreatePost(sp *PostParams) (*Post, error)

                          CreatePost publishes a new post, returning a user-friendly error if one comes up. See

                          This is a post.

                          func (*Client) DeleteCollection

                          func (c *Client) DeleteCollection(alias string) error

                            DeleteCollection permanently deletes a collection and makes any posts on it anonymous.


                            func (*Client) DeletePost

                            func (c *Client) DeletePost(id, token string) error

                              DeletePost permanently deletes a published post. See

                              func (*Client) GetCollection

                              func (c *Client) GetCollection(alias string) (*Collection, error)

                                GetCollection retrieves a collection, returning the Collection and any error (in user-friendly form) that occurs. See

                                func (*Client) GetCollectionPost

                                func (c *Client) GetCollectionPost(alias, slug string) (*Post, error)

                                  GetCollectionPost retrieves a post from a collection and any error (in user-friendly form) that occurs). See

                                  func (*Client) GetCollectionPosts

                                  func (c *Client) GetCollectionPosts(alias string) (*[]Post, error)

                                    GetCollectionPosts retrieves a collection's posts, returning the Posts and any error (in user-friendly form) that occurs. See

                                    func (*Client) GetPost

                                    func (c *Client) GetPost(id string) (*Post, error)

                                      GetPost retrieves a published post, returning the Post and any error (in user-friendly form) that occurs. See

                                      func (*Client) GetUserCollections

                                      func (c *Client) GetUserCollections() (*[]Collection, error)

                                        GetUserCollections retrieves the authenticated user's collections. See

                                        func (*Client) GetUserPosts

                                        func (c *Client) GetUserPosts() (*[]Post, error)

                                          GetUserPosts retrieves the authenticated user's posts. See

                                          func (*Client) LogIn

                                          func (c *Client) LogIn(username, pass string) (*AuthUser, error)

                                            LogIn authenticates a user with See

                                            func (*Client) LogOut

                                            func (c *Client) LogOut() error

                                              LogOut logs the current user out, making the Client's current access token invalid.

                                              func (*Client) Markdown

                                              func (c *Client) Markdown(body, collectionURL string) (string, error)

                                                Markdown takes raw Markdown and renders it into usable HTML. See

                                                func (*Client) PinPost

                                                func (c *Client) PinPost(alias string, pp *PinnedPostParams) error

                                                  PinPost pins a post in the given collection. See

                                                  func (*Client) SetToken

                                                  func (c *Client) SetToken(token string)

                                                    SetToken sets the user token for all future Client requests. Setting this to an empty string will change back to unauthenticated requests.

                                                    func (*Client) Token

                                                    func (c *Client) Token() string

                                                      Token returns the user token currently set to the Client.

                                                      func (*Client) UnpinPost

                                                      func (c *Client) UnpinPost(alias string, pp *PinnedPostParams) error

                                                        UnpinPost unpins a post from the given collection. See

                                                        func (*Client) UpdatePost

                                                        func (c *Client) UpdatePost(id, token string, sp *PostParams) (*Post, error)

                                                          UpdatePost updates a published post with the given PostParams. See

                                                          type Collection

                                                          type Collection struct {
                                                          	Alias       string `json:"alias"`
                                                          	Title       string `json:"title"`
                                                          	Description string `json:"description"`
                                                          	StyleSheet  string `json:"style_sheet"`
                                                          	Private     bool   `json:"private"`
                                                          	Views       int64  `json:"views"`
                                                          	Domain      string `json:"domain,omitempty"`
                                                          	Email       string `json:"email,omitempty"`
                                                          	URL         string `json:"url,omitempty"`
                                                          	TotalPosts int `json:"total_posts"`
                                                          	Posts *[]Post `json:"posts,omitempty"`

                                                            Collection represents a collection of posts. Blogs are a type of collection on

                                                            type CollectionParams

                                                            type CollectionParams struct {
                                                            	Alias       string `json:"alias"`
                                                            	Title       string `json:"title"`
                                                            	Description string `json:"description,omitempty"`

                                                              CollectionParams holds values for creating a collection.

                                                              type Config

                                                              type Config struct {
                                                              	// URL of the API service. Defaults to
                                                              	URL string
                                                              	// If specified, the API client will communicate with the Tor
                                                              	// hidden service using the provided port to connect to the local SOCKS
                                                              	// proxy.
                                                              	TorPort int
                                                              	// If specified, requests will be authenticated using this user token.
                                                              	// This may be provided after making a few anonymous requests with
                                                              	// SetToken.
                                                              	Token string

                                                                Config configures a client.

                                                                type OwnedPostParams

                                                                type OwnedPostParams struct {
                                                                	ID    string `json:"id"`
                                                                	Token string `json:"token,omitempty"`

                                                                  OwnedPostParams are, together, fields only the original post author knows.

                                                                  type PinnedPostParams

                                                                  type PinnedPostParams struct {
                                                                  	ID       string `json:"id"`
                                                                  	Position int    `json:"position"`

                                                                    PinnedPostParams holds values for pinning a post

                                                                    type Post

                                                                    type Post struct {
                                                                    	ID        string    `json:"id"`
                                                                    	Slug      string    `json:"slug"`
                                                                    	Token     string    `json:"token"`
                                                                    	Font      string    `json:"appearance"`
                                                                    	Language  *string   `json:"language"`
                                                                    	RTL       *bool     `json:"rtl"`
                                                                    	Listed    bool      `json:"listed"`
                                                                    	Type      PostType  `json:"type"`
                                                                    	Created   time.Time `json:"created"`
                                                                    	Updated   time.Time `json:"updated"`
                                                                    	Title     string    `json:"title"`
                                                                    	Content   string    `json:"body"`
                                                                    	Views     int64     `json:"views"`
                                                                    	Tags      []string  `json:"tags"`
                                                                    	Images    []string  `json:"images"`
                                                                    	OwnerName string    `json:"owner,omitempty"`
                                                                    	Collection *Collection `json:"collection,omitempty"`

                                                                      Post represents a published post, whether anonymous, owned by a user, or part of a collection.

                                                                      type PostParams

                                                                      type PostParams struct {
                                                                      	// Parameters only for updating
                                                                      	ID    string `json:"-"`
                                                                      	Token string `json:"token,omitempty"`
                                                                      	// Parameters for creating or updating
                                                                      	Slug     string     `json:"slug"`
                                                                      	Created  *time.Time `json:"created,omitempty"`
                                                                      	Updated  *time.Time `json:"updated,omitempty"`
                                                                      	Title    string     `json:"title,omitempty"`
                                                                      	Content  string     `json:"body,omitempty"`
                                                                      	Font     string     `json:"font,omitempty"`
                                                                      	IsRTL    *bool      `json:"rtl,omitempty"`
                                                                      	Language *string    `json:"lang,omitempty"`
                                                                      	// Parameters only for creating
                                                                      	Crosspost []map[string]string `json:"crosspost,omitempty"`
                                                                      	// Parameters for collection posts
                                                                      	Collection string `json:"-"`

                                                                        PostParams holds values for creating or updating a post.

                                                                        type PostType

                                                                        type PostType string

                                                                        type User

                                                                        type User struct {
                                                                        	Username string    `json:"username"`
                                                                        	Email    string    `json:"email"`
                                                                        	Created  time.Time `json:"created"`
                                                                        	// Optional properties
                                                                        	Subscription *UserSubscription `json:"subscription"`

                                                                          User represents a registered user.

                                                                          type UserSubscription

                                                                          type UserSubscription struct {
                                                                          	Name       string    `json:"name"`
                                                                          	Begin      time.Time `json:"begin"`
                                                                          	End        time.Time `json:"end"`
                                                                          	AutoRenew  bool      `json:"auto_renew"`
                                                                          	Active     bool      `json:"is_active"`
                                                                          	Delinquent bool      `json:"is_delinquent"`

                                                                            UserSubscription contains information about a user's subscription.