Skip to main content
Four read endpoints and one action. Each needs its own consent scope, and each returns only what the user approved. All of them accept a UUID user id in the path and return HTTP 200 on success with 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
Networks are 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:
Not provisioned:
The response is a discriminated union on 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.
This GET never starts provisioning. If a user has no receiving account, the user has to complete the deposit-details flow inside Glide. Polling this endpoint will not create one.
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 by updated_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.
This is an incremental view, not a frozen snapshot. Rows can change while you page. Overlap your last watermark by a safe margin and deduplicate on (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. 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.