# Hold Service XRPC Endpoints This document lists all XRPC endpoints implemented in the Hold service (`pkg/hold/`). ## PDS Endpoints (`pkg/hold/pds/xrpc.go`) ### Public (No Auth Required) | Endpoint | Method | Description | |----------|--------|-------------| | `/xrpc/_health` | GET | Health check | | `/xrpc/com.atproto.server.describeServer` | GET | Server metadata | | `/xrpc/com.atproto.repo.describeRepo` | GET | Repository information | | `/xrpc/com.atproto.repo.getRecord` | GET | Retrieve a single record | | `/xrpc/com.atproto.repo.listRecords` | GET | List records in a collection (paginated) | | `/xrpc/com.atproto.sync.listRepos` | GET | List all repositories | | `/xrpc/com.atproto.sync.getRecord` | GET | Get record as CAR file | | `/xrpc/com.atproto.sync.getRepo` | GET | Full repository as CAR file | | `/xrpc/com.atproto.sync.getRepoStatus` | GET | Repository hosting status | | `/xrpc/com.atproto.sync.subscribeRepos` | GET | WebSocket firehose | | `/xrpc/com.atproto.identity.resolveHandle` | GET | Resolve handle to DID | | `/xrpc/app.bsky.actor.getProfile` | GET | Get actor profile | | `/xrpc/app.bsky.actor.getProfiles` | GET | Get multiple profiles | | `/.well-known/did.json` | GET | DID document | | `/.well-known/atproto-did` | GET | DID for handle resolution | ### Conditional Auth (based on captain.public) | Endpoint | Method | Description | |----------|--------|-------------| | `/xrpc/com.atproto.sync.getBlob` | GET/HEAD | Get blob (routes OCI vs ATProto) | ### Owner/Crew Admin Required | Endpoint | Method | Description | |----------|--------|-------------| | `/xrpc/com.atproto.repo.deleteRecord` | POST | Delete a record | | `/xrpc/com.atproto.repo.uploadBlob` | POST | Upload ATProto blob | ### DPoP Auth Required | Endpoint | Method | Description | |----------|--------|-------------| | `/xrpc/io.atcr.hold.requestCrew` | POST | Request crew membership | --- ## OCI Multipart Upload Endpoints (`pkg/hold/oci/xrpc.go`) All require `blob:write` permission via service token: | Endpoint | Method | Description | |----------|--------|-------------| | `/xrpc/io.atcr.hold.initiateUpload` | POST | Start multipart upload | | `/xrpc/io.atcr.hold.getPartUploadUrl` | POST | Get presigned URL for part | | `/xrpc/io.atcr.hold.uploadPart` | PUT | Direct buffered part upload | | `/xrpc/io.atcr.hold.completeUpload` | POST | Finalize multipart upload | | `/xrpc/io.atcr.hold.abortUpload` | POST | Cancel multipart upload | | `/xrpc/io.atcr.hold.notifyManifest` | POST | Notify manifest push (creates layer records + optional Bluesky post) | --- ## Standard ATProto Endpoints (excluding io.atcr.hold.*) | Endpoint | |----------| | /xrpc/_health | | /xrpc/com.atproto.server.describeServer | | /xrpc/com.atproto.repo.describeRepo | | /xrpc/com.atproto.repo.getRecord | | /xrpc/com.atproto.repo.listRecords | | /xrpc/com.atproto.repo.deleteRecord | | /xrpc/com.atproto.repo.uploadBlob | | /xrpc/com.atproto.sync.listRepos | | /xrpc/com.atproto.sync.getRecord | | /xrpc/com.atproto.sync.getRepo | | /xrpc/com.atproto.sync.getRepoStatus | | /xrpc/com.atproto.sync.getBlob | | /xrpc/com.atproto.sync.subscribeRepos | | /xrpc/com.atproto.identity.resolveHandle | | /xrpc/app.bsky.actor.getProfile | | /xrpc/app.bsky.actor.getProfiles | | /.well-known/did.json | | /.well-known/atproto-did |