Cache-Control: no-store and an X-Request-Id.
Every read is limited to 300 requests per minute per partner, except the hosted verification link, which is 10 per minute.
Verification status
GET /api/partner/users/:id/kyc with scope kyc:read
With no record on file,
status is not_started and both provider and updated_at are null.
You never receive documents, rejection reasons, provider tokens or verification data blobs. This endpoint reads the state that Glide’s own verification workflows maintain, so it agrees with what the user sees in Glide.
Wallets
GET /api/partner/users/:id/wallets with scope wallet:read
evm and solana. Addresses are the authoritative user columns, refreshed when the user logs in. A user who has not claimed their account normally has an empty array, so treat an empty list as “not ready yet” rather than an error.
You never receive private keys, signing capability, smart accounts or entity vaults.
USD receiving account
GET /api/partner/users/:id/us-account with scope us_account:read
Provisioned:
status, so branch on it before reading account. Account and routing numbers are strings, never numbers. bank_name, account_holder_name, bank_address, swift_code and reference may be null.
This reads only the user’s active personal USD receiving account, through an explicit allowlist of wire detail fields. Raw provider payload fields are excluded. A missing account or routing number reports not_provisioned.
These are the user’s personal receiving details from the deposit flow. Personal bank deposits and the partner-funded Glide balance are distinct funding paths. They are not funding instructions for your treasury. See Payouts.
Transfers
GET /api/partner/users/:id/transfers with scope transfers:read
Returns the user’s personal ledger: deposits, withdrawals, transfers and other recorded personal movements. Rows belonging to a business are excluded even when the user id matches.
Query parameters
amount_cents is an exact string-encoded minor-unit integer, selected as text so no precision is lost in JavaScript. Parse it as a big integer or a decimal type, never as a float. status, currency and completed_at can be null on older rows. Raw metadata, beneficiary details and compliance or risk fields are not exposed.
Paging and polling
Results sort byupdated_at ascending, then id ascending, at full timestamp precision. Preserve your since value while paging, follow next_cursor until it comes back null, and only then advance your watermark.
(id, updated_at) before you apply anything. Doing both makes a repeated row harmless.
An invalid or expired cursor returns 400 invalid_cursor. Start the page again from your watermark rather than trying to repair the cursor.
Request a hosted verification link
POST /api/partner/kyc/:id/link with scope kyc:read, limited to 10 per minute
Send no body.
Glide retains the provider and customer mapping and handles the callbacks, so you get status changes through
kyc.status_changed rather than by polling the provider. Requests for the same user are serialized, so two concurrent calls will not create two verifications.
The consent copy for kyc:read explicitly includes permission to request this link, so no extra consent step is needed.
Failure cases worth handling: a user who already has verification with a different provider returns 409 kyc_provider_conflict, because partners cannot silently switch providers. Suspended or closed users cannot start verification. Sandbox placeholder URLs are rejected with 503 provider_unavailable.
Which user is ready for what
Do not gate your own payout on verification. A user can hold a Glide USD balance long before they finish verifying, and Glide surfaces the verification prompt when they try to cash out.