Blog authors provide the identity displayed with posts. Reads require read_blog; writes require write_blog. Names are required and determine the generated slug. Setting a non-empty avatar_media_id also requires read_files. Name and bio are translatable.
To delete an author assigned to posts, provide reassign_to_author_id for another author in the same store. The posts move to that author as part of the deletion. A large reassignment runs as a job. Posts are not deleted or left without an author. For bulk deletion, the replacement must not be among the authors being deleted.
Endpoints#
Blog Author limits
Fetch blog author limits.
Returns field, pagination, search, and store caps for this store. max_per_store is this store's plan cap, count is how many exist now, and usage is the localized label.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List blog authors
List store blog authors.
Returns a strictly paginated list. Search and sorting are validated before pagination.
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size, up to |
search
|
string |
Search by name or slug. |
sort_by
|
string |
Sort field.
Allowed values
namepost_countupdated_at |
sort_direction
|
string |
Sort direction.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be a positive integer.
-
400VALIDATION_LIST_INVALID_LIMITLimit must be a positive integer within the contract cap.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not supported for Blog Authors.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400BLOG_AUTHOR_SEARCH_TOO_LONGSearch exceeds the Blog Author contract max length.
Search blog authors
Search blog authors for picker UIs.
Returns lightweight store-scoped author options.
Query parameters
| Name | Type | Description |
|---|---|---|
q
|
string |
Search by name or slug. |
limit
|
integer |
Suggestion count. |
offset
|
integer |
Number of suggestions to skip. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_LIMITLimit must be a positive integer.
-
400INVALID_INPUTOffset must be zero or greater.
-
400BLOG_AUTHOR_SEARCH_TOO_LONGSearch exceeds the Blog Author contract max length.
Get a blog author
Fetch one blog author.
Returns the author when it belongs to the token's store.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Author id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYBlog Author id is not a valid UUID.
-
404BLOG_AUTHOR_NOT_FOUNDBlog Author does not exist in this store.
Create a blog author
Create a store-scoped blog author.
The slug is generated from the name. A non-empty avatar_media_id must reference an uploaded image in this store and also requires read_files.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Author display name. |
bio
|
string |
Author biography. |
avatar_media_id
|
uuid |
Uploaded image UUID. A non-empty value requires read_files; null clears it on update. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed, contains unknown fields, or has an invalid Blog Author id.
-
400BLOG_AUTHOR_NAME_REQUIREDName is required.
-
400BLOG_AUTHOR_NAME_TOO_LONGName exceeds the contract limit.
-
400BLOG_AUTHOR_BIO_TOO_LONGBio exceeds the contract limit.
-
400BLOG_AUTHOR_SLUG_GENERATION_FAILEDA unique slug could not be generated from the author name.
-
404NOT_FOUNDThe supplied avatar image does not exist in this store.
-
400INVALID_INPUTavatar_media_id is malformed, is not an image, or belongs to another store.
-
403STORE_API_SCOPE_REQUIREDA non-empty avatar_media_id requires read_files in addition to write_blog.
-
400BLOG_AUTHOR_LIMIT_REACHEDThe store author limit has been reached.
-
400BLOG_AUTHOR_PLAN_LIMIT_REACHEDThis store is at its plan blog author cap.
Update a blog author
Update one blog author.
Omitted fields are unchanged. Renaming regenerates the generated slug.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Author id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
|
string |
Author display name. |
bio
|
string |
Author biography. |
avatar_media_id
|
uuid |
Uploaded image UUID. A non-empty value requires read_files; null clears it on update. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed, contains unknown fields, or has an invalid Blog Author id.
-
400BLOG_AUTHOR_NAME_REQUIREDName is required.
-
400BLOG_AUTHOR_NAME_TOO_LONGName exceeds the contract limit.
-
400BLOG_AUTHOR_BIO_TOO_LONGBio exceeds the contract limit.
-
400BLOG_AUTHOR_SLUG_GENERATION_FAILEDA unique slug could not be generated from the author name.
-
404NOT_FOUNDThe supplied avatar image does not exist in this store.
-
400INVALID_INPUTavatar_media_id is malformed, is not an image, or belongs to another store.
-
403STORE_API_SCOPE_REQUIREDA non-empty avatar_media_id requires read_files in addition to write_blog.
-
404BLOG_AUTHOR_NOT_FOUNDBlog Author does not exist in this store.
Delete a blog author
Delete one blog author.
If posts reference the author, the request must name reassign_to_author_id; otherwise it returns BLOG_AUTHOR_REASSIGN_REQUIRED. The named author takes over every assigned post in the same transaction as the delete. No post is deleted or left without an author.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Author id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
reassign_to_author_id
|
string |
Author UUID that takes over this author's posts. Required when the author has posts. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYBlog Author id or delete request body is invalid.
-
404BLOG_AUTHOR_NOT_FOUNDBlog Author does not exist in this store.
-
409BLOG_AUTHOR_REASSIGN_REQUIREDThe author has assigned posts. Retry with
reassign_to_author_idnaming the author who takes them over. -
400BLOG_AUTHOR_REASSIGN_TARGET_INVALIDreassign_to_author_idis missing from the store or is the author being deleted. -
409BLOG_AUTHOR_BULK_RACEDAuthor assignments changed during deletion; retry from fresh state.
Bulk delete blog authors
Delete multiple blog authors.
Missing authors are reported in failed. If any selected author is assigned to posts, the request must name reassign_to_author_id (an author outside the selection); otherwise it returns BLOG_AUTHOR_BULK_REASSIGN_REQUIRED. The named author takes over every assigned post and the selected authors are deleted atomically.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
author_ids
required
|
array<string> |
Store-scoped author UUIDs. |
reassign_to_author_id
|
string |
Author UUID, outside the selection, that takes over the selected authors' posts. Required when any has posts. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed, contains unknown fields, or includes an invalid UUID.
-
400BLOG_AUTHOR_BULK_NO_IDSNo author IDs were supplied.
-
400BLOG_AUTHOR_BULK_DELETE_TOO_MANYThe batch exceeds the documented cap.
-
409BLOG_AUTHOR_BULK_REASSIGN_REQUIREDOne or more selected authors have assigned posts. Retry with
reassign_to_author_idnaming the author who takes them over. -
400BLOG_AUTHOR_REASSIGN_TARGET_INVALIDreassign_to_author_idis missing from the store or is one of the selected authors. -
409BLOG_AUTHOR_BULK_RACEDAuthor assignments changed during deletion; retry from fresh state.
Fields#
Field |
Type |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
string |
Yes |
Yes |
create |
Yes |
|
string |
No |
No |
No |
|
|
string |
Yes |
Yes |
Yes |
|
|
string (UUID) |
Yes |
Yes |
No |
|
|
integer |
No |
No |
No |
|
|
string (RFC 3339) |
No |
No |
No |
|
|
string (RFC 3339) |
No |
No |
No |
Webhook events#
Subscribe to these events to keep your integration in sync with blog authors. Each event shows the required Store API scope and store permission, the available payload fields, and an example payload. Subscription setup is validated against those permissions; delivery is always restricted to the subscription's store.
Blog author created
Fired when a blog author is created.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_author.id |
string |
Always present |
blog_author.name |
string |
Selectable in the Payload builder |
blog_author.slug |
string |
Selectable in the Payload builder |
blog_author.bio |
string |
Selectable in the Payload builder |
blog_author.avatar_url |
string |
Selectable in the Payload builder |
blog_author.created_at |
string |
Selectable in the Payload builder |
Blog author updated
Fired when a blog author is updated.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_author.id |
string |
Always present |
blog_author.name |
string |
Selectable in the Payload builder |
blog_author.slug |
string |
Selectable in the Payload builder |
blog_author.bio |
string |
Selectable in the Payload builder |
blog_author.avatar_url |
string |
Selectable in the Payload builder |
blog_author.created_at |
string |
Selectable in the Payload builder |
Blog author deleted
Fired when a blog author is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_author.id |
string |
Always present |
blog_author.name |
string |
Selectable in the Payload builder |
blog_author.slug |
string |
Selectable in the Payload builder |