# PDS Endpoint Comparison: pds.js vs atproto/packages/pds Comparison of endpoints and parameters between this implementation and the official AT Protocol PDS. --- ## Endpoints Missing from pds.js ### com.atproto.admin.* (entire namespace missing) | Endpoint | Params | |----------|--------| | deleteAccount | did | | disableAccountInvites | account, note | | disableInviteCodes | accounts, codes | | enableAccountInvites | account, note | | getAccountInfo | did | | getAccountInfos | dids | | getInviteCodes | cursor, limit, sort | | getSubjectStatus | blob, did, uri | | searchAccounts | cursor, email, limit | | sendEmail | comment, content, recipientDid, senderDid, subject | | updateAccountEmail | account, email | | updateAccountHandle | did, handle | | updateAccountPassword | did, password | | updateAccountSigningKey | did, signingKey | | updateSubjectStatus | deactivated, subject, takedown | ### com.atproto.identity.* (mostly missing) | Endpoint | Params | Notes | |----------|--------|-------| | getRecommendedDidCredentials | (none) | | | refreshIdentity | identifier | | | requestPlcOperationSignature | (none) | | | resolveDid | did | | | resolveIdentity | identifier | | | signPlcOperation | alsoKnownAs, rotationKeys, services, token, verificationMethods | | | submitPlcOperation | operation | | | updateHandle | handle | | *pds.js only implements: resolveHandle* ### com.atproto.server.* (many missing) | Endpoint | Params | |----------|--------| | activateAccount | (none) | | checkAccountStatus | (none) | | confirmEmail | email, token | | createAccount | did, email, handle, inviteCode, password, plcOp, recoveryKey, verificationCode, verificationPhone | | createAppPassword | name, privileged | | createInviteCode | forAccount, useCount | | createInviteCodes | codeCount, forAccounts, useCount | | deactivateAccount | deleteAfter | | deleteAccount | did, password, token | | deleteSession | (none) | | getAccountInviteCodes | createAvailable, includeUsed | | getServiceAuth | aud, exp, lxm | | listAppPasswords | (none) | | requestAccountDelete | (none) | | requestEmailConfirmation | (none) | | requestEmailUpdate | (none) | | requestPasswordReset | email | | reserveSigningKey | did | | resetPassword | password, token | | revokeAppPassword | name | | updateEmail | email, emailAuthFactor, token | *pds.js implements: createSession, getSession, refreshSession, describeServer* ### com.atproto.sync.* (some missing) | Endpoint | Params | |----------|--------| | getBlocks | cids, did | | getHostStatus | hostname | | listHosts | cursor, limit | | listReposByCollection | collection, cursor, limit | | notifyOfUpdate | hostname | | requestCrawl | hostname | *pds.js implements: listRepos, getLatestCommit, getRepoStatus, getRepo, getRecord, getBlob, listBlobs, subscribeRepos* ### com.atproto.repo.* (some missing) | Endpoint | Params | |----------|--------| | importRepo | (binary) | | listMissingBlobs | cursor, limit | *pds.js implements: createRecord, deleteRecord, putRecord, applyWrites, getRecord, describeRepo, listRecords, uploadBlob* ### com.atproto.moderation.* | Endpoint | Params | |----------|--------| | createReport | modTool, reason, reasonType, subject | ### com.atproto.temp.* (entire namespace missing) | Endpoint | Params | |----------|--------| | addReservedHandle | handle | | checkHandleAvailability | birthDate, email, handle | | checkSignupQueue | (none) | | dereferenceScope | scope | | fetchLabels | limit, since | | requestPhoneVerification | phoneNumber | | revokeAccountCredentials | account | --- ## Missing Parameters in Shared Endpoints Endpoints that exist in both implementations, but pds.js is missing parameters: | Endpoint | pds.js has | Missing from pds.js | |----------|------------|---------------------| | repo.createRecord | collection, record, rkey | **repo**, **validate**, swapCommit | | repo.deleteRecord | collection, rkey | **repo**, swapCommit, swapRecord | | repo.putRecord | collection, rkey, record | **repo**, **validate**, swapCommit, swapRecord | | repo.applyWrites | writes | **repo**, validate, swapCommit | | sync.getRepo | did | since | | sync.listBlobs | did, cursor, limit | since | | sync.listRepos | (none) | cursor, limit | | server.createSession | identifier, password | allowTakendown, authFactorToken | **Bold** = likely important for compatibility --- ## app.bsky.* Coverage Both implementations handle app.bsky.* the same way: | Category | Endpoints | Notes | |----------|-----------|-------| | Native (stored in PDS) | actor.getPreferences, actor.putPreferences | Both implementations | | Proxied to AppView | ~87 endpoints | feed.*, graph.*, notification.*, etc. | --- ## Extra in pds.js (not in atproto spec) Custom endpoints specific to this implementation: | Endpoint | Purpose | |----------|---------| | `POST /init` | Initialize PDS with DID/keys | | `GET /status` | Health check | | `POST /register-did` | Register a DID | | `GET /get-registered-dids` | List registered DIDs | | `POST /register-handle` | Register a handle | | `GET /resolve-handle` | Resolve handle (non-XRPC path) | | `POST /forward-event` | Forward sync events to other instances | | `GET /repo-info` | Get repository info | | `GET /oauth-public-key` | Get OAuth public key | | `POST /check-dpop-jti` | DPoP replay protection | ### OAuth 2.0 Stack (full implementation) | Endpoint | Purpose | |----------|---------| | `GET /.well-known/oauth-authorization-server` | OAuth server metadata | | `GET /.well-known/oauth-protected-resource` | Protected resource metadata | | `GET /oauth/jwks` | JSON Web Key Set | | `POST /oauth/par` | Pushed Authorization Request | | `GET/POST /oauth/authorize` | Authorization endpoint | | `POST /oauth/token` | Token endpoint (with DPoP) | | `POST /oauth/revoke` | Token revocation | --- ## Summary | Category | pds.js | atproto PDS | |----------|--------|-------------| | com.atproto.admin.* | 0 | 15 | | com.atproto.identity.* | 1 | 9 | | com.atproto.moderation.* | 0 | 1 | | com.atproto.repo.* | 8 | 10 | | com.atproto.server.* | 4 | 25 | | com.atproto.sync.* | 8 | 14 | | com.atproto.temp.* | 0 | 7 | | app.bsky.* (native) | 2 | 2 | | app.bsky.* (proxied) | ~87 | ~87 | | **Total XRPC (native)** | **23** | **85** | | Custom endpoints | 10 | 0 | | OAuth endpoints | 7 | 7 (via @atproto/oauth-provider) |