API reference
Sharing API
Share chapters at one story link once Stories publishing opens for your account, inspect sharing state, or unpublish chapters. Before your rollout, these endpoints retain the older listening-link behavior. New chapters start as drafts.
BetaUpdated
- Base URL
- https://lyricwinter.com/api/v1
- Authentication
- Authorization: Bearer lw_…
- Contract
- openapi.json
Share a project
POST/studio/projects/{projectId}/share
studio:writeOnce Stories publishing opens for your account, publishes the project’s current chapters with saved story text and returns the story’s /stories/<id>-<slug> link in share.url. Blank drafts are skipped; existing chapter publications stay as they are. If no chapters have words, publishes nothing and returns not shared. A Private story becomes Unlisted when chapters are published; existing Unlisted/Public visibility and metadata are preserved. New chapters start as drafts; share the project again or explicitly publish each chapter when ready. Before your rollout, creates or returns the older project listening link. Send an empty JSON object, or name the source surface you shared from. Stories shares also include share.studio_url, the same path under /studio/, opening the owner’s editor or Studio’s shared view with Make a copy. When the owner turns Allow copies off, studio_url is null and visitors use the Stories reading link. The setting defaults to on for Unlisted and Public stories. Both links keep the same visibility and sign-in requirements.
Path parameters
projectIdstringrequireduuid
Request body application/json
sourcestringStudio surface the owner shared from.
One of
toolbarplayback_menulibrarycompletion_prompt
Response 201
Project shared with its active link, also returned when already shared. Fields below are inside data.
schema_version1requiredproject_idstringrequireduuidis_publicbooleanrequiredshareobject | nullrequiredActive link; non-null exactly when is_public is true.
4 child attributes
idstringrequireduuidSharing identity; may be the owning project UUID for a story link.
urlstringrequireduriStory URL of the form <origin>/stories/<id>-<slug> once Stories publishing opens for the account; otherwise the older token URL.
studio_urlstring | nulluriFor Stories shares, the same story URL under /studio/ opens the owner's editor or Studio's shared view with Make a copy when Allow copies is on (the default for Unlisted and Public stories). Null when Allow copies is off. The same visibility and sign-in requirements apply. Absent for older token shares.
created_atstringrequireddate-time
Errors 400, 401, 403, 404, 409, 422, 429, 500, 503 use the standard error envelope.
curl -X POST "https://lyricwinter.com/api/v1/studio/projects/$PROJECT_ID/share" \
-H "Authorization: Bearer $LYRICWINTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'const projectId = "<projectId>";
const response = await fetch(`https://lyricwinter.com/api/v1/studio/projects/${projectId}/share`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LYRICWINTER_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const { data, error, request_id } = await response.json();import os
import requests
project_id = "<projectId>"
response = requests.request(
"POST",
f"https://lyricwinter.com/api/v1/studio/projects/{project_id}/share",
headers={
"Authorization": f"Bearer {os.environ['LYRICWINTER_API_KEY']}",
},
json={},
)
payload = response.json(){
"data": {
"schema_version": 1,
"project_id": "8f14e45f-ceea-4e7a-9c2d-3b1a5f2e7c10",
"is_public": true,
"share": {
"id": "c9f0f895-fb98-4b91-9e3f-1d2a6b7c8d20",
"url": "https://lyricwinter.com/…",
"studio_url": "https://lyricwinter.com/…",
"created_at": "2026-09-30T17:00:00.000Z"
}
},
"request_id": "req_01J9Z3K8QF4"
}