Skip to main content

What is a Unified API?

A unified API provides a single, standardized interface to interact with multiple third-party providers. Instead of learning each provider’s unique API format, authentication scheme, and data model, you write code once, and StackOne handles the differences. What StackOne normalizes:
  • Data models – Consistent field names and structures across providers (e.g., files in Google Drive, SharePoint, and Dropbox all return the same schema; users in Google Workspace, Okta, and 1Password all return the same schema)
  • Authentication – OAuth, API keys, and tokens are managed per-provider; you just pass an x-account-id header
  • Pagination – Cursor-based pagination works the same regardless of whether the provider uses offsets, pages, or cursors
  • Error formats – Standardized error responses with provider-specific details when available
Building AI agents? Use the MCP Server, an AI Toolset SDK, or the Actions API (RPC) instead — same data, optimized for LLM tool calling.

Entity Model

The IAM API is built around six core entities.
IamCredentials is not included in the diagram above. It is a snapshot of the current connection’s auth state, not a stored identity object. It carries a user reference when the credential corresponds to a known principal (such as an OAuth user or named service account).
EntityDescription
IamUserAn individual with access to the provider. Carries profile fields, activity timestamps, MFA status, and expandable collections of roles, groups, and direct permissions.
IamRoleA named set of permissions. Roles can be scoped to a specific resource type and ID (scope), making them applicable to a particular group, organization, or resource.
IamGroupA collection of users. Groups can nest via parent_id and child_group_ids, belong to an organization, and carry their own role assignments. Expand users to get group members.
IamOrganizationA top-level tenant or workspace. Groups and users are linked to an organization via organization_id and filter parameters.
IamPermissionA specific action type scoped to one or more resource types and optional resource IDs. Targets live on scopes (IamPermissionScope[]). See Permission types for valid type values.
IamCredentialsThe authenticated connection making the request. Returned by GET /unified/iam/me. Includes a name, auth type, granted scopes, effective permissions, last-used timestamp, and a user reference when the credential corresponds to a known principal.

Permission and scope model

IamPermission has a type (the action) and a scopes array. Each scope entry has a resource_type (e.g. file, channel, user) and an optional resource_id. When resource_id is absent, the permission applies to all resources of that type. Roles carry the same scoping via IamRoleScope on the role itself, allowing a role to be valid only within a specific organizational context.

Endpoints

MethodPathActionDescription
GET/unified/iam/usersunified_list_usersList users (see User filters)
GET/unified/iam/users/{id}unified_get_userGet user by ID
PATCH/unified/iam/users/{id}iam_update_userUpdate user
DELETE/unified/iam/users/{id}iam_delete_userDelete user
GET/unified/iam/rolesunified_list_rolesList roles
GET/unified/iam/roles/{id}unified_get_roleGet role by ID
GET/unified/iam/groupsunified_list_groupsList groups
GET/unified/iam/groups/{id}unified_get_groupGet group by ID
GET/unified/iam/organizationsunified_list_organizationsList organizations
GET/unified/iam/organizations/{id}unified_get_organizationGet organization by ID
GET/unified/iam/meunified_get_meGet current connection credentials
GET/unified/iam/resource_typesunified_list_resource_typesList resource type identifiers supported by this connector (see Resource types)
GET/unified/iam/resource_usersunified_list_resource_usersList users with access to a specific resource. Requires resource_type and resource_id (see Listing users by resource)

Permission types

IamPermission.type is one of the values below. The OAS admits the full set; providers expose only the permission types that map to their model.
ValueDescription
readRead access
read_writeRead and write access
writeWrite access
commentComment / annotate
createCreate new resources
editEdit existing resources
approveApproval / workflow rights
deleteDelete access
useUse / execute (e.g. run app, use license)
exportExport / download
unmapped_valueProvider value did not map to the enum
nullProvider did not provide a value

User filters

GET /unified/iam/users accepts the following keys on the filter query object. Filter support varies per connector; passing a filter key the connector does not support returns a 400.
FilterTypeNotes
filter.updated_afterstring (date-time)Supported by all connectors
filter.emailstringSome connectors
filter.group_idstringSome connectors
filter.role_idstringSome connectors
filter.organization_idstringSome connectors

Resource types

GET /unified/iam/resource_types returns the resource type identifiers a connected provider supports for resource-scoped queries. The response shape is { data: string[] }; values are connector-defined, not a fixed enum.
ConnectorExample response
Google Drive["file", "folder", "drive"]
Google Directory["group"]
Slack["channel", "workspace"]
Use these values as the resource_type query parameter on GET /unified/iam/resource_users. The type field on an embedded IamResource is declared as oneOf: [string, IamResourceTypeEnum] in the OAS. Falcon connectors emit a plain string from the connector-defined set returned by this endpoint (e.g. "file", "channel", "group"). Legacy V2 connectors emit the { value, source_value } envelope where value is from the fixed IamResourceTypeEnum set. Parse both shapes when consuming the field.

Listing users by resource

GET /unified/iam/resource_users returns users with access to a specific resource, including their resource-scoped roles. Same response shape as IamUser. Required query parameters:
  • resource_type — one of the values returned by GET /unified/iam/resource_types for the connected provider.
  • resource_id — the raw provider remote_id of the resource. Not a StackOne-encoded id from a list endpoint. Pass the provider’s native id (e.g. a Drive file id, Slack channel id, group remote_id).
Standard pagination, fields, and expand apply as on the other list endpoints.

StackOne SDKs & OpenAPI Specification

Use our official SDKs for faster integration. Build with language-native libraries. Full list here.

OpenAPI Specification