{"components":{"schemas":{"Envelope":{"properties":{"data":{},"error":{"type":"string"},"kind":{"type":"string"},"ok":{"type":"boolean"}},"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"API key (dbk_...) ou ADMIN_TOKEN","scheme":"bearer","type":"http"}}},"info":{"description":"Armazenamento de objetos estilo Cloudflare R2, com os bytes criptografados na sua conta Google Drive.","title":"drive-backup \u2014 Object Storage API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/keys":{"get":{"responses":{"200":{"description":"lista de chaves"}},"security":[{"bearerAuth":[]}],"summary":"Lista API keys (admin)"},"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"buckets":{"description":"['*'] ou allowlist","items":{"type":"string"},"type":"array"},"expires_in":{"description":"segundos at\u00e9 expirar","type":"integer"},"name":{"type":"string"},"scopes":{"items":{"enum":["read","write","delete","admin"],"type":"string"},"type":"array"}},"type":"object"}}}},"responses":{"201":{"description":"chave criada (com secret)"}},"security":[{"bearerAuth":[]}],"summary":"Cria API key (admin) \u2014 retorna o segredo 1x"}},"/api/keys/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"apagada"}},"security":[{"bearerAuth":[]}],"summary":"Apaga chave (admin)"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"chave"}},"security":[{"bearerAuth":[]}],"summary":"Detalhe da chave (admin)"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"atualizada"}},"security":[{"bearerAuth":[]}],"summary":"Atualiza chave (admin) \u2014 scopes/buckets/name/revoked"}},"/api/links":{"get":{"responses":{"200":{"description":"links"}},"security":[{"bearerAuth":[]}],"summary":"Lista links p\u00fablicos ativos (admin)"},"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"bucket":{"type":"string"},"expires_in":{"description":"segundos at\u00e9 expirar; omita p/ permanente","type":"integer"},"key":{"type":"string"}},"required":["bucket","key"],"type":"object"}}}},"responses":{"201":{"description":"link criado (token + url /s/..)"}},"security":[{"bearerAuth":[]}],"summary":"Cria link p\u00fablico de download (permanente ou com prazo)"}},"/api/links/{token}":{"delete":{"parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"revogado"}},"security":[{"bearerAuth":[]}],"summary":"Revoga um link p\u00fablico (admin)"}},"/api/presign":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"bucket":{"type":"string"},"expires_in":{"type":"integer"},"key":{"type":"string"},"method":{"enum":["GET","PUT"],"type":"string"}},"required":["bucket","key"],"type":"object"}}}},"responses":{"200":{"description":"url + expires_at"}},"security":[{"bearerAuth":[]}],"summary":"Gera URL pr\u00e9-assinada (GET/PUT)"}},"/api/whoami":{"get":{"responses":{"200":{"description":"principal"}},"security":[{"bearerAuth":[]}],"summary":"Quem sou eu"}},"/r2/_about":{"get":{"responses":{"200":{"description":"por conta + total"}},"security":[{"bearerAuth":[]}],"summary":"Uso de armazenamento"}},"/r2/buckets":{"get":{"responses":{"200":{"description":"buckets"}},"security":[{"bearerAuth":[]}],"summary":"Lista buckets"}},"/r2/{bucket}":{"delete":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"apagado"}},"security":[{"bearerAuth":[]}],"summary":"Apaga bucket + conte\u00fado"},"get":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"query","name":"prefix","required":false,"schema":{"type":"string"}},{"in":"query","name":"recursive","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"in":"query","name":"stats","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"objetos paginados"}},"security":[{"bearerAuth":[]}],"summary":"Lista objetos (ou ?stats=1)"},"head":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"existe"},"404":{"description":"n\u00e3o existe"}},"security":[{"bearerAuth":[]}],"summary":"Bucket existe?"},"post":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"deletados/erros"}},"security":[{"bearerAuth":[]}],"summary":"Bulk delete {keys:[...]}"},"put":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"criado"}},"security":[{"bearerAuth":[]}],"summary":"Cria bucket"}},"/r2/{bucket}/{key}":{"delete":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"apagado"}},"security":[{"bearerAuth":[]}],"summary":"Apaga objeto"},"get":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}},{"in":"query","name":"inline","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"bytes"}},"security":[{"bearerAuth":[]}],"summary":"Download (?inline=1 preview; ?exp=&sig= pr\u00e9-assinado)"},"head":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"headers"}},"security":[{"bearerAuth":[]}],"summary":"Metadados"},"post":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}},{"in":"query","name":"copyFrom","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"copiado"}},"security":[{"bearerAuth":[]}],"summary":"Copy server-side (?copyFrom=bucket/key)"},"put":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}}},"responses":{"201":{"description":"enviado"}},"security":[{"bearerAuth":[]}],"summary":"Upload (corpo = bytes)"}},"/s/{token}":{"get":{"parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}},{"in":"query","name":"inline","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"bytes do arquivo"},"404":{"description":"link inv\u00e1lido/expirado"}},"security":[],"summary":"DOWNLOAD DIRETO p\u00fablico (sem auth; ?inline=1 = preview)"}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"http://0.0.0.0:8787"}]}
