# PopCloud control plane — open in VS Code (REST Client) or a JetBrains IDE. @baseUrl = https://api.popcloud.ca @accessToken = paste-an-access-token-here ### Authentication # Accept Organization Invitation POST {{baseUrl}}/v1/auth/invitations/accept Content-Type: application/json { "token": "", "password": "" } ### # Login POST {{baseUrl}}/v1/auth/login Content-Type: application/json { "email": "", "password": "" } ### # Logout POST {{baseUrl}}/v1/auth/logout ### # Forgot Password POST {{baseUrl}}/v1/auth/password/forgot Content-Type: application/json { "email": "" } ### # Reset Password POST {{baseUrl}}/v1/auth/password/reset Content-Type: application/json { "token": "", "new_password": "" } ### # Refresh POST {{baseUrl}}/v1/auth/refresh ### # Signup POST {{baseUrl}}/v1/auth/signup Content-Type: application/json { "email": "", "password": "", "org_name": "", "region": "" } ### # Switch Org POST {{baseUrl}}/v1/auth/switch-org Authorization: Bearer {{accessToken}} Content-Type: application/json { "org_id": "" } ### # Verify Email POST {{baseUrl}}/v1/auth/verify-email Content-Type: application/json { "token": "" } ### ### Your account # Me GET {{baseUrl}}/v1/me Authorization: Bearer {{accessToken}} ### ### Organisation # Get Org GET {{baseUrl}}/v1/org Authorization: Bearer {{accessToken}} ### # Invite Member POST {{baseUrl}}/v1/org/invitations Authorization: Bearer {{accessToken}} Content-Type: application/json { "email": "", "role": "" } ### # Revoke Invitation DELETE {{baseUrl}}/v1/org/invitations/{invitation_id} Authorization: Bearer {{accessToken}} ### # Remove Member DELETE {{baseUrl}}/v1/org/members/{user_id} Authorization: Bearer {{accessToken}} ### # Update Member Role PATCH {{baseUrl}}/v1/org/members/{user_id} Authorization: Bearer {{accessToken}} Content-Type: application/json { "role": "" } ### # Retry Provisioning POST {{baseUrl}}/v1/org/provisioning/retry Authorization: Bearer {{accessToken}} ### # List Team GET {{baseUrl}}/v1/org/team Authorization: Bearer {{accessToken}} ### # List Organizations GET {{baseUrl}}/v1/organizations Authorization: Bearer {{accessToken}} ### ### Credentials # List Credentials GET {{baseUrl}}/v1/credentials Authorization: Bearer {{accessToken}} ### # Create Credential POST {{baseUrl}}/v1/credentials Authorization: Bearer {{accessToken}} Content-Type: application/json { "label": "", "scope_all_buckets": false, "bucket_names": [], "permissions": [], "expires_at": "" } ### # Get Credential GET {{baseUrl}}/v1/credentials/{credential_id} Authorization: Bearer {{accessToken}} ### # Update Credential Label PATCH {{baseUrl}}/v1/credentials/{credential_id} Authorization: Bearer {{accessToken}} Content-Type: application/json { "label": "" } ### # Revoke Credential POST {{baseUrl}}/v1/credentials/{credential_id}/revoke Authorization: Bearer {{accessToken}} ### # Rotate Credential POST {{baseUrl}}/v1/credentials/{credential_id}/rotate Authorization: Bearer {{accessToken}} ### # Claim Credential POST {{baseUrl}}/v1/credentials/claim Authorization: Bearer {{accessToken}} ### ### Buckets, objects & CORS # List Buckets GET {{baseUrl}}/v1/buckets Authorization: Bearer {{accessToken}} ### # Create Bucket POST {{baseUrl}}/v1/buckets Authorization: Bearer {{accessToken}} Content-Type: application/json { "label": "", "tier": "", "visibility": "", "encryption": false } ### # Delete Bucket DELETE {{baseUrl}}/v1/buckets/{bucket} Authorization: Bearer {{accessToken}} ### # Update Bucket PATCH {{baseUrl}}/v1/buckets/{bucket} Authorization: Bearer {{accessToken}} Content-Type: application/json { "visibility": "", "encryption": false } ### # Get CORS GET {{baseUrl}}/v1/buckets/{bucket}/cors Authorization: Bearer {{accessToken}} ### # Put CORS PUT {{baseUrl}}/v1/buckets/{bucket}/cors Authorization: Bearer {{accessToken}} Content-Type: application/json { "rules": [] } ### # Get Lifecycle GET {{baseUrl}}/v1/buckets/{bucket}/lifecycle Authorization: Bearer {{accessToken}} ### # Put Lifecycle PUT {{baseUrl}}/v1/buckets/{bucket}/lifecycle Authorization: Bearer {{accessToken}} Content-Type: application/json { "noncurrent_version_days": 0, "unfinished_multipart_days": 0 } ### # Delete Object DELETE {{baseUrl}}/v1/buckets/{bucket}/objects Authorization: Bearer {{accessToken}} ### # List Objects GET {{baseUrl}}/v1/buckets/{bucket}/objects Authorization: Bearer {{accessToken}} ### # Object Metadata GET {{baseUrl}}/v1/buckets/{bucket}/objects/metadata Authorization: Bearer {{accessToken}} ### # Create Multipart POST {{baseUrl}}/v1/files/multipart Authorization: Bearer {{accessToken}} Content-Type: application/json { "bucket": "", "key": "", "content_type": "" } ### # Abort Multipart DELETE {{baseUrl}}/v1/files/multipart/{upload_id} Authorization: Bearer {{accessToken}} ### # Complete Multipart POST {{baseUrl}}/v1/files/multipart/{upload_id}/complete Authorization: Bearer {{accessToken}} Content-Type: application/json { "bucket": "", "key": "", "parts": [] } ### # List Parts GET {{baseUrl}}/v1/files/multipart/{upload_id}/parts Authorization: Bearer {{accessToken}} ### # Sign Part POST {{baseUrl}}/v1/files/multipart/{upload_id}/sign Authorization: Bearer {{accessToken}} Content-Type: application/json { "bucket": "", "key": "", "part_number": 0 } ### # Presign Download POST {{baseUrl}}/v1/files/presign Authorization: Bearer {{accessToken}} Content-Type: application/json { "bucket": "", "key": "", "purpose": "", "filename": "" } ### # Presign Upload POST {{baseUrl}}/v1/files/upload-url Authorization: Bearer {{accessToken}} Content-Type: application/json { "bucket": "", "key": "", "content_type": "" } ### ### System # Health GET {{baseUrl}}/health ### # Ready GET {{baseUrl}}/ready ### # Version GET {{baseUrl}}/version ###