Known differences

Google Drive

A Google Drive with Docs and Sheets that answers Drive v2 and v3, Docs v1, Sheets v4 and uploads for Google's client libraries, plus Drive's MCP paths.

Vendor reference: https://developers.google.com/drive/api/reference/rest/v3 ↗. Machine-readable: compat/google-drive.json.

Surfaces

KindPathNotes
REST/drive/v3files, permissions, comments, revisions, changes and watch channels; Drive v2 reads under /drive/v2
REST/upload/drive/v3simple, multipart and resumable uploads
REST/v1/documentsGoogle Docs v1
REST/v4/spreadsheetsGoogle Sheets v4
OAuth/tokenOAuth client credentials with Google-style scopes
MCP/mcpalso at /mcp/v1, the path Google's Drive MCP server publishes

API versions: Drive v2 (reads), Drive v3, Docs v1, Sheets v4

Supported

Not supported

Known differences and test guidance

ScenarioDifference from Google DriveIn your tests
Sheets valuesValues are stored verbatim; formulas are not evaluated and FORMATTED_VALUE returns the stored value.Do not assert on computed cells or number formatting.
RevisionsEach content version is listed, but only the head revision's bytes are kept.Do not download an older revision's content and compare it.
Sharing and permissionsPermissions are recorded and returned but not enforced per grantee; every token sees every file.Do not use the replica to prove that a user cannot read a file.
Scopes with an opaque tokenScope checks only apply to IdP-signed tokens that carry a scope claim; an opaque bearer in open mode passes every request.Request a signed token with a read-only scope from /token to test refusals.
Imported binary documentsUploading a .doc, .odt or .xlsx as a Google Doc creates the Doc with empty text, so exporting it returns an empty body.Do not assert on text extracted from an imported Office file.
Watch notificationsDelivery is in-process with three retries on 5xx; a notification is lost if your consumer is down for the whole backoff window, and channels do not survive a restart.Re-read the changes feed after downtime rather than relying on every notification.
QuotasNo quota is enforced unless injected, and the injected status cannot be chosen per quota family.Inject throttle or quota_limit to test backoff; do not test per-family quota handling.

Fault injection

KeyWhat the client sees
throttle429 userRateLimitExceeded in Google's error envelope, with Retry-After
fail_nextThe next N calls fail as throttle does, then clear
quota_limit429 quotaExceeded in Google's error envelope
error_rate500 internalError for the given fraction of calls
latency_msFixed added latency on every data-plane request

Applies to every system