@host = http://localhost:8080 @tenantCode = 2s # NOTE: # - tenant_public endpoints do NOT require tenant membership. # - Auth is optional: provide a token to get accurate has_access for paid contents. @token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoyLCJpc3MiOiJ2MiIsImV4cCI6MTc2NjYzMzAyMSwibmJmIjoxNzY2MDI4MjExfQ.RjLVil6EnbPi4LMPyVBzR2vFaeXelypk5fKInsAzqc8 ### Tenant Public - Contents list (published + public), guest GET {{ host }}/t/{{ tenantCode }}/v1/public/contents?page=1&limit=10 Content-Type: application/json ### Tenant Public - Contents list (published + public), optional auth GET {{ host }}/t/{{ tenantCode }}/v1/public/contents?page=1&limit=10 Content-Type: application/json Authorization: Bearer {{ token }} ### Tenant Public - Content detail (published + public), guest @contentID = 1 GET {{ host }}/t/{{ tenantCode }}/v1/public/contents/{{ contentID }} Content-Type: application/json ### Tenant Public - Preview assets (role=preview), guest GET {{ host }}/t/{{ tenantCode }}/v1/public/contents/{{ contentID }}/preview Content-Type: application/json ### Tenant Public - Media play (token-based; no auth header needed) # Copy a `play_url` from preview/assets response and paste it here (or set @playToken). @playToken = paste_play_token_here GET {{ host }}/t/{{ tenantCode }}/v1/media/play?token={{ playToken }} ### Tenant Public - Main assets (role=main), guest # Rule confirmed: public + price=0 => guest can access main assets. GET {{ host }}/t/{{ tenantCode }}/v1/public/contents/{{ contentID }}/assets Content-Type: application/json ### Tenant Public - Main assets (role=main), optional auth (paid content requires purchase/owner) GET {{ host }}/t/{{ tenantCode }}/v1/public/contents/{{ contentID }}/assets Content-Type: application/json Authorization: Bearer {{ token }}