{"_id":"@yotoplay/yoto-sdk","_rev":"29-fb69e0f50428bd0ae307f47a7c6f667d","name":"@yotoplay/yoto-sdk","dist-tags":{"latest":"1.2.4"},"versions":{"1.0.0":{"name":"@yotoplay/yoto-sdk","version":"1.0.0","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"author":{"name":"Yoto"},"license":"MIT","_id":"@yotoplay/yoto-sdk@1.0.0","maintainers":[{"name":"alvinometric","email":"hello@alvin.codes"},{"name":"emmabeynon","email":"emma.beynon@gmail.com"},{"name":"gregyoto","email":"greg@yotoplay.com"},{"name":"tomhazledine","email":"tom@tomhazledine.com"},{"name":"erixk","email":"erixk2807@gmail.com"},{"name":"theresa-yo","email":"theresa.may@yotoplay.com"}],"homepage":"https://github.com/yotoplay/yoto-sdk#readme","bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"dist":{"shasum":"9ff6dcf0d480db452c61e897ec57e7dd1bdbd3be","tarball":"https://registry.npmjs.org/@yotoplay/yoto-sdk/-/yoto-sdk-1.0.0.tgz","fileCount":9,"integrity":"sha512-oAd5XnYIu5oSuXTFcQTonnz2Bgm1o2ykHSoDow5b0CGyQdL5S48NTArun2fSyAtv9NWon31gqWx/TYMWlN8bFg==","signatures":[{"sig":"MEQCICE/+9z7tqyftzZol2AN+wmaRyq85xMxLnPXs0Rq6/+WAiAzgA5pttK+74vLNBHzDmBsqClRQzsYzvBxWyBtNlb8Cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87891},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"aeb304c8d4ae8a2e140625fa03f0e360b3e7c450","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","clean":"rm -rf dist","release":"semantic-release","lint:fix":"eslint src tests --fix","test:run":"vitest run","type-check":"tsc --noEmit","release:check":"semantic-release --dry-run --no-ci","prepublishOnly":"npm run clean && npm run build && npm run test:run && npm run lint","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"gregyoto","email":"greg@yotoplay.com"},"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript SDK for Yoto's public API","directories":{},"_nodeVersion":"20.19.5","dependencies":{"axios":"^1.7.7","axios-retry":"^3.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.57.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.14.0","semantic-release":"^24.2.9","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.6","@typescript-eslint/parser":"^7.18.0","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^7.18.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/yoto-sdk_1.0.0_1758989112464_0.46412487169013006","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@yotoplay/yoto-sdk","version":"1.1.0","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"author":{"name":"Yoto"},"license":"MIT","_id":"@yotoplay/yoto-sdk@1.1.0","maintainers":[{"name":"alvinometric","email":"hello@alvin.codes"},{"name":"emmabeynon","email":"emma.beynon@gmail.com"},{"name":"gregyoto","email":"greg@yotoplay.com"},{"name":"tomhazledine","email":"tom@tomhazledine.com"},{"name":"erixk","email":"erixk2807@gmail.com"},{"name":"theresa-yo","email":"theresa.may@yotoplay.com"}],"homepage":"https://github.com/yotoplay/yoto-sdk#readme","bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"dist":{"shasum":"518402910225c426a0a7d13c70baead9ba81fb3d","tarball":"https://registry.npmjs.org/@yotoplay/yoto-sdk/-/yoto-sdk-1.1.0.tgz","fileCount":9,"integrity":"sha512-xfj8CaWP5EnaBghEP8O7RJt5WmxsdcKZ2o1ZaWFaMLygNmMxPj0TOcK2jdu2N3wTSKXx9j8snXNO3CnZ+cxrBQ==","signatures":[{"sig":"MEUCIFSUELcepAj+zKD02dPOyUzkBiUkE0ZimRoHV9nVClciAiEAznkEMAcQzEquGRGwrT3mvgypBodGjCCRCPBIIH7v2qo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87891},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"9e489442e5c682457c1c2974f2b9ab8b85c68ae5","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","clean":"rm -rf dist","release":"semantic-release","lint:fix":"eslint src tests --fix","test:run":"vitest run","type-check":"tsc --noEmit","release:check":"semantic-release --dry-run --no-ci","prepublishOnly":"npm run clean && npm run build && npm run test:run && npm run lint","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"gregyoto","email":"greg@yotoplay.com"},"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript SDK for Yoto's public API","directories":{},"_nodeVersion":"20.19.5","dependencies":{"axios":"^1.7.7","axios-retry":"^3.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.57.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.14.0","semantic-release":"^24.2.9","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.6","@typescript-eslint/parser":"^7.18.0","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^7.18.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/yoto-sdk_1.1.0_1758989547260_0.9530920357958781","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@yotoplay/yoto-sdk","version":"1.2.0","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"author":{"name":"Yoto"},"license":"MIT","_id":"@yotoplay/yoto-sdk@1.2.0","maintainers":[{"name":"alvinometric","email":"hello@alvin.codes"},{"name":"emmabeynon","email":"emma.beynon@gmail.com"},{"name":"gregyoto","email":"greg@yotoplay.com"},{"name":"tomhazledine","email":"tom@tomhazledine.com"},{"name":"erixk","email":"erixk2807@gmail.com"},{"name":"theresa-yo","email":"theresa.may@yotoplay.com"}],"homepage":"https://github.com/yotoplay/yoto-sdk#readme","bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"dist":{"shasum":"d67b34c82e63028ec3dd057afa63fc1ded6e5bcc","tarball":"https://registry.npmjs.org/@yotoplay/yoto-sdk/-/yoto-sdk-1.2.0.tgz","fileCount":9,"integrity":"sha512-YUYEwxWaylo2/lteLiDpO9NgtAlsTNxy3e9Uul8t8NNwmqdbc7mOEann6B5awudf6Ipx6jkQFZ2Y2adhcXE6Vg==","signatures":[{"sig":"MEQCIDesl1m8u6FBrw337d5CGLi2dnGG7quctGzsCz64BYy5AiBmLqfsE5L/6+G6NrC+mB2GTbbUlDPd8QFp5iNriU8EDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105145},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6478ab692addd7529bf00a858efec90cb854d909","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","clean":"rm -rf dist","release":"semantic-release","lint:fix":"eslint src tests --fix","test:run":"vitest run","type-check":"tsc --noEmit","release:check":"semantic-release --dry-run --no-ci","prepublishOnly":"npm run clean && npm run build && npm run test:run && npm run lint","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"gregyoto","email":"greg@yotoplay.com"},"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript SDK for Yoto's public API","directories":{},"_nodeVersion":"20.19.5","dependencies":{"axios":"^1.7.7","axios-retry":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.36.0","vitest":"^3.2.4","typescript":"^5.5.0","@types/node":"^24.5.2","semantic-release":"^24.2.9","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.6","@typescript-eslint/parser":"^8.44.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.44.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/yoto-sdk_1.2.0_1759042240899_0.11304810996164094","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@yotoplay/yoto-sdk","version":"1.2.3","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"author":{"name":"Yoto"},"license":"MIT","_id":"@yotoplay/yoto-sdk@1.2.3","maintainers":[{"name":"yoto-robbeal","email":"rob.beal@yotoplay.com"},{"name":"aistyna","email":"asta.malyskaite@yotoplay.com"},{"name":"vikkio88","email":"vincenzo.ciaccio@gmail.com"},{"name":"erixk","email":"eriks@yotoplay.com"},{"name":"yoto_ralph","email":"ralph@yotoplay.com"},{"name":"hiro11","email":"hiroshi.sipahioglu@yotoplay.com"},{"name":"hasan-yoto","email":"hasan.abdulgader@yotoplay.com"},{"name":"adamflitney","email":"adam.flitney@gmail.com"},{"name":"jaimen-yoto","email":"jaimen.lathia@yotoplay.com"},{"name":"seb.sim","email":"seb.sim@yotoplay.com"},{"name":"tami.effendowicz","email":"tami.effendowicz@yotoplay.com"},{"name":"alvinometric","email":"hello@alvin.codes"},{"name":"emmabeynon","email":"emma.beynon@gmail.com"},{"name":"gregyoto","email":"greg@yotoplay.com"},{"name":"tomhazledine","email":"tom@tomhazledine.com"},{"name":"theresa-yo","email":"theresa.may@yotoplay.com"}],"homepage":"https://github.com/yotoplay/yoto-sdk#readme","bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"dist":{"shasum":"b58e83224105d89028ad68826e6656879b0e4406","tarball":"https://registry.npmjs.org/@yotoplay/yoto-sdk/-/yoto-sdk-1.2.3.tgz","fileCount":9,"integrity":"sha512-ncApZFj+NS4kLAfJ2FtZZ6jzfJiMMq1Sv/8LcXt5HSki+OnaasvdAbv1WHjhLkmqBU4PYSjKC2JOJULM9RPYIQ==","signatures":[{"sig":"MEQCIFSxQYZz/4j2ZI7XfTIBgj6rO6aqv8mHHkBylFhAsKu/AiAjAftAntXoxrKVVLNrP2xY2NtVVh0X1DLkCme1cmk5hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yotoplay%2fyoto-sdk@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104964},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"c917ee2456a11f5103dfc69b4a0b081184e896b0","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","clean":"rm -rf dist","release":"semantic-release","lint:fix":"eslint src tests --fix","test:run":"vitest run","type-check":"tsc --noEmit","release:check":"semantic-release --dry-run --no-ci","prepublishOnly":"npm run clean && npm run build && npm run test:run && npm run lint","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:abb403c5-143f-4e3a-9cb3-ddf881543313"}},"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"_npmVersion":"11.11.1","description":"Official TypeScript SDK for Yoto's public API","directories":{},"_nodeVersion":"20.20.1","dependencies":{"axios":"^1.12.2","axios-retry":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","eslint":"^9.36.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^24.5.2","semantic-release":"^24.2.9","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.6","@typescript-eslint/parser":"^8.44.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.44.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/yoto-sdk_1.2.3_1773866652751_0.44042418485024193","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@yotoplay/yoto-sdk","version":"1.2.4","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"author":{"name":"Yoto"},"license":"MIT","_id":"@yotoplay/yoto-sdk@1.2.4","maintainers":[{"name":"yoto-robbeal","email":"rob.beal@yotoplay.com"},{"name":"aistyna","email":"asta.malyskaite@yotoplay.com"},{"name":"vikkio88","email":"vincenzo.ciaccio@gmail.com"},{"name":"erixk","email":"eriks@yotoplay.com"},{"name":"yoto_ralph","email":"ralph@yotoplay.com"},{"name":"hiro11","email":"hiroshi.sipahioglu@yotoplay.com"},{"name":"hasan-yoto","email":"hasan.abdulgader@yotoplay.com"},{"name":"adamflitney","email":"adam.flitney@gmail.com"},{"name":"jaimen-yoto","email":"jaimen.lathia@yotoplay.com"},{"name":"seb.sim","email":"seb.sim@yotoplay.com"},{"name":"tami.effendowicz","email":"tami.effendowicz@yotoplay.com"},{"name":"alvinometric","email":"hello@alvin.codes"},{"name":"emmabeynon","email":"emma.beynon@gmail.com"},{"name":"gregyoto","email":"greg@yotoplay.com"},{"name":"tomhazledine","email":"tom@tomhazledine.com"},{"name":"theresa-yo","email":"theresa.may@yotoplay.com"}],"homepage":"https://github.com/yotoplay/yoto-sdk#readme","bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"dist":{"shasum":"3335110969b767af939fddde89036cba3043c2f2","tarball":"https://registry.npmjs.org/@yotoplay/yoto-sdk/-/yoto-sdk-1.2.4.tgz","fileCount":9,"integrity":"sha512-wP+3zhLp5xiJdUO1zAsjArPLN0/6vdMsuMhc/9rlLSNFJioQifKpifUnvyMxHRWsnvZp9tghJ5gsfssR1WQW2w==","signatures":[{"sig":"MEUCIQCo73lnWC7IPrRcN0ZCGG88gt1wPBf+s2HF+NaFcFYbhgIgS54TrwMLX2e5bYAZ4mgOQgiUQtfzeRGAqd8VwjfzEH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yotoplay%2fyoto-sdk@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104964},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"99b633c44c5c5755e92c7e322bd840a9316751e7","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","clean":"rm -rf dist","release":"semantic-release","lint:fix":"eslint src tests --fix","test:run":"vitest run","type-check":"tsc --noEmit","release:check":"semantic-release --dry-run --no-ci","prepublishOnly":"npm run clean && npm run build && npm run test:run && npm run lint","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:abb403c5-143f-4e3a-9cb3-ddf881543313"}},"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"_npmVersion":"11.11.1","description":"Official TypeScript SDK for Yoto's public API","directories":{},"_nodeVersion":"20.20.1","dependencies":{"axios":"^1.12.2","axios-retry":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","eslint":"^9.36.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^24.5.2","semantic-release":"^24.2.9","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.6","@typescript-eslint/parser":"^8.44.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.44.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/yoto-sdk_1.2.4_1773867926003_0.08637930585157205","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-09-27T16:05:12.358Z","modified":"2026-08-18T09:46:05.148Z","1.0.0":"2025-09-27T16:05:12.661Z","1.1.0":"2025-09-27T16:12:27.443Z","1.2.0":"2025-09-28T06:50:41.108Z","1.2.3":"2026-03-18T20:44:12.895Z","1.2.4":"2026-03-18T21:05:26.159Z"},"bugs":{"url":"https://github.com/yotoplay/yoto-sdk/issues"},"author":{"name":"Yoto"},"license":"MIT","homepage":"https://github.com/yotoplay/yoto-sdk#readme","keywords":["yoto","sdk","typescript","api","audio","children","entertainment"],"repository":{"url":"git+https://github.com/yotoplay/yoto-sdk.git","type":"git"},"description":"Official TypeScript SDK for Yoto's public API","maintainers":[{"email":"dan@danwebb.net","name":"danwrong"},{"email":"rob.beal@yotoplay.com","name":"yoto-robbeal"},{"email":"asta.malyskaite@yotoplay.com","name":"aistyna"},{"email":"vincenzo.ciaccio@gmail.com","name":"vikkio88"},{"email":"eriks@yotoplay.com","name":"erixk"},{"email":"ralph@yotoplay.com","name":"yoto_ralph"},{"email":"hiroshi.sipahioglu@yotoplay.com","name":"hiro11"},{"email":"hasan.abdulgader@yotoplay.com","name":"hasan-yoto"},{"email":"adam.flitney@gmail.com","name":"adamflitney"},{"email":"jaimen.lathia@yotoplay.com","name":"jaimen-yoto"},{"email":"seb.sim@yotoplay.com","name":"seb.sim"},{"email":"caneycode@gmail.com","name":"escaney"},{"email":"tami.effendowicz@yotoplay.com","name":"tami.effendowicz"},{"email":"liam.sennitt@yotoplay.com","name":"liam-yoto"},{"email":"kieran.mozer@yotoplay.com","name":"kmoze"},{"email":"yusyuan.cheng@yotoplay.com","name":"yusyuan-yoto"},{"email":"Olliewarway@gmail.com","name":"owarway"},{"email":"onishiweb@gmail.com","name":"onishiweb"},{"email":"tash.mulla@yotoplay.com","name":"tash.mulla"},{"email":"filip@yotoplay.com","name":"filipyoto"},{"email":"sian.lynch@yotoplay.com","name":"sianyoto"},{"email":"luke.jeffery@yotoplay.com","name":"lukejeffery-yoto"},{"email":"security-integrations@yotoplay.com","name":"yoto-security-integrations"},{"email":"hello@alvin.codes","name":"alvinometric"},{"email":"emma.beynon@gmail.com","name":"emmabeynon"},{"email":"greg@yotoplay.com","name":"gregyoto"},{"email":"tom@tomhazledine.com","name":"tomhazledine"},{"email":"theresa.may@yotoplay.com","name":"theresa-yo"}],"readme":"# @yotoplay/yoto-sdk\n\nA TypeScript SDK for Yoto's public API.\n\n## Installation\n\n```bash\nnpm install @yotoplay/yoto-sdk\n```\n\n## Quick Start\n\n### Basic Usage\n\n```typescript\nimport { yotoSdk, createYotoSdk } from '@yotoplay/yoto-sdk';\n\n// Option 1: Use default instance\nconst devices = await yotoSdk.devices.getMyDevices();\n\n// Option 2: Create custom configured instance\nconst customSdk = createYotoSdk({\n  clientId: 'your-client-id' // Obtain from https://dashboard.yoto.dev/\n});\n```\n\n### JWT Authentication (Server-side Usage)\n\nFor server-side usage (e.g., API Gateway Lambda functions), you can provide a JWT token directly:\n\n```typescript\nimport { createYotoSdk } from '@yotoplay/yoto-sdk';\n\n// Server-side usage with JWT\nconst sdk = createYotoSdk({\n  jwt: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...', // JWT token from event.headers\n});\n\n// No need to call login() - JWT is already provided\nconst devices = await sdk.devices.getMyDevices();\nconst cards = await sdk.content.getMyCards();\n```\n\n### Main SDK Usage\n\nThe SDK is organized into logical namespaces that mirror the [Yoto API structure](https://yoto.dev/api/):\n\n```typescript\nimport { yotoSdk } from '@yotoplay/yoto-sdk';\n\n// Content API - manage cards and content\nconst cards = await yotoSdk.content.getMyCards();\nconst card = await yotoSdk.content.getCard('card-id');\nconst updatedCard = await yotoSdk.content.updateCard(cardData);\n\n// Devices API - manage Yoto devices\nconst devices = await yotoSdk.devices.getMyDevices();\n\n// Media API - handle media uploads and URLs\nconst uploadUrl = await yotoSdk.media.getUploadUrlForTranscode(sha256, filename);\nawait yotoSdk.media.uploadFile(uploadUrl.url, audioBuffer);\nconst mediaUrl = await yotoSdk.media.getMediaUrl(cardId, mediaId);\n\n// Icons API - manage display icons\nconst icons = await yotoSdk.icons.getDisplayIcons();\n\n// Family API - manage family images\nconst familyImages = await yotoSdk.family.getFamilyImages();\nconst familyImage = await yotoSdk.family.getFamilyImage('image-id');\nawait yotoSdk.family.uploadFamilyImage(imageBuffer, 'My Family Photo', true, ['family', 'photo']);\n\n// Family Library Groups API - manage card groups\nconst groups = await yotoSdk.familyLibraryGroups.getGroups();\nconst group = await yotoSdk.familyLibraryGroups.createGroup({\n  title: 'Bedtime Stories',\n  description: 'Our favorite bedtime stories',\n  cards: ['card1', 'card2', 'card3']\n});\n```\n\n## Error Handling\n\nThe SDK provides custom error types for better error handling:\n\n```typescript\nimport { YotoSdkError } from '@yotoplay/yoto-sdk';\n\ntry {\n  await yotoSdk.devices.getMyDevices();\n} catch (error) {\n  if (error instanceof YotoSdkError) {\n    console.error('SDK Error:', error.message);\n    console.error('Status:', error.status);\n    console.error('Response:', error.response);\n  }\n}\n```\n\n## Utility Methods\n\n```typescript\n// Extract media ID from track URL\nconst mediaId = yotoSdk.extractMediaId('yoto:#media123');\n// Returns: 'media123'\n```\n\n## Examples\n\n### Media Upload and Processing\n\n```typescript\nimport { yotoSdk } from '@yotoplay/yoto-sdk';\nimport fs from 'fs';\n\nasync function uploadAndProcessMedia() {\n  // Read audio file\n  const audioBuffer = fs.readFileSync('audio.mp3');\n  const sha256 = 'your-file-hash';\n  const filename = 'audio.mp3';\n\n  // Get upload URL\n  const uploadUrl = await yotoSdk.media.getUploadUrlForTranscode(sha256, filename);\n  \n  // Upload file\n  await yotoSdk.media.uploadFile(uploadUrl.url, audioBuffer);\n  \n  // Get transcoded result\n  const transcoded = await yotoSdk.media.getTranscodedUpload(uploadUrl.uploadId, true);\n  \n  console.log('Transcoded URL:', transcoded.url);\n}\n```\n\n### Family Management\n\n```typescript\nimport { yotoSdk } from '@yotoplay/yoto-sdk';\nimport fs from 'fs';\n\nasync function manageFamilyContent() {\n  // Get all family images\n  const familyImages = await yotoSdk.family.getFamilyImages();\n  console.log('Family images:', familyImages);\n  \n  // Upload a new family image\n  const imageBuffer = fs.readFileSync('family-photo.jpg');\n  const newImage = await yotoSdk.family.uploadFamilyImage(\n    imageBuffer, \n    'Our Family Photo', \n    true, // public\n    ['family', 'photo', 'memories']\n  );\n  \n  console.log('Uploaded image:', newImage.imageId);\n  \n  // Get a specific family image\n  const image = await yotoSdk.family.getFamilyImage(newImage.imageId);\n  console.log('Image details:', image);\n}\n```\n\n### Family Library Groups\n\n```typescript\nimport { yotoSdk } from '@yotoplay/yoto-sdk';\n\nasync function manageFamilyLibraryGroups() {\n  // Get all groups\n  const groups = await yotoSdk.familyLibraryGroups.getGroups();\n  console.log('Existing groups:', groups);\n  \n  // Create a new group\n  const newGroup = await yotoSdk.familyLibraryGroups.createGroup({\n    title: 'Bedtime Stories',\n    description: 'Our favorite bedtime stories collection',\n    public: true,\n    publicTags: ['bedtime', 'stories', 'kids'],\n    cards: ['card1', 'card2', 'card3']\n  });\n  \n  console.log('Created group:', newGroup.groupId);\n  \n  // Get group details\n  const group = await yotoSdk.familyLibraryGroups.getGroup(newGroup.groupId);\n  console.log('Group details:', group);\n  \n  // Update the group\n  const updatedGroup = await yotoSdk.familyLibraryGroups.updateGroup(newGroup.groupId, {\n    title: 'Updated Bedtime Stories',\n    description: 'Updated description',\n    cards: ['card1', 'card2', 'card3', 'card4'] // Add more cards\n  });\n  \n  console.log('Updated group:', updatedGroup);\n  \n  // Delete the group\n  await yotoSdk.familyLibraryGroups.deleteGroup(newGroup.groupId);\n  console.log('Group deleted');\n}\n```\n\n\n## License\n\nMIT\n","readmeFilename":"README.md"}