{"name":"AveDB","description":"A lightweight bird API backed by Firestore + Firebase Storage.","endpoints":{"GET /getBird":"Pull a random bird, weighted by rarity. Pass ?id=<slug> or ?name=<name> for a specific one.","GET /getBirds":"List the whole catalog. Filter with ?rarity= / ?region= / ?status=.","GET /odds":"Pull probabilities per bird and per rarity tier for /getBird.","GET /packs":"List all admin-curated packs (no birds inline).","GET /packs/:id":"Get an admin-curated pack and its full bird list.","GET /marketplace":"Public user-created packs, each with a preview card bird.","GET /legal":"Content & data agreement users must accept before creating a pack.","GET /health":"Liveness check."},"user":{"note":"Send a Firebase ID token as 'Authorization: Bearer <token>'. Any signed-in user.","POST /my/packs":"Create a pack (requires legalAccepted: true in body).","GET /my/packs":"List your packs with current bird count.","GET /my/packs/:id":"Get a pack and its full bird list.","PUT /my/packs/:id":"Update pack metadata (name, description, size, isPublic, previewBirdId, tier). Publishing (isPublic: true) requires prior admin approval.","DELETE /my/packs/:id":"Delete your pack and all its birds.","POST /my/packs/:id/birds":"Add a bird to your pack.","GET /my/packs/:id/birds/:birdId":"Get a bird in your pack.","PUT /my/packs/:id/birds/:birdId":"Update a bird in your pack.","POST /my/packs/:id/birds/:birdId/image":"Upload a bird image (multipart field 'image').","DELETE /my/packs/:id/birds/:birdId":"Remove a bird from your pack."},"admin":{"note":"Requires an admin or super-admin custom claim on the Firebase ID token.","GET /admin":"Admin web UI (browser).","POST /admin/birds":"Create a bird.","GET /admin/birds/:id":"Fetch a bird by collectionID.","PUT /admin/birds/:id":"Merge-update a bird.","POST /admin/birds/:id/image":"Upload a bird image (multipart field 'image').","DELETE /admin/birds/:id":"Delete a bird (and its image).","POST /admin/packs":"Create a curated pack.","GET /admin/packs":"List all curated packs.","GET /admin/packs/:id":"Get a curated pack and its birds.","PUT /admin/packs/:id":"Merge-update a curated pack.","DELETE /admin/packs/:id":"Delete a curated pack and all its birds.","POST /admin/packs/:id/birds":"Add a bird to a curated pack.","GET /admin/packs/:id/birds/:birdId":"Get a curated pack bird.","PUT /admin/packs/:id/birds/:birdId":"Merge-update a curated pack bird.","POST /admin/packs/:id/birds/:birdId/image":"Upload a curated pack bird image (multipart field 'image').","DELETE /admin/packs/:id/birds/:birdId":"Remove a bird from a curated pack.","GET /admin/userPacks":"List all user-created packs with creator info.","GET /admin/userPacks/:id":"Get any user pack with creator info and birds.","PUT /admin/userPacks/:id/approve":"Approve a pack so the creator can publish it.","PUT /admin/userPacks/:id/reject":"Reject a pack. Pass { reason } in body to explain why."}}