Authoritative Tutorial: Query Do1QQ User API Field Reference
What Problem This API Solves
The Do1QQ "Query Users" API pulls user lists from an enterprise organization structure. Typical use cases include account linkage between CRM and collaboration platforms, organization comparison, directory synchronization, and filtering personnel by department. Across multiple customer projects integrating Xiaoman OKKICRM with Do1QQ, this API is the first stop for user master data sync and is configured as a query-only strategy.
API Capability Overview
- Endpoint:
/plus/cgi-bin/open/users(Query user list) - Authentication: Enterprise OpenAPI credentials, typically via access_token or app-level signature issued by the Do1QQ open platform
- Method: HTTP GET (POST supported in some scenarios)
- Key Request Parameters:
departmentId: Root department IDs, comma-separated, scopes the querypage: Page number, default 1pageSize: Items per page, default 100
- Response: JSON array, each element is a user object (see field table below)
- Pagination: Traditional
page+pageSize; incremental sync is typically done client-side using anupdateTimecursor - Rate Limiting: The open platform enforces call frequency limits; batch pulls require throttling
Typical Field Mapping
| Field | Type | Meaning | Field Notes |
|---|---|---|---|
| id | string | Unique user primary key in Do1QQ | Strongly recommended as cross-system join key, more stable than account |
| account | string | Login account (mobile/email) | Usable for CRM matching but may be recycled after offboarding, avoid as primary key |
| name | string | Real name or nickname | Display only, commonly mapped as user_name |
| gender | string | Gender | Often blank, handle null defensively |
| telephone | string | Mobile number | Privacy-sensitive, apply masking policy before persisting to CRM |
| defaultDepartmentId | string | Default department primary key | Pair with defaultDepartmentName for org comparison |
| defaultDepartmentName | string | Default department name | Not retroactively updated after rename, avoid for joins |
| wxUserId | string | Linked WeCom/WeChat user ID | Key for WeCom integration |
| extend | object | Custom extension attributes | Structure varies by tenant, prefer pass-through + on-demand extraction |
How to Configure on Qeasy Cloud
On the Qeasy Data Integration Platform, this kind of query API is usually wrapped as a "Query Adapter":
- Adapter Selection: Pick "Do1QQ / User Query" adapter, fill in app credentials and the department scope (
departmentIdaccepts comma-separated values) - Pagination Setup: In Qeasy Cloud's pagination panel, set
pageSizeto 100 (the platform's allowed maximum) to minimize request count - Field Mapper: Qeasy Cloud's field mapper automatically normalizes
id,account,nameinto generic concepts (user_id,user_account,user_name);extendcan be expanded and read by JSONPath - Target Side: Target is configured as "Empty Write", marking this as a query-only strategy whose result is consumed by downstream user matching or caching
- Scheduling: Combine with
updateTimecursor; Qeasy Cloud's "Incremental Pull" switch helps avoid redundant full loads
Cross-Project Practical Points
- Prefer
idoveraccountas the join key: Across multiple customer projects,account(mobile/email) carries recycling risk whileidstays stable within a tenant. - Pass a few
departmentIds, not all: Passing 1–3 core root departments is usually enough; too many slows responses and triggers rate limits. - Do not hard-code
extendfields: Extension structure varies wildly across tenants; the safe approach is "pass-through to target, then parse on demand". - Incremental sync must use
updateTime, notid:idis not guaranteed monotonic, so id-based incremental will miss records. - Mask
telephoneandwxUserIdtogether: Before writing into CRM, apply masking or hashing per the customer's compliance policy. - Validate consistency after paging finishes: The last page is often partial; configure
id-based deduplication in Qeasy Cloud's "Tail Dedup" switch to prevent boundary data loss.
Pitfall Recap
- Empty
departmentIdreturns everyone: OmittingdepartmentIdentirely causes some API versions to return all users in the org, leading to data explosion. Always pass values explicitly, even if only one root department. pageSizeoverflow silently truncates: Do1QQ caps items per response; exceeding the limit silently truncates instead of erroring, which can mislead callers into thinking the load is complete. Confirm the documented cap; Qeasy Cloud's default 100 is usually safe.extendstrict-typing failures: JSON parsers with strict typing rejectnullor array values in object fields, failing the whole batch. Declareextendas weakly typed or pass it as a string in Qeasy Cloud.updateTimetimezone drift: API timestamps without timezone cause duplicates or gaps across regions. Parse as UTC at the integration layer; localize at the presentation layer.- Missing backoff causes task interruption: High-frequency full loads easily hit rate limits. Enable "Retry + Exponential Backoff" in Qeasy Cloud and stagger schedules.
When to Use This API
Suitable for scenarios that need to pull users from Do1QQ's org structure for sync, matching, or permission mapping—especially as a foundational data source in CRM, HR, and WeCom integrated stacks. Not suitable when real-time latency under 1 minute is required, or when user changes must be written back to Do1QQ; for those cases, use the "User Change Webhook" or dedicated write APIs instead.