# developer.torii Documentation
## Guides
- [Determine AI Module Classification (AI Native / AI Enabled / No AI / Not Known / Not Applicable)](https://developers.toriihq.com/docs/determine-ai-module-classification-ai-native-ai-enabled-no-ai-not-known-not-applicable.md): Intelligently classify whether an application is AI Native, AI Enabled, No AI, Not Known, or Not Applicable by prioritizing Torii tag metadata and enhancing accuracy with GPT plus web-backed validation.
- [Determine Hosting Type (SaaS / On-Prem / PaaS / Not Known / Not Applicable)](https://developers.toriihq.com/docs/determine-hosting-type-saas-on-prem-paas-not-known-not-applicable.md): Automatically classify an application's hosting model—SaaS, On-Prem, PaaS, Not Known, or Not Applicable—using a structured AI (GPT) Action and persist the result directly to Application Details via the Update App API.
- [Determine SSO Classification (Yes / No / Not Supported / Not Known)](https://developers.toriihq.com/docs/determine-sso-classification-yes-no-not-supported-not-known-1.md): Automatically classify whether a discovered application has SSO enabled, supports SSO but is not integrated, does not support SSO, or cannot be reliably determined—using a structured AI (GPT) Action and updating the result directly in Torii.
- [Quickstart - AI GPT Actions](https://developers.toriihq.com/docs/quickstart-gpt-actions.md): A curated library of reusable, workflow-ready GPT prompts you can drop into Torii AI (GPT) Actions to automate decisions and enrich app data with predictable, structured outputs.
- [Add User to Glassfrog](https://developers.toriihq.com/docs/add-user-to-glassfrog.md)
- [Adding Users to Distribution Lists using Azure Runbooks](https://developers.toriihq.com/docs/adding-users-to-distribution-lists-using-azure-runbooks.md): Using Torii Custom Actions to trigger Azure Runbooks
- [Disable SwaggerHub User](https://developers.toriihq.com/docs/disable-swaggerhub-user.md): User Management for SwaggerHub
- [Invite User to SwaggerHub Organizations](https://developers.toriihq.com/docs/invite-user-to-swagger-hub-organization.md): User Management for Swaggerhub
- [Lattice - Create Lattice User](https://developers.toriihq.com/docs/lattice-create-lattice-user.md): Create a user in Lattice using a custom action that makes a request using the SCIM protocol
- [Lattice - Disable User](https://developers.toriihq.com/docs/lattice-disable-user.md): Disable a Lattice user using a two step custom action with the SCIM protocol
- [Figma → Torii via Google Sheets (Enterprise Column Set)](https://developers.toriihq.com/docs/custom-integration-figma-enterprise.md): This guide updates the original Google Sheets example to reflect **Figma Enterprise** exports and a simplified, reliable seat-type–based license model. The upload and sync flow uses Torii’s Files and Services APIs.
- [Quickstart - Introduction to Custom Integrations](https://developers.toriihq.com/docs/introduction-to-custom-applications.md): Build your first custom integration in 10 minutes.
- [Stripe - Custom Integration Example](https://developers.toriihq.com/docs/stripe-custom-integration-example.md): Using Google Sheets
- [Zapier - Custom Integration Example (Workspace ONE)](https://developers.toriihq.com/docs/zapier-custom-integration-example-workspace-one.md): This provides an example of a custom integration built with Zapier
- [Download All Files](https://developers.toriihq.com/docs/download-all-files.md): A node.js script that downloads all files uploaded to Torii
- [Setup Powershell Actions for Torii](https://developers.toriihq.com/docs/setup-powershell-actions-for-torii.md): Torii Integration for Azure Advanced Automation
- [GET /contracts migration guide (v1.0 → v1.1)](https://developers.toriihq.com/docs/get-contracts-migration-guide-v10-v11.md): This guide describes what changes between `X-API-Version: 1.0` and `X-API-Version: 1.1` of the `GET /contracts` and `GET /contracts/{idContract}` endpoints, so you can migrate your integration safely.
- [Automating Expense Data Imports into Torii](https://developers.toriihq.com/docs/automating-expense-data-imports-into-torii-with-n8n-and-workato.md): Learn how to automate expense data imports into Torii using n8n and Workato. Get the API steps, see real-world workflows, and take away best practices to accelerate your own financial data integrations.
- [Bulk configure app details](https://developers.toriihq.com/docs/bulk-configuration-of-app-metadata.md): Bulk configuration of app meta during on-boarding
- [Bulk configure multiple owners for apps](https://developers.toriihq.com/docs/bulk-configure-multiple-app-owners.md): Bulk configuration of app meta during on-boarding
- [Creating an inactive licenses report using the API](https://developers.toriihq.com/docs/checking-for-inactive-licenses-using-the-api.md): How to use the Torii API to build a dataset for a report that can be used by popular BI tools such as Tableau and Power BI
- [Modifying the Update App Details Example](https://developers.toriihq.com/docs/modifying-the-update-app-details-example.md): This guide provides instructions on how to update the Bulk Configure App Details to incorporate your own fields
- [Monitoring Torii Workflow Failures with Workato](https://developers.toriihq.com/docs/monitoring-torii-workflow-failures-with-workato.md): This guide walks you through building a Workato Ruby code step that fetches **workflow action execution logs** from Torii, detects failed steps, and prepares the data for routing to platforms like **ServiceNow** or **email notifications**.
- [Trigger Access Request Workflow from Atlassian Automation](https://developers.toriihq.com/docs/trigger-access-request-workflow-from-atlassian-automation.md): Demo and config steps to trigger an access request workflow from JIRA
- [Updating App Details using the API](https://developers.toriihq.com/docs/updating-app-details-using-the-api.md): This guide describes how to retrieve the list of apps in your organization and update app details
- [Updating Contract Details using the API](https://developers.toriihq.com/docs/updating-contract-details-using-the-api.md): This guide describes how to retrieve the list of contracts in your organization and update their details
- [Find “SSO Tax” Risks in Your SaaS Portfolio with the Torii API](https://developers.toriihq.com/docs/find-sso-tax-risks-in-your-saas-portfolio-with-google-sheets-torii-api.md): Many organizations only discover late in the buying cycle that core security features (like SSO, SCIM, audit logs) sit behind higher-tier plans. This guide shows how to build a Google Sheets + Apps Script workflow that calls the Torii API to inventory your applications and flag vendors from a curated “SSO tax” reference list. You’ll get a timestamped, filterable report you can use to prioritize reviews and bring evidence to vendor conversations..
- [Build - Base Dashboard Skills for ChatGPT ](https://developers.toriihq.com/docs/base-dashboarding-skills-for-chatgpt.md): ChatGPT skills package to build customizable dashboards using the Torii MCP
- [Build - Agent Skill Package](https://developers.toriihq.com/docs/build-agent-skill-package.md): Scheduled and refresh-oriented wrapper for Torii dashboards in ChatGPT
- [Build - Custom GPT Skill Package](https://developers.toriihq.com/docs/custom-gpt-skill-package.md): A controlled, repeatable dashboard assistant for Software Asset Management
- [Connect ChatGPT to Torii](https://developers.toriihq.com/docs/connect-chatgpt-to-torii.md): Using the Torii web MCP for for Dashboarding
- [Design - Organizational drill downs](https://developers.toriihq.com/docs/organizational-drill-downs.md): Design Drilldowns for Departments, Business Units, Legal Entities, and Other Slices
- [Choose - Plain ChatGPT, Custom GPT Wrapper or Agent Wrapper](https://developers.toriihq.com/docs/plain-chatgpt-custom-gpt-wrapper-or-agent-wrapper.md): Package the experience based on your use case - this guide helps you choose
- [Design - Read-Only SaaS Rationalization Dashboard](https://developers.toriihq.com/docs/read-only-saas-rationalization-dashboard.md): Design a Read-Only SaaS Rationalization Dashboard in ChatGPT with Torii MCP
- [Build — Base Dashboard Skill for Claude](https://developers.toriihq.com/docs/build-base-dashboard-skill-for-claude.md): The shared foundation for read-only Torii dashboards across all Claude deployment surfaces
- [Build — Cowork Skill Package](https://developers.toriihq.com/docs/build-cowork-skill-package.md): A controlled, repeatable on-demand dashboard assistant for Software Asset Management — Cowork deployment
- [Build — Scheduled Dashboard Refresh](https://developers.toriihq.com/docs/build-scheduled-dashboard-refresh.md): Scheduled and refresh-oriented deployment for Torii dashboards — Cowork, Claude Code, and API options
- [Choose — Your Claude Deployment Model for Torii Dashboards](https://developers.toriihq.com/docs/choose-your-claude-deployment-model-for-torii-dashboards.md): Match your packaging to your use case — from a quick chat to a fully automated agent
- [Design - Organizational Drill-Downs](https://developers.toriihq.com/docs/design-organizational-drill-downs.md): Design drilldowns for Departments, Business Units, Legal Entities, and other slices
- [Design — Read-Only SaaS Rationalization Dashboard](https://developers.toriihq.com/docs/design-read-only-saas-rationalization-dashboard.md): Design a read-only SaaS rationalization dashboard in Claude with Torii MCP
- [Connect Claude to Torii](https://developers.toriihq.com/docs/connect-claude-to-torii.md): Using the Torii MCP across Claude's deployment surfaces
- [Setup Guide - Torii Financial Intelligence on Claude](https://developers.toriihq.com/docs/setup-guide-torii-financial-intelligence-on-claude-cowork.md): A SaaS portfolio dashboard and a NetSuite spend accuracy report, both running in your Claude, pulling data directly from your Torii tenant via MCP.
- [Application Fields](https://developers.toriihq.com/docs/application-fields.md)
- [Field Types](https://developers.toriihq.com/docs/field-types.md)
- [Getting Started](https://developers.toriihq.com/docs/getting-started-1.md)
- [Build a Plugin](https://developers.toriihq.com/docs/build-a-plugin.md)
- [Manifest](https://developers.toriihq.com/docs/manifest.md)
- [Operating a Plugin](https://developers.toriihq.com/docs/operating-a-plugin.md)
- [Widgets](https://developers.toriihq.com/docs/widgets.md)
- [Hello World Plugin](https://developers.toriihq.com/docs/hello-world-plugin.md)
- [Torii CLI](https://developers.toriihq.com/docs/torii-cli.md): Torii CLI is an OpenAPI-driven command line interface for the Torii API.
## API Reference
- [Aggregations](https://developers.toriihq.com/reference/aggregations.md)
- [API Authentication](https://developers.toriihq.com/reference/api-authentication.md): How to authenticate to the Torii API
- [Errors](https://developers.toriihq.com/reference/errors.md)
- [Filters](https://developers.toriihq.com/reference/filters.md)
- [Introduction](https://developers.toriihq.com/reference/introduction-1.md)
- [OpenAPI](https://developers.toriihq.com/reference/openapi-documentation.md)
- [Pagination](https://developers.toriihq.com/reference/pagination.md)
- [Rate limits](https://developers.toriihq.com/reference/rate-limits.md)
- [Create user anonymization request](https://developers.toriihq.com/reference/postanonymizerequest.md):
Create new user anonymization request.
email the email that should be anonymized. fields the user fields to anonymized.
- Rate limit: 200 requests per minute
- [List access request policies](https://developers.toriihq.com/reference/getappcatalogaccessrequestpolicies.md): Returns the organization’s access request policies.
Use the `fields` query parameter to choose which fields to return — e.g. `fields=id,name,app,approvalFlow,eligibilityGroups`.
- Rate limit: 60 requests per minute
- [List access request policies eligible for a user](https://developers.toriihq.com/reference/getappcatalogaccessrequestpolicieseligible.md): Returns the access request policies the specified user is eligible to request for the given app.
- Rate limit: 60 requests per minute
- [Request access on user behalf](https://developers.toriihq.com/reference/postappcatalogaccessrequestpoliciesidaccessrequestpolicytrigger.md): Triggers an access request for the specified policy on behalf of the user identified by `userEmail`.
Eligibility is enforced: the request fails with 400 NOT_ELIGIBLE_FOR_POLICY if the user is not a member of the policy’s eligibility groups.
- Rate limit: 60 requests per minute
- [Bulk request access on user behalf](https://developers.toriihq.com/reference/postappcatalogaccessrequestpoliciestrigger.md): Triggers an access request for each of the specified policies on behalf of the user identified by `userEmail`.
Each policy is processed independently, so some may succeed while others are rejected.
- Rate limit: 30 requests per minute
- [Delete field](https://developers.toriihq.com/reference/deleteappsfieldsidfield.md): Delete app field
- Rate limit: 50 requests per minute
- [List app fields](https://developers.toriihq.com/reference/getappsfields.md): Returns a list of app fields with their options.
- Rate limit: 200 requests per minute
- [List app fields metadata](https://developers.toriihq.com/reference/getappsmetadata.md): List apps fields (predefined and custom).
The list of options for dropdown and multi dropdown fields is not provided by this API.
You can search by field name or key.
- Rate limit: 200 requests per minute
- [Create a new field](https://developers.toriihq.com/reference/postappsfields.md): Create a new app field
- Rate limit: 50 requests per minute
- [Update field](https://developers.toriihq.com/reference/putappsfieldsidfield.md): Update app field
- Rate limit: 50 requests per minute
- [List application users](https://developers.toriihq.com/reference/getappsidappusers.md): - Rate limit: 600 requests per minute
- [List apps](https://developers.toriihq.com/reference/getapps.md): Returns a list of apps used in the organization.
Filtering is available via the documented query parameters below and by [custom application fields](https://app.toriihq.com/team/settings/appDetails).
Example:
```GET /apps?fields=id,name,myCustomField&state=discovered&myCustomField=true```
The above example returns a list of applications that are in `discovered` state and `myCustomField` is true. Each application object will contain the `id`, `name` and `myCustomField` fields.
Use `includeLicenses=true` to include aggregated license summary for each app.
- Rate limit: 200 requests per minute
- [Get app](https://developers.toriihq.com/reference/getappsidapp.md): Returns a specific app.
Example:
```GET /apps/1?fields=id,name,myCustomField&state=discovered&myCustomField=true```
The above example returns app with id=1. Each application object will contain the `id`, `name` and `myCustomField` fields.
Use `includeLicenses=true` to include aggregated license summary.
- Rate limit: 400 requests per minute
- [Search apps](https://developers.toriihq.com/reference/getappssearch.md): Returns a list of apps from Torii's catalog with name that contains q
- Rate limit: 100 requests per minute
- [Add app](https://developers.toriihq.com/reference/postapps.md): - Rate limit: 200 requests per minute
- [Create app](https://developers.toriihq.com/reference/postappscustom.md): - Rate limit: 200 requests per minute
- [Match apps](https://developers.toriihq.com/reference/postappsmatch.md): Try to match a list of apps by their name
- Rate limit: 100 requests per minute
- [Update app](https://developers.toriihq.com/reference/putappsidapp.md): Update app fields including all custom fields defined via [custom Application Details](https://app.toriihq.com/team/settings/appDetails)
- Rate limit: 100 requests per minute
- [Get admin audit logs](https://developers.toriihq.com/reference/getaudit.md): The Audit Log API allows the user to pull Audit Log events happening in the organization account.
The API is sorted based on creationTime and supports pagination. The default sort order is descending.
Filtering is possible using the following attributes: entity, startTime, endTime
If you encounter an HTTP 502 error, ensure that gzip compression is enabled (Accept-Encoding: gzip), if possible. Additionally, try reducing the size parameter to help resolve the issue. - Rate limit: 200 requests per minute
- [Delete contract](https://developers.toriihq.com/reference/deletecontractsidcontract.md): - Rate limit: 200 requests per minute
- [List contracts](https://developers.toriihq.com/reference/getcontracts.md): Returns a list of contracts in the organization.
This endpoint has two versions: 1.0 and 1.1. The default version is 1.0 for API keys created before Aug 1st 2026 and 1.1 for keys created after Aug 1st 2026. You can specify the version via the `X-API-Version` header to override.
Filtering
Filter contracts by passing each field as its own query parameter. Multiple filters are combined with AND. Values are matched by exact equality — partial match, range, and comparator operators are not supported on this endpoint.
Supported filter fields: `id`, `idApp`, `createdBy`, `status`, and any [custom contract field](https://app.toriihq.com/team/settings/contractDetails) system key.
Example:
```GET /contracts?fields=id,name,idApp,status,myCustomField&status=active&idApp=123&myCustomField=true```
The above returns contracts where `status=active` AND `idApp=123` AND `myCustomField=true`.
Query params are different per version:
| Query param | Supported in version | Description | Default value |
|---|
| fields | v1.0, v1.1 | List of fields to return for each contract | (no value) |
| q | v1.1 only | The query to search | (no value) |
| sort | v1.1 only | Sort order | (no value) |
| size | v1.1 only | Number of results to return (max: 1000) | 1000 |
| cursor | v1.1 only | Cursor for pagination | (no value) |
| aggs | v1.1 only | Aggregation configuration | (no value) |
| filters | v1.1 only | The filters to apply (JSON string) | (no value) |
Multi-currency support
All currency fields are returned in their original amounts based on the contract currency. To get the contract currency, add `currency` to `fields`.
Example:
```GET /contracts?fields=id,name,amount,currency```
- Rate limit: 100 requests per minute
- [Get contract](https://developers.toriihq.com/reference/getcontractsidcontract.md): - Rate limit: 800 requests per minute
- [Create contract](https://developers.toriihq.com/reference/postcontracts.md): Creates a new contract.
The request body must contain the name, idApp, and status of the contract.
Dates should be sent in ISOString format. Example: "2022-02-03"
Currency fields (e.g., `amount`) can be numbers (`"amount": 1500`, uses org default currency) or objects to set a different currency: `"amount": { "value": 23000000, "currency": "EUR" }`. Cannot set `currency` as a top-level field.
- Rate limit: 200 requests per minute
- [Update contract](https://developers.toriihq.com/reference/putcontractsidcontract.md): Updates an existing contract.
Currency fields (e.g., `amount`) can be numbers (`"amount": 1500`, uses org default currency) or objects to set a different currency: `"amount": { "value": 23000000, "currency": "EUR" }`. Cannot set `currency` as a top-level field.
- Rate limit: 400 requests per minute
- [List contract fields](https://developers.toriihq.com/reference/getcontractsfields.md): Returns a list of contract fields with their options.
- Rate limit: 200 requests per minute
- [List contract fields metadata](https://developers.toriihq.com/reference/getcontractsmetadata.md): List contract fields (predefined and custom).
The list of options for dropdown and multi dropdown fields is not provided by this API.
You can search by field name or key.
- Rate limit: 200 requests per minute
- [Get file information](https://developers.toriihq.com/reference/getfilesid.md): Use the following code snippet to get the information of a file that was uploaded to Torii
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/{FILE_ID}"
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/1000" - Rate limit: 600 requests per minute
- [Download file](https://developers.toriihq.com/reference/getfilesiddownload.md): Use the following code snippet to download a file that was uploaded to Torii
curl -L -H "Authorization: Bearer API_KEY" -o {OUTPUT_FILE_NAME} "https://api.toriihq.com/v1.0/files/{FILE_ID}/download"
curl -L -H "Authorization: Bearer API_KEY" -o downloaded_file.json "https://api.toriihq.com/v1.0/files/1000/download" - Rate limit: 600 requests per minute
- [Get parameters for uploading files](https://developers.toriihq.com/reference/getfilesurl.md): This API is part of a series of API calls you need to make to upload a file to our system.
Click here to see the APIs alongside code examples using cURL
-
This API. It returns a URL (used in step #2) and the file's path (used in step #3):
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/url?name={FILE_NAME}&type={CONTENT_TYPE}"
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/url?name=my_file.json&type=text/csv" -
Use the URL returned to upload the file directly to S3:
curl -H "Content-Type: {CONTENT_TYPE}" --data-binary @'PATH/TO/YOUR/FILE' -X PUT "{S3_URL}"
curl -H "Content-Type: text/csv" --data-binary @'~/Downloads/my_file.json' -X PUT "{S3_URL}" -
Look for the 'Store file information in DB' API or use the following code snippet:
curl -d '{"path":"{FILE_PATH}","type":"{FILE_TYPE}"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/files"
curl -d '{"path":"1629889604893/my_file.json","type":"expenseReport"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/files"
- Rate limit: 200 requests per minute
- [Store file information in DB](https://developers.toriihq.com/reference/postfiles.md): This API is part of a series of API calls you need to make to upload a file to our system.
Click here to see the APIs alongside code examples using cURL
-
Look for the 'Get parameters for uploading files' API or use the following code snippet:
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/url?name={FILE_NAME}&type={CONTENT_TYPE}"
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/files/url?name=my_file.json&type=text/csv" -
Use the URL returned to upload the file directly to S3.
curl -H "Content-Type: {CONTENT_TYPE}" --data-binary @'PATH/TO/YOUR/FILE' -X PUT "{S3_URL}"
curl -H "Content-Type: text/csv" --data-binary @'~/Downloads/my_file.json' -X PUT "{S3_URL}" -
This API. It returns a unique file identifier.
curl -d '{"path":"{FILE_PATH}","type":"{FILE_TYPE}"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/files"
curl -d '{"path":"1629889604893/my_file.json","type":"expenseReport"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/files"
- Rate limit: 200 requests per minute
- [Upload file (up to 3MB)](https://developers.toriihq.com/reference/postfilesupload.md): This API allows to upload small files (up to 3MB). To upload larger files, see the GET /files/url endpoint.
Supported files: .csv, .xls, .xlsx, .pdf, .doc, .docx, .png, .jpg, .jpeg, .xml, .json, .zip.
- Rate limit: 200 requests per minute
- [Create a custom integration account](https://developers.toriihq.com/reference/postservicescustom.md): Provisions a new custom integration account for the given app and returns its id.
- Rate limit: 50 requests per minute
- [Sync custom integration](https://developers.toriihq.com/reference/putservicessynccustom.md): Use the following code snippet to validate an uploaded data file and sync a custom integration
curl -X PUT -d '{"idFile":"{FILE_ID}", "idAppAccount": "{APP_ACCOUNT_ID}"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/services/sync/custom" - The uploaded file must be a JSON file.
- Before uploading a file using File upload API, follow the file schema.
- File type is "customIntegrationData".
- Only one sync can run at a time, a 409 error code will be returned if there's an attempt to run more than one sync at a time.
File schema
Default values are marked in red - users - Array [required] - Must have at least 1 valid user
User object:
- id - String [optional] - The unique identifier of a user in the application
- email - String [required]
- firstName - String [optional]
- lastName - String [optional]
- status - Enum (active/deleted ) [optional] - The status of the user in Torii. Only active users are displayed as users of the application
- externalStatus - String [optional] - The status of the user as it appears on the application’s site
- roles - String[] [optional]
- lastUsedDate - Date [optional] - ISO 8601 (YYYY-MM-DD)
- licenses - Array [optional]
License object:
- name - String [required]
- unassignedAmount - Number [optional] - Number of licenses that are not assigned to users
- users - Array [optional]
License user object:
- email - String [required] - user's email
- licenseStatus - Enum ( active/inactive/deleted ) [optional] - If not provided, will be defined by user status
- pricePerUser - Number [optional] - should be sent in cents (will be saved in the organization's display currency)
File example
{ "users": [ { "id: "15893", "email": "adam@example.com", "firstName": "Adam", "lastName": "Test", "status": "active", "externalStatus": "Active", "roles": ["Admin", "Super admin"], "lastUsedDate": "2021-07-05T20:43:14Z" }, { "id": "39471", "email": "tony@example.com", "firstName": "Tony", "lastName": "Example", "status": "active", "externalStatus": "Deactivated", "roles": ["Member"], "lastUsedDate": "2021-05-05T14:43:14Z" } ], "licenses": [ { "name": "Pro", "unassignedAmount": 10, "users": [ { "email": "adam@example.com", "licenseStatus": "active" } ], "pricePerUser": 15000 }, { "name": "Basic", "unassignedAmount": 5, "users": [], "pricePerUser": 0 }, { "name": "Corp", "unassignedAmount": 20, "users": [ { "email": "tony@example.com", "licenseStatus": "inactive" } ], "pricePerUser": 20000 } ] } - Rate limit: 200 requests per minute
- [Sync Gluu custom integration](https://developers.toriihq.com/reference/putservicessyncgluu.md): Use the following code snippet to sync your Gluu integration
curl -X PUT -d '{"idFile":"{FILE_ID}", "idAppAccount": "{APP_ACCOUNT_ID}"}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/services/sync/gluu" - The uploaded file must be a CSV file.
- In order to upload the file use the File upload API
- File type is "customIntegrationData".
- Rate limit: 200 requests per minute
- [Get organization](https://developers.toriihq.com/reference/getorgsmy.md): Returns the organization profile. - Rate limit: 100 requests per minute
- [Get parse request](https://developers.toriihq.com/reference/getparsingsid.md): Use the following code snippet to get the information of a parse request
curl -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/parsings/{PARSING_ID}" Request status will be one of the following
- parsing_in_progress - Request is in progress
- parsed_successfully - Request has been parsed successfully
- parsing_failed - Request has been failed to parse
- Rate limit: 800 requests per minute
- [Parse automatically](https://developers.toriihq.com/reference/putparsingsautomatic.md): Use the following code snippet to parse an expense file with automatic column matching:
curl -X PUT -d '{"idFile":"{FILE_ID}"}' -H "Authorization: Bearer API_KEY" "https://api.toriihq.com/v1.0/parsings/automatic"
IMPORTANT
After sending a parse request, make sure to poll https://api.toriihq.com/v1.0/parsings/{PARSING_ID} to verify that the request was successful
- Rate limit: 200 requests per minute
- [Parse manually](https://developers.toriihq.com/reference/putparsingsmanual.md): Use the following code snippet to parse an expense file with manual column matching:
curl -X PUT -d '{"parseConfig":{"idFile":"{FILE_ID}","transactionDateColumn":"A","descriptionColumn":"B", "amountColumn":"C", "dateFormat": "DD/MM/YYYY", "currencyColumn":"D"}}' -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" "https://api.toriihq.com/v1.0/parsings/manual"
IMPORTANT
After sending a parse request, make sure to poll https://api.toriihq.com/v1.0/parsings/{PARSING_ID} to verify that the request was successful
- Rate limit: 200 requests per minute
- [Delete plugin](https://developers.toriihq.com/reference/deletepluginsuuidplugin.md): - Rate limit: 200 requests per minute
- [List plugin fields](https://developers.toriihq.com/reference/getpluginsidpluginfields.md): Returns a list of plugin fields with their associated idField.
- Rate limit: 200 requests per minute
- [Create plugin](https://developers.toriihq.com/reference/postplugins.md): - Rate limit: 200 requests per minute
- [Generate an API key for a private plugin](https://developers.toriihq.com/reference/postpluginsuuidpluginapikey.md): This API is only available for private plugins installed on the organization. This will revoke any previous API keys associated with the plugin. - Rate limit: 200 requests per minute
- [Update plugin (publish new version)](https://developers.toriihq.com/reference/putpluginsuuidplugin.md): - Rate limit: 200 requests per minute
- [List roles](https://developers.toriihq.com/reference/getroles.md): Returns the list of roles in the organization - Rate limit: 100 requests per minute
- [Delete User](https://developers.toriihq.com/reference/deletescimv2usersiduser.md): Delete Torii user- If the user is the last admin in the org, the user cannot be deleted.
- Rate limit: 200 requests per minute
- [List Resource Types](https://developers.toriihq.com/reference/getscimv2resourcetypes.md): Returns the available resource types in the SCIM API. - Rate limit: 100 requests per minute
- [List Schemas](https://developers.toriihq.com/reference/getscimv2schemas.md): Returns the available resource types schemas, with attributes information. - Rate limit: 100 requests per minute
- [Get Service Provider Configuration](https://developers.toriihq.com/reference/getscimv2serviceproviderconfig.md): Returns Torii's SCIM Configuration. - Rate limit: 100 requests per minute
- [List Users](https://developers.toriihq.com/reference/getscimv2users.md): Retrieve all the active users in Torii.
Active users can log in to Torii and/or the App Catalog and/or the Browser Extension. - Rate limit: 200 requests per minute
- [Get User By ID](https://developers.toriihq.com/reference/getscimv2usersiduser.md): Returns the user associated with the user's ID. - Rate limit: 400 requests per minute
- [Update user (PATCH)](https://developers.toriihq.com/reference/patchscimv2usersiduser.md): Update Torii user- The user's
userName (email address) cannot be updated. - To deactivate a user, use
active: false - If the user is the last admin in the org, you cannot update his role.
For more information. - Rate limit: 200 requests per minute
- [Create User](https://developers.toriihq.com/reference/postscimv2users.md): Create a Torii user. - Torii users can log in to Torii and/or the App Catalog and/or the Browser Extension.
- The user's app permissions are determined according to the user's role, represented by the
userType attribute. - The user can be created as Active or Inactive, according to the
active attribute. - Only active users can log in to Torii apps.
- Rate limit: 200 requests per minute
- [Update User (PUT)](https://developers.toriihq.com/reference/putscimv2usersiduser.md): Update Torii user- Only active users can be updated.
- The user's
userName (email address) cannot be updated. - To deactivate a user, use
active: false - Use the
POST method to reactivate inactive users. - If the user is the last admin in the org, you cannot update his role.
- Rate limit: 200 requests per minute
- [List transactions](https://developers.toriihq.com/reference/gettransactions.md): Returns recognized (mapped) expense transactions by default.
`amount` is an object: `value`/`currency` are the original transaction amount; `convertedValue` is that amount in the organization display currency. Values are in minor currency units (e.g., cents).
Cursor-paginated: pass `size` for the page size and the returned `nextCursor` as `cursor` for the next page.
Sort with `sort=:asc|desc`; sorting by `amount` uses the display-currency converted value. See `transactionSortSchema` for the sortable fields.
- Rate limit: 100 requests per minute
- [List transactions metadata](https://developers.toriihq.com/reference/gettransactionsmetadata.md): Returns the transaction fields
- Rate limit: 200 requests per minute
- [Update transaction](https://developers.toriihq.com/reference/puttransactionsidtransaction.md): Set `idApp` to match a transaction to an app (this marks it `mapped`); pass `idApp: null` to unmatch.
Set `mappingStatus: "archived"` to archive a transaction. Archived transactions are not returned by `GET /transactions`.
To unmatch and reset the status, send both `idApp: null` and `mappingStatus: "unknown"`.
`amount.value` is in minor currency units (e.g., cents) and overrides the original amount; the currency is unchanged.
`transactionDate` overrides the transaction date (ISO 8601, e.g. `2022-02-03`).
Returns only the fields affected by the update (`id`, `idApp`, `mappingStatus`, `transactionDate`).
- Rate limit: 100 requests per minute
- [List user applications](https://developers.toriihq.com/reference/getusersiduserapps.md): Returns list of all applications used by the user.
Filtering is available via the documented query parameters below and by [custom application fields](https://app.toriihq.com/team/settings/appDetails).
Multi Currency Support: The field `annualCost` is returned in the license currency. To retrieve the license currency, `currency` can be added to fields. Additionally, adding `annualCostConverted` will return the amount based on the organization's chosen display currency.
Example:
```GET /users/12345/apps?fields=id,name,myCustomField&state=discovered&myCustomField=true```
The above example returns a list of user applications for the user 12345. Only applications that are in `discovered` state and `myCustomField` is true will be returned. Each application object will contain the `id`, `name` and `myCustomField` fields.
- Rate limit: 800 requests per minute
- [Get user application](https://developers.toriihq.com/reference/getusersiduserappsidapp.md): Returns the user application. - Rate limit: 800 requests per minute
- [Update user application](https://developers.toriihq.com/reference/putusersiduserappsidapp.md): Updates the user application with fields sent in the request body. - Rate limit: 200 requests per minute
- [List user custom fields](https://developers.toriihq.com/reference/getusersfields.md): List user custom fields for connected integrations
- Rate limit: 200 requests per minute
- [List user fields metadata](https://developers.toriihq.com/reference/getusersmetadata.md): List user fields (predefined and custom).
The list of options for dropdown and multi dropdown fields is not provided by this API.
You can search by field name or key.
- Rate limit: 200 requests per minute
- [List users](https://developers.toriihq.com/reference/getusers.md): Returns a list of users in the organization. Filtering is available via query parameters.
- Rate limit: 100 requests per minute
- [Get user](https://developers.toriihq.com/reference/getusersiduser.md): - Rate limit: 800 requests per minute
- [Update user](https://developers.toriihq.com/reference/putusersiduser.md): Updates the user with fields sent in the request body. - Rate limit: 200 requests per minute
- [Get action execution logs](https://developers.toriihq.com/reference/getworkflowsactionexecutions.md): Returns a list of any action executions in the organization, sorted by creationTime in descending order. Pagination is supported.
Filtering is possible using the following attributes: idActionApp
idActionUser
- Rate limit: 500 requests per minute
- [Get workflows edit history](https://developers.toriihq.com/reference/getworkflowsaudit.md): Returns a list of workflows edit history - Rate limit: 200 requests per minute
- [Run App Access Request Policy](https://developers.toriihq.com/reference/postappcatalogtriggerappaccessrequestpolicy.md): Triggers an App Access Request Policy. In case the app has a valid Custom Policy configured - that Custom Policy will be executed. Otherwise, the Default Access Request Policy will be executed.
- Rate limit: 100 requests per minute
- [Run workflow](https://developers.toriihq.com/reference/postworkflowsidworkflowtrigger.md): Triggers a workflow.
triggerUserEmail should be provided for the following workflow triggers: "User meets criteria", "User joins", "User left", "Closed app in use", "License not in use" and "App event". triggerAppId should be provided for the following workflow triggers: "Application meets criteria", "Closed app in use" and "New app discovered". triggerContractId should be provided for the following workflow triggers: "Contract meets criteria". triggerLicenseName and triggerLicenseAppId should be provided for the following workflow triggers: "License not in use".
- Rate limit: 100 requests per minute
## Recipes
- [Autodesk Custom Integration](https://developers.toriihq.com/recipes/autodesk-custom-integration.md)
- [Bulk Update App Owners via API](https://developers.toriihq.com/recipes/bulk-update-app-owners-via-api.md)
- [Coupa Custom Integration](https://developers.toriihq.com/recipes/coupa-custom-integration.md)
- [Download all Files](https://developers.toriihq.com/recipes/download-all-files.md)
- [Figma - Custom Integration](https://developers.toriihq.com/recipes/figma-custom-integration.md)
- [Generic HR System Example - Custom Integration](https://developers.toriihq.com/recipes/generic-hr-system-example-custom-integration.md)
- [Stripe Custom Integration](https://developers.toriihq.com/recipes/stripe-custom-integration.md)
## Pages
- [Developer Terms of Service](https://developers.toriihq.com/developer-terms-of-service.md)
- [Torii Developer Marketplace](https://developers.toriihq.com/marketplace.md)
- [Torii Developer Marketplace](https://developers.toriihq.com/torii-marketplace-apps.md)
## Changelog
- [[Breaking change] List contracts API improvements](https://developers.toriihq.com/changelog/breaking-change-list-contracts-api-improvements.md)
- [Added new endpoints](https://developers.toriihq.com/changelog/added-new-endpoints.md)
- [Additions to the List Apps and List Users APIs](https://developers.toriihq.com/changelog/improvements-to-the-list-api-endpoints.md)
- [Audit log improvements and changes](https://developers.toriihq.com/changelog/audit-log-improvements-and-changes.md)
- [[Breaking change] List apps API improvements](https://developers.toriihq.com/changelog/breaking-change-list-apps-api-improvements.md)