YotoShelf exposes a REST API documented via huma.
The spec is generated at build time from the application source. When the server is running,
a live Swagger UI is available at /api/docs and the raw spec at /openapi.yaml.
Authentication
The spec has no securitySchemes — auth is enforced in Go middleware, not
OpenAPI declarations. Each operation shows a derived badge:
- public — no session required (login endpoints, OAuth callbacks, health checks)
- session — active session cookie required (
POST /auth/login or OIDC flow) - admin — session required with
admin role, or token auth (metrics)
Unauthenticated requests to protected endpoints return 401 Unauthorized.
Error responses across all endpoints use application/problem+json (RFC 9457).
Regenerating the spec
The spec at src/data/openapi.yaml was generated from app commit
d03c43091. To regenerate after updating the application:
cd path/to/yotoshelf
go run ./cmd/gen-openapi > ../yotoshelf.dev/src/data/openapi.yaml
The generator spins up an in-memory HTTP test server and fetches /openapi.yaml
from huma. No database or external dependencies required.
Download the raw spec: openapi.yaml.
Groups
User management, audit log, job control, and system operations. Requires admin role.
1 session 24 admin 2 public
Login, logout, OIDC flows, password reset, and email verification.
6 session 8 public
Create, edit, publish, and delete MYO audio cards.
34 session
Organise cards into shared collections with role-based access.
25 session
Linked Yoto player devices.
8 session
AI-generated card icon management and regeneration.
11 session
Import cards from a linked Yoto account.
2 session
Background job queue status.
1 session
Printable card label generation and sharing.
6 session
Publish cards to linked Yoto accounts.
4 session
Audio recording and track management.
4 session
LLM provider and application settings. Requires admin role.
6 session 5 admin
Text-to-speech audio generation.
2 session
Yoto account linking and OAuth callbacks.
3 session 1 public
Admin
User management, audit log, job control, and system operations. Requires admin role.
View audit log
Parameters
| Name | In | Type | Req | Description |
user_id | query | string | | |
action | query | string | | |
limit | query | integer (int64) | | |
offset | query | integer (int64) | | |
Responses
| Field | Type | Description |
action | string | |
actor_id | string | |
created_at | string (date-time) | |
detail | string | |
id | string | |
ip | string | |
user_id | string | |
List pending deletion requests
Responses
| Field | Type | Description |
created_at | string (date-time) | |
expires_at | string (date-time) | |
id | string | |
owned_collections | array | null | |
reason | string | |
status | string | |
user_id | string | |
Approve a deletion request
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— ApproveDeletionInputBody
| Field | Type | Req | Description |
reassignments | object | | |
Reject a deletion request
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Admin comprehensive health report
Responses
| Field | Type | Description |
cards | integer (int64) | |
checked_at | string (date-time) | |
collections | object | |
jobs | object | |
status | string | |
users | object | |
List all jobs with optional status/type filters
Parameters
| Name | In | Type | Req | Description |
status | query | string | | |
type | query | string | | |
limit | query | integer (int64) | | |
offset | query | integer (int64) | | |
Responses
| Field | Type | Description |
attempts | integer (int64) | |
completed_at | string | null (date-time) | |
created_at | string (date-time) | |
error | string | null | |
id | string | |
status | string | |
type | string | |
user_id | string | |
Delete a job by ID
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
List orphaned collections
Responses
| Field | Type | Description |
created_at | string (date-time) | |
description | string | |
id | string | |
name | string | |
slug | string | |
Assign an orphaned collection to a user
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— AssignOrphanedInputBody
| Field | Type | Req | Description |
user_id | string | ✓ | |
Rotate the encryption key for stored tokens
Request body
— RotateKeyInputBody
| Field | Type | Req | Description |
old_key | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Seed example cards for first-run experience
Responses
| Field | Type | Description |
cards_created | integer (int64) | |
tracks_created | integer (int64) | |
Check whether example content has been seeded
Responses
| Field | Type | Description |
seeded | boolean | |
List all users
Responses
| Field | Type | Description |
auth_type | string | |
created_at | string (date-time) | |
display_name | string | |
email | string | |
email_verified_at | string (date-time) | |
id | string | |
locked_account_count | integer (int64) | |
role | string | |
status | string | |
Create a new user
Request body
— AdminCreateUserInputBody
| Field | Type | Req | Description |
display_name | string | | |
email | string (email) | ✓ | |
password | string | ✓ | |
role | string | ✓ | |
Responses
| Field | Type | Description |
created_at | string (date-time) | |
display_name | string | |
email | string | |
id | string | |
role | string | |
status | string | |
Directly delete a user
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— AdminDeleteUserInputBody
| Field | Type | Req | Description |
reassignments | object | | |
Update user role or display name
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— AdminUpdateUserInputBody
| Field | Type | Req | Description |
display_name | string | ✓ | |
role | string | ✓ | |
Responses
| Field | Type | Description |
created_at | string (date-time) | |
display_name | string | |
email | string | |
id | string | |
role | string | |
status | string | |
Deactivate a user account
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Reactivate a deactivated user
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Resend email verification to a user
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Admin-initiated password reset
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
reset_link | string | |
Revoke all sessions for a user
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Unlock a locked user account
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Manually verify a user's email
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Public health check
Responses
| Field | Type | Description |
status | string | |
Trigger a full library rescan
Responses
| Field | Type | Description |
message | string | |
Basic system metrics
Responses
| Field | Type | Description |
cards | integer (int64) | |
collections | object | |
jobs | object | |
users | object | |
Readiness check — pings database
Responses
| Field | Type | Description |
db | string | |
Auth
Login, logout, OIDC flows, password reset, and email verification.
Request account deletion
Request body
— DeletionRequestInputBody
| Field | Type | Req | Description |
reason | string | | |
Responses
| Field | Type | Description |
message | string | |
Request a password reset email
Request body
— ForgotPasswordInputBody
| Field | Type | Req | Description |
email | string (email) | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Login with email and password
Request body
— LoginInputBody
| Field | Type | Req | Description |
email | string (email) | ✓ | User email |
password | string | ✓ | User password |
Responses
| Field | Type | Description |
auth_type | string | |
created_at | string (date-time) | |
display_name | string | |
email | string | |
email_verified_at | string (date-time) | |
id | string | |
locked_account_count | integer (int64) | |
role | string | |
status | string | |
Get current authenticated user
Responses
| Field | Type | Description |
auth_type | string | |
created_at | string (date-time) | |
display_name | string | |
email | string | |
email_verified_at | string (date-time) | |
id | string | |
locked_account_count | integer (int64) | |
role | string | |
status | string | |
OIDC backchannel logout (provider-initiated)
Unlink OIDC SSO from account
Change password (requires current password)
Request body
— ChangePasswordInputBody
| Field | Type | Req | Description |
current_password | string | ✓ | |
new_password | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Update display name
Request body
— UpdateProfileInputBody
| Field | Type | Req | Description |
display_name | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Reset password using a token
Request body
— ResetPasswordInputBody
| Field | Type | Req | Description |
new_password | string | ✓ | |
token | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Revoke all sessions (log out everywhere)
Verify email address using a token
Request body
— VerifyEmailInputBody
| Field | Type | Req | Description |
token | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Cards
Create, edit, publish, and delete MYO audio cards.
List all cards across all collections
Responses
| Field | Type | Description |
author | string | |
back_cover_hash | string | null | |
back_cover_prompt | string | |
collection_id | string | |
collection_name | string | |
collection_slug | string | |
content_hash | string | null | |
cover_hash | string | null | |
cover_prompt | string | |
created_at | string (date-time) | |
description | string | |
slug | string | |
source_types | array | null | |
title | string | |
total_duration_s | integer (int64) | |
track_count | integer (int64) | |
updated_at | string (date-time) | |
viewer_role | string | null | |
Delete a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Get a card by slug with its tracks
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
author | string | |
back_cover_hash | string | null | |
back_cover_prompt | string | |
collection_id | string | |
collection_name | string | |
collection_slug | string | |
content_hash | string | null | |
cover_hash | string | null | |
cover_prompt | string | |
created_at | string (date-time) | |
description | string | |
slug | string | |
source_types | array | null | |
title | string | |
total_duration_s | integer (int64) | |
track_count | integer (int64) | |
tracks | array | null | |
updated_at | string (date-time) | |
viewer_role | string | null | |
Update a card's title and description
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— UpdateCardInputBody
| Field | Type | Req | Description |
author | string | | |
description | string | ✓ | |
title | string | ✓ | |
Serve card cover image
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
side | query | string | | Cover side |
Upload card cover image (multipart)
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
side | query | string | | Cover side |
Request body
No structured fields (see spec for raw schema).
Promote a generated cover preview to the final cover
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— AcceptCoverPreviewRequest
| Field | Type | Req | Description |
side | string | | Cover side |
Responses
| Field | Type | Description |
preview_hash | string | |
Generate a preview cover image (does not commit)
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— GenerateCoverRequest
| Field | Type | Req | Description |
prompt | string | ✓ | Description of the desired cover image |
side | string | | Cover side |
Responses
| Field | Type | Description |
preview_hash | string | |
Serve the pending cover preview
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
side | query | string | | Cover side |
Move a card to a different home collection
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— MoveCardHomeInputBody
| Field | Type | Req | Description |
collection_id | string | ✓ | |
Merge multiple tracks into one
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— MergeTracksInputBody
| Field | Type | Req | Description |
title | string | | |
track_slugs | array | null | ✓ | |
Responses
| Field | Type | Description |
job_id | string | |
Get playback configuration for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
autoadvance | string | |
overlay_timeout | integer (int64) | |
resume_timeout | integer (int64) | |
shuffle | string | |
Update playback configuration for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— UpdatePlaybackConfigInputBody
| Field | Type | Req | Description |
autoadvance | string | ✓ | |
overlay_timeout | integer (int64) | ✓ | |
resume_timeout | integer (int64) | ✓ | |
shuffle | string | ✓ | |
Rename a card's slug
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— RenameSlugInputBody
| Field | Type | Req | Description |
slug | string | ✓ | |
List source material tracks for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
audio_path | string | null | |
description | string | |
duration | integer | null (int64) | |
file_size_bytes | integer (int64) | |
id | string | |
parent_track_id | string | null | |
slug | string | |
title | string | |
Purge a source material track (deletes file and DB record)
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Upload an audio track (multipart)
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
No structured fields (see spec for raw schema).
Responses
| Field | Type | Description |
description | string | |
duration | integer | null (int64) | |
file_size_bytes | integer (int64) | |
icon_path | string | null | |
icon_prompt | string | |
icon_source_path | string | null | |
id | string | |
original_format | string | |
original_size_bytes | integer (int64) | |
position | integer (int64) | |
slug | string | |
source_type | string | |
stream_status | string | null | |
title | string | |
transcode_status | string | |
transcoded_format | string | |
transcoded_size_bytes | integer (int64) | |
Delete a track from a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Get a track by slug
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Responses
| Field | Type | Description |
description | string | |
duration | integer | null (int64) | |
file_size_bytes | integer (int64) | |
icon_path | string | null | |
icon_prompt | string | |
icon_source_path | string | null | |
id | string | |
is_source | boolean | |
original_format | string | |
original_size_bytes | integer (int64) | |
parent_track_id | string | null | |
position | integer (int64) | |
processing_job_id | string | null | |
slug | string | |
source_type | string | |
stream_status | string | null | |
title | string | |
transcode_status | string | |
transcoded_format | string | |
transcoded_size_bytes | integer (int64) | |
tts_instructions | string | null | |
tts_provider | string | null | |
tts_text | string | null | |
tts_voice | string | null | |
Serve track audio file with Range support
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Update a track's description
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— UpdateTrackDescriptionInputBody
| Field | Type | Req | Description |
description | string | ✓ | |
Apply fade in/out to a track
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— FadeTrackInputBody
| Field | Type | Req | Description |
fade_in_ms | integer (int64) | ✓ | |
fade_out_ms | integer (int64) | ✓ | |
Responses
| Field | Type | Description |
job_id | string | |
Update a track's icon prompt
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— UpdateTrackIconPromptInputBody
| Field | Type | Req | Description |
icon_prompt | string | ✓ | |
Rename a track's slug
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— RenameTrackSlugInputBody
| Field | Type | Req | Description |
slug | string | ✓ | |
Split a track at marker points
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— SplitTrackInputBody
| Field | Type | Req | Description |
split_points | array | null | ✓ | |
titles | array | null | | |
Responses
| Field | Type | Description |
job_id | string | |
Update a track's title and auto-update slug
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— UpdateTrackTitleInputBody
| Field | Type | Req | Description |
title | string | ✓ | |
Responses
| Field | Type | Description |
slug | string | |
Trim a track to a selection
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
track_slug | path | string | ✓ | |
Request body
— TrimTrackInputBody
| Field | Type | Req | Description |
end | number (double) | ✓ | |
start | number (double) | ✓ | |
title | string | | |
Responses
| Field | Type | Description |
job_id | string | |
Reorder tracks on a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— ReorderTracksInputBody
| Field | Type | Req | Description |
positions | array | null | ✓ | |
Check if a track slug is available within a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
slug | query | string | ✓ | |
track_id | query | string | | |
Responses
| Field | Type | Description |
available | boolean | |
Add a streaming track to a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— AddStreamTrackInputBody
| Field | Type | Req | Description |
stream_url | string | ✓ | |
title | string | ✓ | |
Responses
| Field | Type | Description |
description | string | |
duration | integer | null (int64) | |
file_size_bytes | integer (int64) | |
icon_path | string | null | |
icon_prompt | string | |
icon_source_path | string | null | |
id | string | |
original_format | string | |
original_size_bytes | integer (int64) | |
position | integer (int64) | |
slug | string | |
source_type | string | |
stream_status | string | null | |
title | string | |
transcode_status | string | |
transcoded_format | string | |
transcoded_size_bytes | integer (int64) | |
Generate a TTS audio track from text
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— TTSGenerateInputBody
| Field | Type | Req | Description |
instructions | string | | |
position | integer (int64) | | |
text | string | ✓ | |
title | string | | |
voice | string | ✓ | |
Responses
| Field | Type | Description |
description | string | |
duration | integer | null (int64) | |
file_size_bytes | integer (int64) | |
icon_path | string | null | |
icon_prompt | string | |
icon_source_path | string | null | |
id | string | |
original_format | string | |
original_size_bytes | integer (int64) | |
position | integer (int64) | |
slug | string | |
source_type | string | |
stream_status | string | null | |
title | string | |
transcode_status | string | |
transcoded_format | string | |
transcoded_size_bytes | integer (int64) | |
Check if a card slug is available
Parameters
| Name | In | Type | Req | Description |
slug | query | string | ✓ | |
Responses
| Field | Type | Description |
available | boolean | |
List cards in a collection
Parameters
| Name | In | Type | Req | Description |
collectionID | path | string | ✓ | |
Responses
| Field | Type | Description |
author | string | |
back_cover_hash | string | null | |
back_cover_prompt | string | |
collection_id | string | |
collection_name | string | |
collection_slug | string | |
content_hash | string | null | |
cover_hash | string | null | |
cover_prompt | string | |
created_at | string (date-time) | |
description | string | |
slug | string | |
source_types | array | null | |
title | string | |
total_duration_s | integer (int64) | |
track_count | integer (int64) | |
updated_at | string (date-time) | |
viewer_role | string | null | |
Create a new card in a collection
Parameters
| Name | In | Type | Req | Description |
collectionID | path | string | ✓ | |
Request body
— CreateCardInputBody
| Field | Type | Req | Description |
author | string | | |
description | string | ✓ | |
slug | string | | |
title | string | ✓ | |
Responses
| Field | Type | Description |
author | string | |
back_cover_hash | string | null | |
back_cover_prompt | string | |
collection_id | string | |
collection_name | string | |
collection_slug | string | |
content_hash | string | null | |
cover_hash | string | null | |
cover_prompt | string | |
created_at | string (date-time) | |
description | string | |
slug | string | |
source_types | array | null | |
title | string | |
total_duration_s | integer (int64) | |
track_count | integer (int64) | |
updated_at | string (date-time) | |
viewer_role | string | null | |
Collections
Organise cards into shared collections with role-based access.
List collections for the authenticated user
Responses
| Field | Type | Description |
background_image_hash | string | null | |
card_count | integer (int64) | |
created_at | string (date-time) | |
description | string | |
id | string | |
is_default | boolean | |
name | string | |
slug | string | |
viewer_role | string | null | |
Create a new collection
Request body
— CreateCollectionInputBody
| Field | Type | Req | Description |
description | string | ✓ | |
name | string | ✓ | |
slug | string | | |
Responses
| Field | Type | Description |
background_image_hash | string | null | |
card_count | integer (int64) | |
created_at | string (date-time) | |
description | string | |
id | string | |
is_default | boolean | |
name | string | |
slug | string | |
viewer_role | string | null | |
Delete a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
cascade | query | boolean | | |
Get a collection by ID
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
background_image_hash | string | null | |
card_count | integer (int64) | |
cards | array | null | |
created_at | string (date-time) | |
description | string | |
id | string | |
is_default | boolean | |
name | string | |
slug | string | |
viewer_role | string | null | |
Update a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— UpdateCollectionInputBody
| Field | Type | Req | Description |
description | string | ✓ | |
name | string | ✓ | |
Serve collection background image
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Upload collection background image (multipart)
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
No structured fields (see spec for raw schema).
Unlink a card from a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
cardId | path | string | ✓ | |
Link a card to a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— LinkCardInputBody
| Field | Type | Req | Description |
card_id | string | ✓ | |
List members of a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
added_at | string (date-time) | |
display_name | string | |
email | string | |
role | string | |
user_id | string | |
Add a member to a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— AddMemberInputBody
| Field | Type | Req | Description |
role | string | ✓ | |
user_id | string | ✓ | |
Remove a member from a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
userId | path | string | ✓ | |
Update a member's role in a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
userId | path | string | ✓ | |
Request body
— UpdateMemberInputBody
| Field | Type | Req | Description |
role | string | ✓ | |
List generation presets for a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
collection_id | string | |
created_at | string (date-time) | |
duration_min | integer (int64) | |
emoji | string | |
id | string | |
name | string | |
prompt_template | string | |
sort_order | integer (int64) | |
vocab_level | string | |
voice_id | string | |
Create a generation preset
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— CreatePresetInputBody
| Field | Type | Req | Description |
duration_min | integer (int64) | ✓ | |
emoji | string | ✓ | |
name | string | ✓ | |
prompt_template | string | ✓ | |
sort_order | integer (int64) | ✓ | |
vocab_level | string | ✓ | |
voice_id | string | ✓ | |
Responses
| Field | Type | Description |
collection_id | string | |
created_at | string (date-time) | |
duration_min | integer (int64) | |
emoji | string | |
id | string | |
name | string | |
prompt_template | string | |
sort_order | integer (int64) | |
vocab_level | string | |
voice_id | string | |
Delete a generation preset
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
preset_id | path | string | ✓ | |
Update a generation preset
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
preset_id | path | string | ✓ | |
Request body
— UpdatePresetInputBody
| Field | Type | Req | Description |
duration_min | integer (int64) | ✓ | |
emoji | string | ✓ | |
name | string | ✓ | |
prompt_template | string | ✓ | |
sort_order | integer (int64) | ✓ | |
vocab_level | string | ✓ | |
voice_id | string | ✓ | |
Get generation profile for a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
avoid_themes | string | |
child_age | integer | null (int64) | |
child_name | string | |
duration_min | integer (int64) | |
friends | string | |
interests | string | |
notes | string | |
pets | string | |
prompt_template | string | |
vocab_level | string | |
voice_id | string | |
Update generation profile for a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— UpdateCollectionProfileInputBody
| Field | Type | Req | Description |
avoid_themes | string | ✓ | |
child_age | integer | null (int64) | ✓ | |
child_name | string | ✓ | |
duration_min | integer (int64) | ✓ | |
friends | string | ✓ | |
interests | string | ✓ | |
notes | string | ✓ | |
pets | string | ✓ | |
prompt_template | string | ✓ | |
vocab_level | string | ✓ | |
voice_id | string | ✓ | |
Set a collection as the default for Quick Record
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Rename a collection's slug
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— RenameCollectionSlugInputBody
| Field | Type | Req | Description |
slug | string | ✓ | |
Get stats for a collection
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
card_count | integer (int64) | |
disk_bytes | integer (int64) | |
published_count | integer (int64) | |
total_duration_s | integer (int64) | |
track_count | integer (int64) | |
Get a collection by slug with its cards
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
background_image_hash | string | null | |
card_count | integer (int64) | |
cards | array | null | |
created_at | string (date-time) | |
description | string | |
id | string | |
is_default | boolean | |
name | string | |
slug | string | |
viewer_role | string | null | |
Get or create the default collection for Quick Record
Responses
| Field | Type | Description |
background_image_hash | string | null | |
card_count | integer (int64) | |
created_at | string (date-time) | |
description | string | |
id | string | |
is_default | boolean | |
name | string | |
slug | string | |
viewer_role | string | null | |
Check if a collection slug is available
Parameters
| Name | In | Type | Req | Description |
slug | query | string | ✓ | |
Responses
| Field | Type | Description |
available | boolean | |
Devices
Linked Yoto player devices.
List all devices across all linked Yoto accounts
Responses
| Field | Type | Description |
devices | array | null | |
Get device cache status from Yoto
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Responses
| Field | Type | Description |
account_id | string | |
device_id | string | |
Send a command to a device
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Request body
— SendCommandInputBody
| Field | Type | Req | Description |
card_id | string | | |
command | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Get full device info including status and settings
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Responses
| Field | Type | Description |
cached | boolean | |
device_family | string | |
device_id | string | |
device_type | string | |
form_factor | string | |
fw_version | string | |
generation | string | |
last_updated | string (date-time) | |
name | string | |
online | boolean | |
settings | object | |
status | object | |
List cards published to this device's account
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Responses
| Field | Type | Description |
cards | array | null | |
Update device settings
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Request body
— UpdateSettingsInputBody
| Field | Type | Req | Description |
clock_face | string | | |
day_brightness | string | | |
day_max_volume | string | | |
day_time | string | | |
night_brightness | string | | |
night_max_volume | string | | |
night_time | string | | |
shutdown_timeout_min | string | | |
timezone | string | | |
Responses
| Field | Type | Description |
message | string | |
Update device shortcut button assignments
Parameters
| Name | In | Type | Req | Description |
accountID | path | string | ✓ | |
deviceID | path | string | ✓ | |
Request body
— UpdateShortcutsInputBody
| Field | Type | Req | Description |
shortcuts | array | null | ✓ | |
Responses
| Field | Type | Description |
message | string | |
Seed content to Yoto devices
Request body
— SeedContentInputBody
| Field | Type | Req | Description |
account_id | string | ✓ | |
card_ids | array | null | ✓ | |
collection_id | string | ✓ | |
device_ids | array | null | ✓ | |
schedule_at | string | null | ✓ | |
Responses
| Field | Type | Description |
job_ids | array | null | |
Icons
AI-generated card icon management and regeneration.
Serve 16×16 track icon PNG
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Serve full-resolution track illustration
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Serve an icon preview PNG
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
index | path | integer (int64) | ✓ | |
Regenerate a single icon for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Responses
| Field | Type | Description |
generated | integer (int64) | |
message | string | |
Select an icon preview as the final icon
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Request body
— SelectPreviewInputBody
| Field | Type | Req | Description |
index | integer (int64) | ✓ | |
Generate N icon variations for preview
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Request body
— GenerateVariationsInputBody
| Field | Type | Req | Description |
count | integer (int64) | ✓ | |
prompt | string | | |
Responses
| Field | Type | Description |
count | integer (int64) | |
estimated_usd | number (double) | |
Batch generate icons for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
generated | integer (int64) | |
message | string | |
Generate icon samples for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
generated | integer (int64) | |
message | string | |
Suggest an icon theme for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
palettes | array | null | |
Approve an icon theme for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— ApproveThemeInputBody
| Field | Type | Req | Description |
colors | array | null | ✓ | |
palette_name | string | ✓ | |
style | string | ✓ | |
Upload a custom icon for a track position
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
position | path | integer (int64) | ✓ | |
Request body
No structured fields (see spec for raw schema).
Import
Import cards from a linked Yoto account.
Import a MYO card from a linked Yoto account (async)
Request body
— ImportFromYotoInputBody
| Field | Type | Req | Description |
account_id | string | ✓ | |
yoto_card_id | string | ✓ | |
Responses
| Field | Type | Description |
card_slug | string | |
job_id | string | |
List MYO cards from a linked Yoto account
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
already_imported | boolean | |
chapter_count | integer (int64) | |
cover_url | string | null | |
locally_edited | boolean | |
title | string | |
yoto_card_id | string | |
Jobs
Background job queue status.
Get a single job by ID
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
attempts | integer (int64) | |
completed_at | string | null (date-time) | |
created_at | string (date-time) | |
error | string | null | |
id | string | |
payload | string | |
status | string | |
type | string | |
Labels
Printable card label generation and sharing.
Download a generated label file
Parameters
| Name | In | Type | Req | Description |
filename | path | string | ✓ | |
Create a share link for a label
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
access_count | integer (int64) | |
card_slugs | string | |
created_at | string (date-time) | |
expires_at | string | null (date-time) | |
id | string | |
label_id | string | |
slug | string | |
url | string | |
Generate print-ready label PDF/SVG
Request body
— GenerateLabelsRequest
| Field | Type | Req | Description |
card_slugs | array | null | ✓ | |
format | string | ✓ | |
page_size | string | ✓ | |
Responses
| Field | Type | Description |
filename | string | |
url | string | |
Revoke all label share links for the authenticated user
List label share links for the authenticated user
Responses
| Field | Type | Description |
access_count | integer (int64) | |
card_slugs | string | |
created_at | string (date-time) | |
expires_at | string | null (date-time) | |
id | string | |
label_id | string | |
slug | string | |
url | string | |
Revoke a label share link
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Publish
Publish cards to linked Yoto accounts.
Get publish status for a card
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Responses
| Field | Type | Description |
account_label | string | |
card_id | string | |
content_hash_at_publish | string | null | |
id | string | |
last_published_at | string | null (date-time) | |
status | string | |
yoto_account_id | string | |
yoto_card_id | string | null | |
List background jobs
Responses
| Field | Type | Description |
attempts | integer (int64) | |
completed_at | string | null (date-time) | |
created_at | string (date-time) | |
error | string | null | |
id | string | |
payload | string | |
status | string | |
type | string | |
Publish cards to Yoto accounts
Request body
— PublishCardsInputBody
| Field | Type | Req | Description |
account_ids | array | null | ✓ | |
card_slugs | array | null | ✓ | |
collection_id | string | ✓ | |
Verify published cards against Yoto accounts
Request body
— VerifyPublishInputBody
| Field | Type | Req | Description |
account_ids | array | null | ✓ | |
card_slugs | array | null | ✓ | |
Responses
| Field | Type | Description |
results | array | null | |
Recording
Audio recording and track management.
Start a recording session with ffmpeg stdin pipe
Parameters
| Name | In | Type | Req | Description |
slug | path | string | ✓ | |
Request body
— RecordStartInputBody
| Field | Type | Req | Description |
title | string | | |
Responses
| Field | Type | Description |
chunk_interval_s | integer (int64) | |
session_id | string | |
Abandon a recording session
Parameters
| Name | In | Type | Req | Description |
session_id | path | string | ✓ | |
Write a chunk to the recording ffmpeg stdin pipe
Parameters
| Name | In | Type | Req | Description |
session_id | path | string | ✓ | |
Request body
No structured fields (see spec for raw schema).
Finish recording: close pipe, transcode FLAC to M4A, create track
Parameters
| Name | In | Type | Req | Description |
session_id | path | string | ✓ | |
Request body
— RecordFinishBody
| Field | Type | Req | Description |
title | string | | |
Responses
| Field | Type | Description |
track_id | string | |
track_slug | string | |
Settings
LLM provider and application settings. Requires admin role.
List system LLM providers
Responses
| Field | Type | Description |
budget_left | number (double) | |
budget_usd | number (double) | |
enabled | boolean | |
has_key | boolean | |
id | string | |
model | string | |
monthly_budget_cents | integer | null (int64) | |
monthly_spend_cents | integer (int64) | |
monthly_spend_reset_at | string | |
owner_type | string | |
priority | integer (int64) | |
provider | string | |
spent_usd | number (double) | |
Create a system LLM provider
Request body
— CreateProviderInputBody
| Field | Type | Req | Description |
api_key | string | ✓ | |
budget_usd | number (double) | ✓ | |
enabled | boolean | ✓ | |
model | string | ✓ | |
monthly_budget_cents | integer (int64) | | |
priority | integer (int64) | ✓ | |
provider | string | ✓ | |
Responses
| Field | Type | Description |
budget_left | number (double) | |
budget_usd | number (double) | |
enabled | boolean | |
has_key | boolean | |
id | string | |
model | string | |
monthly_budget_cents | integer | null (int64) | |
monthly_spend_cents | integer (int64) | |
monthly_spend_reset_at | string | |
owner_type | string | |
priority | integer (int64) | |
provider | string | |
spent_usd | number (double) | |
Delete a system LLM provider
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Update a system LLM provider
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— UpdateProviderInputBody
| Field | Type | Req | Description |
api_key | string | | |
budget_usd | number (double) | ✓ | |
enabled | boolean | ✓ | |
model | string | ✓ | |
monthly_budget_cents | integer (int64) | | |
priority | integer (int64) | ✓ | |
provider | string | ✓ | |
Test an LLM provider API key
Request body
— TestProviderInputBody
| Field | Type | Req | Description |
api_key | string | ✓ | |
provider | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
ok | boolean | |
List user LLM providers
Responses
| Field | Type | Description |
budget_left | number (double) | |
budget_usd | number (double) | |
enabled | boolean | |
has_key | boolean | |
id | string | |
model | string | |
monthly_budget_cents | integer | null (int64) | |
monthly_spend_cents | integer (int64) | |
monthly_spend_reset_at | string | |
owner_type | string | |
priority | integer (int64) | |
provider | string | |
spent_usd | number (double) | |
Create a user LLM provider
Request body
— CreateProviderInputBody
| Field | Type | Req | Description |
api_key | string | ✓ | |
budget_usd | number (double) | ✓ | |
enabled | boolean | ✓ | |
model | string | ✓ | |
monthly_budget_cents | integer (int64) | | |
priority | integer (int64) | ✓ | |
provider | string | ✓ | |
Responses
| Field | Type | Description |
budget_left | number (double) | |
budget_usd | number (double) | |
enabled | boolean | |
has_key | boolean | |
id | string | |
model | string | |
monthly_budget_cents | integer | null (int64) | |
monthly_spend_cents | integer (int64) | |
monthly_spend_reset_at | string | |
owner_type | string | |
priority | integer (int64) | |
provider | string | |
spent_usd | number (double) | |
Delete a user LLM provider
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Update a user LLM provider
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Request body
— UpdateProviderInputBody
| Field | Type | Req | Description |
api_key | string | | |
budget_usd | number (double) | ✓ | |
enabled | boolean | ✓ | |
model | string | ✓ | |
monthly_budget_cents | integer (int64) | | |
priority | integer (int64) | ✓ | |
provider | string | ✓ | |
Test a user LLM provider API key
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Responses
| Field | Type | Description |
message | string | |
ok | boolean | |
Get resolved LLM provider cascade for user
Responses
| Field | Type | Description |
budget_left | number (double) | |
budget_usd | number (double) | |
enabled | boolean | |
has_key | boolean | |
id | string | |
model | string | |
monthly_budget_cents | integer | null (int64) | |
monthly_spend_cents | integer (int64) | |
monthly_spend_reset_at | string | |
owner_type | string | |
priority | integer (int64) | |
provider | string | |
spent_usd | number (double) | |
Tts
Text-to-speech audio generation.
Preview a TTS voice with a short text sample
Request body
— PreviewTTSVoiceRequest
| Field | Type | Req | Description |
instructions | string | | |
text | string | ✓ | |
voice | string | ✓ | |
List available TTS voices
Responses
| Field | Type | Description |
description | string | |
id | string | |
name | string | |
provider | string | |
Yoto
Yoto account linking and OAuth callbacks.
List linked Yoto accounts
Responses
| Field | Type | Description |
accounts | array | null | |
Unlink a Yoto account
Parameters
| Name | In | Type | Req | Description |
id | path | string | ✓ | |
Yoto OAuth callback (public)
Initiate Yoto OAuth link flow