{"ok":true,"version":"agent-media-upload-sessions.v1","generatedAt":"2026-05-30T06:52:43.166Z","artistId":"laurel","safeForAgent":true,"browserAutomationRequired":false,"communityMode":{"version":"fanful-community-mode.v1","contractDoc":"docs/platform/fanful-community-mode-contract.md","relatedIssues":[560,1075,1078],"source":"agent-media-upload-sessions","selectedCommunity":{"id":"laurel","slug":"laurel-harned","name":"Laurel Harned","role":"first-default-community","isDefault":true,"artistSite":"https://docs.fanful.net/","rawDatabaseIdsRedacted":true},"activeMode":"fan","availableModes":[{"id":"fan","status":"available","summary":"Listen, watch, chat, support, buy, and participate as a fan of the selected community.","requiredAuthorization":"Public or signed-in listener context for private fan state."},{"id":"publisher","status":"authorization-required","summary":"Administer creator/community commerce, live rooms, messaging, moderation, and settings.","requiredAuthorization":"Server-confirmed creator/admin authorization for selectedCommunity.id.","blockedUnless":"Do not expose or execute publisher actions until the backend resolves creator/admin authorization for this selected community."}],"modeSwitching":{"oneAccount":true,"requiresSignOut":false,"preservesPlayerSession":true,"preservesListenerIdentity":true,"authorizationBoundary":"Switching into publisher mode never grants authority by itself; each creator/admin action must still pass server-side scope and role checks for the selected community."},"agentInstructions":["Display selectedCommunity.name and activeMode before proposing community-scoped actions.","Offer fan actions by default; offer publisher actions only when publisher mode is available or when asking the human to authorize it.","Do not assume Laurel-only global context when future communities are added; carry selectedCommunity.id through proposals and confirmations."],"redactedFields":["community.databaseId","artist.internalId","admin.grantId","agentBearerToken"]},"principal":{"source":"guest","role":"guest","signedIn":false,"displayName":"Guest","grant":null},"operations":[{"id":"creator.media-upload-session.preview","toolName":"fanful_creator_media_upload_session_preview","status":"ready","enabled":false,"endpoint":{"href":"https://docs.fanful.net/api/agent/media-upload-sessions","method":"POST","auth":"artist-admin-or-approved-automation","description":"Preview a metadata/provenance upload session."},"requiresEnvelope":false},{"id":"creator.media-upload-session.confirmed-create","toolName":"fanful_creator_media_upload_session_create","status":"ready","enabled":false,"endpoint":{"href":"https://docs.fanful.net/api/agent/media-upload-sessions","method":"POST","auth":"artist-admin-or-approved-automation","description":"Create a confirmed media upload session."},"requiresEnvelope":"agent-write-envelope.v1"}],"uploadHandoff":{"endpoint":{"href":"https://docs.fanful.net/api/admin/uploads","method":"POST","auth":"artist-admin-or-approved-automation","description":"Submit binary media/artwork outside the model context."},"method":"multipart/form-data","sessionField":"agentUploadSessionId","sessionId":null,"binaryFieldsNotModelVisible":["media","artwork"],"requiredMetadataFields":["title","durationSeconds","visibility","mediaProvenance","mediaCredit","mediaSourceUrl","mediaLicense","replacementStatus","agentUploadSessionId"]},"audit":{"currentRecord":"agent_media_upload_sessions + agent_write_idempotency_keys","completionRecord":"When /api/admin/uploads receives agentUploadSessionId, it links the published track id back to the agent_media_upload_sessions row."},"boundaries":["This surface never accepts raw media bytes, artwork bytes, R2 keys, private media URLs, or storage credentials in JSON.","Binary transfer stays in the existing authenticated multipart upload route and is linked by agentUploadSessionId."],"relatedIssues":[1292,1298,1299]}