Skip to content

API reference

Sharing API

Publish a section or a whole project at a stable public link, read its sharing state, or revoke the link.

BetaUpdated

Base URL
https://lyricwinter.com/api/v1
Authentication
Authorization: Bearer lw_…
Contract
openapi.json

Get section sharing

GET/studio/sections/{sectionId}/share

Scope studio:read

Returns whether the section is public and its active public link, if any.

Path parameters

  • sectionIdstringrequireduuid

Response 200

Current section sharing state. Fields below are inside data.

  • schema_version1required
  • section_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public section page URL of the form <origin>/s/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 500, 503 use the standard error envelope.

curl "https://lyricwinter.com/api/v1/studio/sections/$SECTION_ID/share" \
  -H "Authorization: Bearer $LYRICWINTER_API_KEY"
Response 200 (example)
{
  "data": {
    "schema_version": 1,
    "section_id": "8f14e45f-ceea-4e7a-9c2d-3b1a5f2e7c10",
    "is_public": true,
    "share": {
      "id": "c9f0f895-fb98-4b91-9e3f-1d2a6b7c8d20",
      "url": "https://lyricwinter.com/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}

Share a section

POST/studio/sections/{sectionId}/share

Scope studio:write

Creates a stable public link for the section, or returns the existing one. The public page always plays the latest saved version. Send an empty JSON object as the body.

Path parameters

  • sectionIdstringrequireduuid

Request body application/json

object

Must be an empty JSON object.

Response 201

Section published with its active link (also returned when already public). Fields below are inside data.

  • schema_version1required
  • section_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public section page URL of the form <origin>/s/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 409, 500, 503 use the standard error envelope.

curl -X POST "https://lyricwinter.com/api/v1/studio/sections/$SECTION_ID/share" \
  -H "Authorization: Bearer $LYRICWINTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Response 201 (example)
{
  "data": {
    "schema_version": 1,
    "section_id": "8f14e45f-ceea-4e7a-9c2d-3b1a5f2e7c10",
    "is_public": true,
    "share": {
      "id": "c9f0f895-fb98-4b91-9e3f-1d2a6b7c8d20",
      "url": "https://lyricwinter.com/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}

Stop sharing a section

DELETE/studio/sections/{sectionId}/share

Scope studio:write

Revokes the section's public link and makes the section private.

Path parameters

  • sectionIdstringrequireduuid

Response 200

Section is private and the prior link is revoked. Fields below are inside data.

  • schema_version1required
  • section_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public section page URL of the form <origin>/s/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 500, 503 use the standard error envelope.

curl -X DELETE "https://lyricwinter.com/api/v1/studio/sections/$SECTION_ID/share" \
  -H "Authorization: Bearer $LYRICWINTER_API_KEY"
Response 200 (example)
{
  "data": {
    "schema_version": 1,
    "section_id": "8f14e45f-ceea-4e7a-9c2d-3b1a5f2e7c10",
    "is_public": true,
    "share": {
      "id": "c9f0f895-fb98-4b91-9e3f-1d2a6b7c8d20",
      "url": "https://lyricwinter.com/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}

Get project sharing

GET/studio/projects/{projectId}/share

Scope studio:read

Returns whether the project has a public link and the active link, if any.

Path parameters

  • projectIdstringrequireduuid

Response 200

Current project public-link state. Fields below are inside data.

  • schema_version1required
  • project_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public project page URL of the form <origin>/p/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 500, 503 use the standard error envelope.

curl "https://lyricwinter.com/api/v1/studio/projects/$PROJECT_ID/share" \
  -H "Authorization: Bearer $LYRICWINTER_API_KEY"
Response 200 (example)
{
  "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/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}

Share a project

POST/studio/projects/{projectId}/share

Scope studio:write

Creates a stable public link for the whole project, or returns the existing one. Send an empty JSON object as the body.

Path parameters

  • projectIdstringrequireduuid

Request body application/json

object

Must be an empty JSON object.

Response 201

Stable project public link. Fields below are inside data.

  • schema_version1required
  • project_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public project page URL of the form <origin>/p/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 409, 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 '{}'
Response 201 (example)
{
  "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/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}

Stop sharing a project

DELETE/studio/projects/{projectId}/share

Scope studio:write

Revokes the project's public link. Send no request body.

Path parameters

  • projectIdstringrequireduuid

Response 200

Project sharing is revoked. Fields below are inside data.

  • schema_version1required
  • project_idstringrequireduuid
  • is_publicbooleanrequired
  • shareobject | nullrequired

    Active link; non-null exactly when is_public is true.

    3 child attributes
    • idstringrequireduuid
    • urlstringrequireduri

      Public project page URL of the form <origin>/p/<token>.

    • created_atstringrequireddate-time

Errors 400, 401, 403, 404, 500, 503 use the standard error envelope.

curl -X DELETE "https://lyricwinter.com/api/v1/studio/projects/$PROJECT_ID/share" \
  -H "Authorization: Bearer $LYRICWINTER_API_KEY"
Response 200 (example)
{
  "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/…",
      "created_at": "2026-09-30T17:00:00.000Z"
    }
  },
  "request_id": "req_01J9Z3K8QF4"
}