uipath-admin
UiPath Admin via `uip admin` — Identity Server (users, groups, robot accounts, external OAuth2 apps, secrets), Authorization (custom roles, role assignments, permission catalog, effective-access via check-access PDP), OMS (org read/update, tenant lifecycle, service provisioning, regions, async operation polling), IP Restriction (allowlist, enforcement switch, bypass rules, lockout safety), Audit (event sources, paginated queries, ZIP exports — login history, compliance dumps, who-did-what-when-where on a resource). For Orchestrator-specific roles/permissions/folders/jobs→uipath-platform. For RPA workflows→uipath-rpa.
Skill body
UiPath Admin
Preview — Under active development. Command coverage will expand.
Administrative operations on UiPath via uip admin — Identity Server, Authorization, OMS, IP Restriction, Audit. Per-area workflows, command references, and procedures are in the linked files below — this file is the entry contract.
When to Use This Skill
Identity
- Manage identity users — list, create, invite, update, delete
- Manage groups — CRUD + add/remove members
- Manage robot accounts — create, update, delete unattended robot identities
- Manage external apps — OAuth2 clients, secrets, federated credentials
- Manage personal access tokens (PATs) — create, list, revoke, regenerate
- Configure SMTP — get, update, test, delete email settings
- Browse OAuth2 scopes — list available scopes for external apps and PATs
- Onboard human user — invite, assign to groups
- Onboard robot account — create account, assign to groups
Authz
- Manage custom roles — CRUD on Authorization service role definitions (scope shapes:
Organization,TenantGlobal,Tenant,Project) - Manage role assignments — assign roles to users/groups/robot accounts at
Organization,Tenant,TenantGlobal,Project,Folder, orAppscope - List permission definitions — read-only catalog of permissions across services
- Check effective access — compute what a principal can actually do at a given scope (Policy Decision Point)
- Grant permission(s) to a principal — ad-hoc “grant me X” / “give
Y, Z" requests resolved via the scope/service intersection flow
OMS
- Inspect / update the current organization —
uip admin organizations(read + update only; no CLI create/delete) - Manage tenant lifecycle — create, enable, disable, delete tenants in the caller’s org
- Provision org-level or tenant-level services —
services list,list-available,add,enable,disable,remove - Poll async OMS operations —
tenantsmutations returnoperationId; poll viaorganizations operation get <id>(the canonical poll endpoint) - List available regions — discover provisioning regions before
tenants create
IP Restriction
- Manage IP allowlisting — add / update / delete CIDR entries that gate inbound access
- Toggle IP-restriction enforcement — turn the org-wide allowlist switch on or off (with lockout safety)
- Manage bypass rules — URL-pattern exceptions to IP allowlisting
- Look up the caller’s public IP — sanity check before enabling enforcement
Audit
Activate on both explicit audit requests and natural-language investigation intent — users rarely say “audit events” by name.
- Explicit —
uip admin auditcommands; list sources / targets / types; query, filter, paginate, or export events; CSV/ZIP dump of audit history for a window. - Query audit events — list event sources, filter events by source / target / type / user / status / time window at org or tenant scope
- Export audit events — chunked ZIP download from the long-term store, per UTC day, with atomic abort on any chunk failure
- Membership / license phrasings — “who joined / left the organization”, “who was made an admin”, “license changes”, “cross-tenant audit”
- Sign-in / authentication phrasings — “failed/successful logins”, “login history for user X”, “who’s been signing in”
- Tenant-activity phrasings — “what happened on tenant X”, “asset/queue/folder edits”, “queue items processed”, “job failures”, “Action Center task changes”, “Apps / AgentHub / Document Understanding / Integration Service / Test Manager activity”
- Cross-scope phrasings — “everything everywhere” (run the flow once per scope and present combined)
- Investigation intent (full-sentence form) — “Who deleted the X folder last Tuesday?”, “Show me failed logins for user Y this month.”, “What changed on tenant Z between Jan 1 and Feb 1?”, “Give me the audit log for the last 30 days.”, “Was the API key rotated by someone in our org?”, “Export everything for compliance for Q4.”
Scope routing (which phrasing →
orgvstenant, and why) lives in audit-workflow-guide.md → Audit scope disambiguation. Critical Rule 23 governs the stop-and-ask requirement when scope is ambiguous.
Critical Rules
Each rule is the agent contract. Per-area detail is in the linked reference files.
Universal
- Route Orchestrator-specific role/permission requests to
uip or roles(uipath-platformskill).uip admin authorizationdoes NOT own Orchestrator’s role catalog. - Verify login first.
uip login status --output json. If not logged in:uip login. Org id is resolved from the active session. - Use
--output jsonon every command. Parse programmatically; present conversationally. - Stop on error. Show the error verbatim. Never retry auth failures — ask the user to
uip login. - Resolve every named principal before high-risk ops. Any command that touches a named user / group / robot account / external app —
roles assignments create/delete,users delete,groups delete,groups members add/revoke,robot-accounts delete,external-apps delete,external-apps generate-secret— MUST first search the directory and echoPrincipal: <displayName> (<userName>) — <id>back before the mutation runs. Zero matches → stop and ask; never fall back to the current login user. Multiple matches → numbered list, wait for a digit. Procedure: role-assignment-management.md → Resolving Principal IDs.
Identity
- Discover before creating.
listbeforecreateto avoid duplicates (robot accounts, groups, external apps —users inviteexcepted). - Secrets shown only once on external-app create and
generate-secret— warn the user to save immediately. - External apps require scopes at creation —
--app-scopeor--user-scopeis required (e.g.,--app-scope "OR.Folders"). - Group membership uses user IDs. Resolve via
users listper Rule 5, thengroups members add/revoke. - Confirm before delete on users / groups / robot accounts / external apps — after resolving the named target per Rule 5.
Authz
- Built-in roles are read-only. Only
Customroles can be created / updated / deleted. CLI also rejects authoring against service-managed and platform-level services. Service lists: role-management.md → Services That Manage Their Own Roles. roles create/roles updateare PUT-style upserts. Body is assembled from inline flags +--file ./actions.json. Alwaysroles getfirst before updating — omitted flags overwrite that field.--serviceinfers scope (e.g.,--service studio→Tenant;--service apps→Organization). Combine with--scopeonly to override.- Listing works for every service; authoring is what’s blocked.
roles list --service <svc>androles assignments list --service <svc>accept every service. For effective access on a principal usecheck-access(PDP). - Scope vocab differs across verbs.
roles create --scope:Organization|TenantGlobal|Tenant|Project.roles assignments create --scope: those +Folder|App.roles assignments list --scope: excludesTenantGlobal.check-access --scope: onlyTenant|Folder. roles assignments create/deleteMUST resolve the principal first per Rule 5 —--identity-idis a raw UUID the CLI does not name-check.roles assignments createMUST match the role’sownerServiceNameto the scope-path service segment.CentralizedAccess→ no service segment (/or/tenant/<tid>); anything else → path must includelowercase(ownerServiceName). Display-name mapping (e.g.,Reinfer→ “IXP”) + full procedure: role-assignment-management.md → Validate Role’s Owning Service.
OMS
- Async lifecycle: auto-poll, then hand off.
tenants create/update/delete/enable/disablereturnoperationId. Auto-pollorganizations operation get <OP_ID>3× at 5 s; on terminal status stop and report; still in-progress after 3 polls → numbered menu, never indefinite loop.organizations createandorganizations deleteare not exposed by the CLI — Portal / support flow only. Procedure: organization-management.md → Polling procedure. tenants deleteis soft-only. No hard-delete flag; restoration is via support.- Tenant commands default to the login tenant. Always pass an explicit
<TENANT_ID>for destructive ops (tenants delete,tenants disable,tenants services remove). - Resolve region before tenant create.
--regionis required ontenants create— runorganizations regions listfirst. Tenant service catalog is region-aware. services disable/removemay no-op despite Success on certain services. Always re-list after mutating. Gap list: tenants-commands.md → Concepts.
Audit
- Disambiguate
orgvstenantscope before querying. If the prompt is vague AND no prior turn fixed the scope, stop and ask once — never silently default totenant. Routing table (user-phrasing → scope + why it lives where) and investigation playbooks: audit-workflow-guide.md → Audit scope disambiguation. audit <scope> eventsreturns an object, not a bare array. Shape is{auditEvents, next, previous}. Do not indexData[0]; readData.auditEvents[]. Cursor semantics are chronological:next= newer events,previous= older events. The default newest-backward walk followsprevious.--limitpaginates internally — never loop on--from-date/--to-dateto “paginate”. The server clampsmaxCountto[10, 200]per request; when the user wants more than 200, the CLI fetchesceil(N/200)pages under the hood. Pass--limit 500(or larger) — do NOT re-implement pagination in the agent.- Discover via
audit <scope> sourcesfirst — never invent source / target / type GUIDs. The catalog response gives the GUIDs you pass toevents --source / --target / --type. - Bound the time window, ISO 8601 in UTC. Don’t call
audit <scope> eventswithout--from-dateand--to-dateon a noisy tenant. Accepted formats: date-only (2026-04-01) or with time (2026-04-01T14:30:00Z).--to-dateis inclusive of the exact instant — to capture a full final day, pass the start of the next day orT23:59:59.999Z. --tenant-idis silently ignored onorg-scoped audit commands. If you find yourself reaching for it onaudit org events, switch toaudit tenantinstead.- On 401 from audit, do NOT retry. The token is missing the
Audit.Readscope; tell the user touip logout && uip login. audit <scope> exportwrites a ZIP from the long-term store.--from-date,--to-date, and--output-fileare all required; dates per Rule 27. Never overwrite a path the user did not explicitly approve — surface the resolved--output-fileand confirm before running.
IP Restriction
enforcement enableis lockout-sensitive — prompt + impact statement required. Runip-restriction my-ipand verify the caller’s IP is covered by an entry inip-ranges list. Then prompt the user with the impact before flipping: “After enabling IP restriction, any caller (Portal, CLI, robot, external app) whose source IP is not inip-ranges listwill be blocked from this org. Misconfiguration locks you out and requires platform-side recovery. Proceed?”--confirmis required;ip-ranges deletewhile enforcement is on also requires--confirm. Procedure: enforcement-management.md.- Recovery from IP lockout requires platform-side action. No CLI bypass — either access from an in-allowlist IP and
enforcement disable, or use the Portal recovery flow. - “APMS” is internal — never expose to the user. “APMS” (Access Policy Management Service) is the platform’s internal name for IP Restriction. Use “IP Restriction” in every user-facing surface.
What NOT to Do
- Never delete built-in groups.
type: "BuiltIn"groups cannot be deleted. Only custom groups. - Never pass IDs as flags. Resource IDs and names are positional arguments:
groups members add <GROUP_ID> --user-ids ..., NOT--group-id <GROUP_ID>. Same for allget,update,delete,createsubcommands. - Do NOT assume audit
eventsreturns a bare array. It’s{auditEvents, next, previous}. - Do NOT loop on
--from-date/--to-dateto “paginate”. Bump--limitand the CLI handles cursor pagination internally. - Do NOT silently default audit scope to
tenantororgwhen the prompt is ambiguous. Ask once, then proceed. - Do NOT invent audit source/target/type GUIDs. Always discover via
sourcesfirst. - Do NOT call audit
eventswith no time bound on a noisy tenant — default to a bounded window. - Do NOT pass
--tenant-idtoorg-scoped audit commands — it’s silently ignored. - Do NOT retry on 401 auth errors. The token is missing the required scope (
Audit.Readfor audit). Tell the user touip logout && uip login. - Do NOT call
roles updatewith only the flag you want to change. Re-fetch first; the upsert body overwrites omitted fields (Rule 12). - Do NOT present authz results without provenance — role name,
scopeType,ownerServiceName, tenant-binding (names not UUIDs). Detail: authorization-commands.md → Provenance contract. - Do NOT conflate provisioned services with the available catalog.
services listreturns provisioned with status;services list-availableis the catalog. Present them as separate sections. - Do NOT run an OMS mutation without naming the target. Echo org name / tenant name + UUID / service type + region before running.
Quick Start
One row per common goal. Per-area workflows are in the reference files.
| Goal | Entry command(s) |
|---|---|
| Invite a user → assign to group | user-management.md + group-management.md |
| Create a custom role | uip admin authorization roles create --scope <Organization\|TenantGlobal\|Tenant\|Project> --name "<NAME>" --file ./actions.json --output json (actions.json = ["STUDIO.X.Y", ...]) |
| Grant permission(s) to a principal (“grant me X”, “give alice Y, Z”) | grant-permissions.md — intersection-and-menu flow |
| Assign a role to a principal | (1) Resolve principal per Rule 5. (2) roles get <ROLE_ID> → echo ownerServiceName + verify scope-path service segment matches (Rule 17). (3) roles assignments create --role-id <ROLE_ID> --identity-id <ID> --identity-type <User\|Group\|Robot\|ExternalApplication> --output json |
| See what a principal can do | uip admin authorization check-access <USER_GUID_OR_EMAIL> --scope <Tenant\|Folder> --output json (Rule 15) |
| Create a tenant | tenant-management.md — region + default-services resolution, file-body shape, operation polling (Rule 18) |
| Add a tenant service | tenants services list-available --region <R> → tenants services add --tenant-id <TID> --service <SVC> (verify post-state per Rule 22) |
| Enable IP allowlist enforcement | ip-restriction my-ip → verify covered by ip-ranges list → ip-restriction enforcement enable --confirm (Rule 31) |
| Query audit events / export | audit-workflow-guide.md — scope disambiguation + 4 investigation playbooks (who-did-X, login history, date-range dump, overview) |
Key Concepts
Organization hierarchy
Organization (org)
└── Partition (= org in most cases)
├── Users ← human identities
├── Groups ← role containers (BuiltIn + Custom)
├── Robot Accounts ← unattended automation identities
└── External Apps ← OAuth2 clients (Client ID + Secret)
Robot accounts vs external apps
| Concept | Purpose | Managed by |
|---|---|---|
| Robot account | Identity — who the robot is | Identity Server (uip admin) |
| Robot credentials | Per-robot Client ID + Secret for machine auth | Orchestrator (machine connection) |
| External app | OAuth2 client for API integrations, CI/CD | Identity Server (uip admin) |
Robot credentials are provisioned automatically by Orchestrator on machine connect — not by creating external apps.
Output Etiquette
What to surface after each verb. Per-area detail in the reference files; this is the contract.
| Area | Always surface |
|---|---|
| Identity mutations | Result + new resource id; for external-app create / generate-secret, highlight the secret + warn to save; offer a next step (assign to group, generate another secret, etc.). |
| Authz reads + mutations | Provenance: role name, scopeType, ownerServiceName (read directly from response — translate to display name per Rule 17, e.g., Reinfer→”IXP”), tenant binding (resolve UUID → name). check-access: label each row as direct or inherited from <Group name> by inspecting the nested roleAssignments[].securityPrincipalType. Full contract: authorization-commands.md → Provenance contract. |
| OMS reads | Separate provisioned (with status) from available catalog (no status). Lead with Organization: <ORG_NAME> (and tenant name + UUID + lifecycle status for tenant reads). |
| OMS mutations | Echo the resolved target before running (Anti-pattern 13). Async: auto-poll 3× at 5 s, then numbered menu (Rule 18). Sync services: re-list to verify post-state (Rule 22). |
| Audit queries | Disambiguate org vs tenant first (Rule 23). Discover via sources (Rule 26). Bound the window (Rule 27). Operation summary (count, scope, time window, filters, cursor state). Wait for the user’s next-step choice; do not chain mutations. Investigation playbooks: audit-workflow-guide.md. |
| IP Restriction mutations | Before enforcement enable: state the impact, require explicit user confirmation (Rule 31). After: confirm caller’s IP is still covered (re-run my-ip + ip-ranges list). Never use the internal name “APMS” in user-facing output. |
For per-area full checklists, follow the table’s inline links: Identity → identity-commands.md; Authz → authorization-commands.md; Audit → audit-workflow-guide.md.
Task Navigation
| I need to… | Read first |
|---|---|
| Identity CLI reference | references/identity-commands.md |
| Manage users (list / create / invite / update / delete) | references/user-management.md |
| Manage groups (CRUD + membership) | references/group-management.md |
| Manage robot accounts | references/robot-account-management.md |
| Manage external apps (OAuth2 + secrets + federated credentials) | references/external-app-management.md |
| Manage personal access tokens (PATs) | references/pat-management.md |
| Configure SMTP email settings | references/smtp-management.md |
| Authorization CLI reference | references/authorization/authorization-commands.md |
| Manage custom roles | references/authorization/role-management.md |
| Grant permission(s) to a principal — scope/service intersection flow | references/authorization/grant-permissions.md |
| Manage role assignments (incl. role-service vs scope-path validation, Rule 17) | references/authorization/role-assignment-management.md |
| List permission definitions | references/authorization/permission-catalog.md |
| Check effective access for a principal | references/authorization/check-access.md |
| Organizations CLI reference | references/organizations-commands.md |
| Tenants CLI reference | references/tenants-commands.md |
| Manage the organization (read + update, polling, regions, org services read-only) | references/organization-management.md |
| Manage tenants (CRUD, enable/disable, tenant services) | references/tenant-management.md |
| IP-restriction CLI reference | references/ip-restriction/ip-restriction-commands.md |
| Manage IP allowlist entries | references/ip-restriction/ip-range-management.md |
Toggle enforcement (+ my-ip safety check) |
references/ip-restriction/enforcement-management.md |
| Manage bypass rules | references/ip-restriction/bypass-rule-management.md |
| Audit CLI reference | references/audit-commands.md |
| Audit investigation workflows (scope disambiguation, who-did-X, login history, date-range dump, overview) | references/audit-workflow-guide.md |
| Paginate audit events beyond 200 | references/audit-commands.md + Rule 25 |