Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Writeas

ASecurity

Write.as API Documentation

40 stars
0 votes
0 copies
8 views
Added 12/21/2025
developmentjavascriptpythongojavaphpswifttestingdebugginggitapi

Works with

cliapi

Security Analysis

A100/100

Scanned 2/10/2026

Install to Claude Code

$npx -y skills add rawveg/skillsforge-marketplace --skill writeas --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Writeas?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Writeas
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rawveg-writeas/badge)](https://www.skillsdirectory.com/skills/rawveg-writeas)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: writeas
description: Write.as API Documentation
---

# Write.as Skill

Comprehensive assistance with Write.as and WriteFreely API development, based on official API documentation. This skill provides practical guidance for building applications around the Write.as blogging platform and its open-source WriteFreely implementation.

## When to Use This Skill

This skill should be triggered when:
- Working with the Write.as REST API (`https://write.as/api/`)
- Building applications that interact with Write.as or WriteFreely
- Implementing blog post creation, updates, or management
- Setting up user authentication for Write.as accounts
- Creating or managing collections (blogs)
- Implementing crossposting to Twitter, Medium, or Tumblr
- Integrating Markdown rendering for blog posts
- Debugging Write.as API calls or authentication issues
- Working with anonymous posts and post claiming
- Building self-hosted WriteFreely instances

## Key Concepts

### Core Terminology

**Posts**: Markdown-based articles with metadata. Posts can be created anonymously or associated with a user account.

**Collections**: Known as "blogs" in the UI. Container for multiple posts with customizable settings. Creating collections requires a Pro account.

**Users**: Registered accounts with password, email, and resource access. Users can own multiple collections and posts.

**Tokens**: Used for authentication and post management. Anonymous posts return a `token` for later modifications, while user operations use access tokens via `Authorization: Token {access_token}` header.

### Authentication

- **Anonymous**: No authentication required. Store the returned `token` for later updates/deletions.
- **User-based**: Login via `/api/auth/login` to get an access token, then pass it in the `Authorization` header.

## Quick Reference

### Creating an Anonymous Post

```json
POST https://write.as/api/posts
Content-Type: application/json

{
  "body": "This is a post.",
  "title": "My First Post"
}
```

**Response:**
```json
{
  "code": 201,
  "data": {
    "id": "rf3t35fkax0aw",
    "token": "ozPEuJWYK8L1QsysBUcTUKy9za7yqQ4M",
    "title": "My First Post",
    "body": "This is a post."
  }
}
```

**Note**: Save the `token` to update or delete this post later.

### Updating a Post (Anonymous)

```json
POST https://write.as/api/posts/{POST_ID}
Content-Type: application/json

{
  "token": "ozPEuJWYK8L1QsysBUcTUKy9za7yqQ4M",
  "body": "This is an updated post."
}
```

### User Authentication

```json
POST https://write.as/api/auth/login
Content-Type: application/json

{
  "alias": "username",
  "pass": "password"
}
```

**Response:**
```json
{
  "code": 200,
  "data": {
    "access_token": "00000000-0000-0000-0000-000000000000",
    "user": {
      "username": "username"
    }
  }
}
```

### Creating a Post as Authenticated User

```json
POST https://write.as/api/posts
Authorization: Token 00000000-0000-0000-0000-000000000000
Content-Type: application/json

{
  "body": "# My authenticated post\n\nThis post is linked to my account.",
  "title": "Authenticated Post"
}
```

### Styling Posts with Fonts

```json
POST https://write.as/api/posts
Content-Type: application/json

{
  "body": "This is a monospace code post.",
  "font": "code"
}
```

**Available fonts:**
- `sans` - Sans-serif with word wrap
- `serif` or `norm` - Serif with word wrap
- `wrap` - Monospace with word wrap
- `mono` - Monospace without wrap
- `code` - Syntax-highlighted monospace

### Crossposting to Social Media

```json
POST https://write.as/api/posts
Authorization: Token 00000000-0000-0000-0000-000000000000
Content-Type: application/json

{
  "body": "Check out my new post!",
  "title": "My Post",
  "crosspost": [
    {"twitter": "yourusername"},
    {"medium": "yourusername"}
  ]
}
```

**Supported services**: Twitter, Tumblr, Medium

### Creating a Collection (Pro Feature)

```json
POST https://write.as/api/collections
Authorization: Token 00000000-0000-0000-0000-000000000000
Content-Type: application/json

{
  "alias": "my-blog",
  "title": "My Blog"
}
```

### Publishing to a Collection

```json
POST https://write.as/api/collections/{ALIAS}/posts
Authorization: Token 00000000-0000-0000-0000-000000000000
Content-Type: application/json

{
  "body": "# First blog post\n\nWelcome to my blog!",
  "title": "Hello World"
}
```

### Moving Anonymous Post to Collection

```json
POST https://write.as/api/collections/{ALIAS}/collect
Authorization: Token 00000000-0000-0000-0000-000000000000
Content-Type: application/json

[
  {
    "id": "rf3t35fkax0aw",
    "token": "ozPEuJWYK8L1QsysBUcTUKy9za7yqQ4M"
  }
]
```

### Rendering Markdown to HTML

```json
POST https://write.as/api/markdown
Content-Type: application/json

{
  "raw_body": "# Hello\n\nThis is **Markdown**."
}
```

**Response:**
```json
{
  "code": 200,
  "data": {
    "body": "<h1>Hello</h1>\n<p>This is <strong>Markdown</strong>.</p>"
  }
}
```

## Error Handling

All API responses follow this structure:

```json
{
  "code": 200,
  "data": {}
}
```

**Common HTTP status codes:**
- `200` - Success
- `201` - Created successfully
- `400` - Bad request or malformed data
- `401` - Missing or invalid authentication
- `403` - Insufficient permissions (e.g., creating collection without Pro)
- `404` - Resource not found
- `410` - Post unpublished (may return later)
- `429` - Rate limited

## Reference Files

This skill includes comprehensive documentation in `references/`:

- **api.md** - Complete Write.as API documentation including:
  - All available endpoints (posts, collections, users, formatting)
  - Request/response examples
  - Authentication methods
  - Crossposting configuration
  - Error codes and handling

Use `view` to read the API reference file when detailed information is needed.

## Working with This Skill

### For Beginners

1. **Start with anonymous posts**: No authentication required, perfect for testing
2. **Save the token**: Always store the `token` returned when creating anonymous posts
3. **Test with single posts**: Create, update, retrieve, and delete one post before scaling
4. **Read error responses**: The API provides clear error messages in the response body

### For Intermediate Users

1. **Implement user authentication**: Use `/api/auth/login` to get access tokens
2. **Work with collections**: Create blogs and organize posts into collections
3. **Enable crossposting**: Automatically share posts to Twitter, Medium, or Tumblr
4. **Claim anonymous posts**: Convert anonymous posts to user-owned posts with `/api/posts/claim`
5. **Use post styling**: Apply different fonts (`code`, `sans`, `mono`) for various content types

### For Advanced Users

1. **Build full applications**: Leverage all endpoints for complete blog management
2. **Self-host WriteFreely**: Deploy open-source WriteFreely instances
3. **Implement rate limiting**: Respect API limits and handle 429 responses
4. **Use client libraries**: Leverage official libraries (Go, Swift, Java) or community libraries (PHP, Python, JavaScript, .NET)
5. **Handle edge cases**: Implement retry logic, token refresh, and error recovery

### Navigation Tips

- **Authentication flow**: See `api.md` → "Users" section
- **Post management**: See `api.md` → "Posts" section
- **Collection setup**: See `api.md` → "Collections" section
- **Crossposting**: See `api.md` → "Crossposting" section
- **Error handling**: See `api.md` → "Error Handling" section

## API Best Practices

1. **Store tokens securely**: Never commit access tokens or post tokens to version control
2. **Handle anonymous posts**: Always save the `token` field when creating anonymous posts
3. **Respect rate limits**: Implement exponential backoff on 429 responses
4. **Use HTTPS**: All API endpoints require HTTPS
5. **Test with small datasets**: Verify your integration with a few posts before scaling
6. **Check Pro status**: Collection creation requires a Pro account
7. **Validate Markdown**: Test Markdown rendering with `/api/markdown` before posting
8. **Handle 410 gracefully**: Unpublished posts may return with 410 status

## Common Use Cases

### Building a Blog Publishing Tool
Use authenticated user endpoints to create collections, publish posts, and manage content.

### Creating a Markdown Editor Integration
Implement post creation with Markdown preview using `/api/markdown` endpoint.

### Social Media Cross-Poster
Leverage the `crosspost` parameter to automatically share posts to multiple platforms.

### Anonymous Blogging Platform
Build an app using anonymous post creation, storing tokens locally for later management.

### Content Migration Tool
Use `/api/posts/claim` to import anonymous posts into a user account.

## Client Libraries

**Official:**
- Go: https://github.com/writeas/go-writeas
- Swift: https://github.com/writeas/writefreely-swift
- Java: https://github.com/writeas/java-writeas

**Community:**
- PHP, Python, JavaScript, Vala, .NET Core (see Write.as documentation)

## Resources

### Official Documentation
- API Docs: https://developers.write.as/docs/api/
- WriteFreely: https://writefreely.org/ (open-source self-hosting)

### Key Features
- **Backwards compatibility**: Endpoints rarely removed; new features added alongside existing
- **Flexible authentication**: Works anonymously or with user tokens
- **Markdown-first**: All content uses Markdown formatting
- **Self-hosting ready**: WriteFreely powers Write.as and independent instances

## Notes

- All API requests must use HTTPS
- Anonymous posts can be claimed by authenticated users
- Collections (blogs) require a Pro subscription on Write.as
- Post IDs are permanent and unique
- Tokens are sensitive credentials - protect them like passwords
- The API maintains backwards compatibility - old integrations continue working

## Updating

This skill is based on the official Write.as API documentation. For the latest updates, refer to:
- https://developers.write.as/docs/api/

Attribution

rawvegrawveg
View sourceMore from rawveg →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

284072 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2192 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

9881 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →