---
title: "Create a blog author"
method: POST
path: "/blog/authors"
tags: ["Blog authors"]
---

# Create a blog author

`POST /blog/authors`

## Request

- Base URL: `https://api.cavuno.com/v1`
- URL: `https://api.cavuno.com/v1/blog/authors`
- Auth: HTTP bearer

Creates a new blog author. The request is idempotent when an `Idempotency-Key` header is supplied.

## Request body

- CreateAuthorBody
  - `slug` string: URL-friendly slug for the author. Auto-generated from `name` when omitted.
  - `bio` string: Short biography for the author. Sanitized HTML.
  - `email` string, email: The author's email address.
  - `location` string: Free-text location label for the author (e.g. `Sydney, Australia`).
  - `status` 'active' | 'inactive': Author visibility status. One of `active` or `inactive`.
  - `avatarMediaId` string, nullable: Cavuno media ID of an uploaded avatar image. Pass `null` to clear it.
  - `websiteUrl` string: The author's personal website URL. Normalized to a canonical URL when stored.
  - `facebookUrl` string: The author's Facebook profile URL.
  - `twitterUrl` string: The author's X (Twitter) profile URL. Stored as the canonical `https://x.com/<handle>` URL.
  - `linkedinUrl` string: The author's LinkedIn profile URL.
  - `githubUrl` string: The author's GitHub profile URL.
  - `metaTitle` string: SEO meta title for the author page.
  - `metaDescription` string: SEO meta description for the author page.
  - `name` string, required: The author's display name.

## Response `201`

Successful response.

- BlogAuthor
  - `id` string, required: Unique identifier for the object. Use this value as the `{id}` path parameter for the author endpoints (e.g. `GET /v1/blog/authors/{id}`).
  - `object` 'blog_author', required: String representing the object's type. Objects of the same type share the same value.
  - `name` string, required: Display name of the author.
  - `slug` string, required: URL-friendly slug for the author.
  - `bio` string, nullable, required: Short biography, or `null` if not set.
  - `email` string, nullable, required: The author's email address, or `null` if not set.
  - `location` string, nullable, required: The author's free-text location label, or `null` if not set.
  - `status` string, nullable, required: Author visibility status, or `null` if not set.
  - `avatarUrl` string, nullable, required: URL of the author avatar, or `null` if no avatar is set.
  - `websiteUrl` string, nullable, required: The author's website URL, or `null` if not set.
  - `facebookUrl` string, nullable, required: The author's Facebook URL, or `null` if not set.
  - `twitterUrl` string, nullable, required: The author's X (Twitter) URL, or `null` if not set.
  - `linkedinUrl` string, nullable, required: The author's LinkedIn URL, or `null` if not set.
  - `githubUrl` string, nullable, required: The author's GitHub URL, or `null` if not set.
  - `metaTitle` string, nullable, required: SEO meta title, or `null` if not set.
  - `metaDescription` string, nullable, required: SEO meta description, or `null` if not set.
  - `createdAt` string, required: Time at which the author was created. ISO 8601 datetime.
  - `updatedAt` string, nullable, required: Time at which the author was last updated, or `null` if it has never been updated. ISO 8601 datetime.

## Other responses

- `400`: The request was malformed.
- `409`: Another author already uses the same slug.

## Changes

- **2026-10-19** `c34152c38176`: 2 info
  - added the optional property `error/upgrade` to the response with the `400` status
  - added the optional property `error/upgrade` to the response with the `409` status

[Operation history](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/changes/blog/authors/post.md)

---

[API](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api.md) · [All operations](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/revisions/d5974dabff14?raw)
