# Ternary Documentation > Available as a SaaS platform and a self-hosted solution, Ternary manages more than $7.5B in multi-cloud spend across leading enterprises and managed service providers. ## Guides - [Ternary Documentation](https://docs.ternary.app/docs/home.md): Get started with Ternary through documentation that includes setup guides, administrative references, integrations, feature documentation, and FAQs. - [Uploading Billing Data via Drag & Drop](https://docs.ternary.app/docs/bring-your-own-data-byod-upload.md): Learn how to upload a billing CSV or ZIP file directly into Ternary without configuring cloud storage permissions. - [Model Context Protocol](https://docs.ternary.app/docs/model-context-protocol.md) - [Ternary MCP for Claude](https://docs.ternary.app/docs/ternary-mcp-for-claude.md) - [Ternary MCP for ChatGPT](https://docs.ternary.app/docs/ternary-mcp-for-chatgpt.md) - [SSO Setup for Okta Users](https://docs.ternary.app/docs/sso-setup-for-okta-users.md): Benefit from an expedited configuration for Single Sign-On if you use Okta as your corporate IdP. - [Self-Service PEM Certificate Management](https://docs.ternary.app/docs/self-service-pem-certificate-management.md): Learn how administrators and MSPs can manage PEM certificates in Ternary, including renewal, expiry status, and audit visibility. - [Why is Ternary displaying a difference in daily cost from what the GCP console shows?](https://docs.ternary.app/docs/why-ternary-shows-different-daily-costs-than-the-google-console.md): Learn why daily cost differences may appear between Ternary and the Google console due to timezone differences between exports and reports. - [What IP addresses does Ternary use to access my data?](https://docs.ternary.app/docs/what-ip-addresses-does-ternary-use-to-access-my-data.md) - [Submit a Ticket](https://docs.ternary.app/docs/zendesk-support.md) ## API Reference - [Create alert rule](https://docs.ternary.app/reference/createalertrule.md): Create a new alert rule to monitor cloud cost metrics. Alert rules evaluate cost data against a configured condition and notify subscribers when the condition is met. Two condition types are supported: - `ANOMALY_DETECTION` — Detects unusual cost changes by direction (increases, decreases, or both). - `THRESHOLDING` — Triggers when an aggregated cost metric crosses a static value. Returns the `ruleID` of the newly created alert rule. - [List alert rules](https://docs.ternary.app/reference/getalertrules.md): List all alert rules for the specified tenant. Returns rules of all condition types and statuses, including subscriber configuration and historical events if available. - [Update alert rule](https://docs.ternary.app/reference/updatealertrule.md): Update an existing alert rule. Only the fields included in the request body are modified; omitted fields remain unchanged. Common updates include changing the condition parameters, adjusting filters or dimensions, updating subscriber lists, or toggling the status between active and inactive. - [List alert rule events](https://docs.ternary.app/reference/getalertruleevents.md): List all events for a specific alert rule. Events represent the lifecycle history of an alert rule, including creation, updates, and deletion. Each event contains the changed fields in its `data` payload. - [Create API Key](https://docs.ternary.app/reference/createapikey.md): Create a new API key for programmatic access to the Ternary API. The API key is bound to the authenticated user and inherits their permissions. Optionally set an `expiresAt` timestamp; if omitted, the key does not expire. The full key value is returned only in this response — store it securely. - [List API keys](https://docs.ternary.app/reference/getapikeys.md): List all API keys belonging to the authenticated user. Each key includes its name, creation timestamp, and optional expiration date. The key secret is not included in list responses. - [Delete API key](https://docs.ternary.app/reference/deleteapikey.md): Permanently delete an API key. Any integrations using this key will immediately lose access. This action cannot be undone. - [List all AWS Reserved Instances recommendations](https://docs.ternary.app/reference/getawsreservedinstancerecommendations.md): List all AWS Reserved Instance purchase recommendations for the authenticated tenant. Recommendations are generated based on historical usage and configurable parameters such as lookback period, payment option, and offering class. Recommendations are refreshed periodically based on the latest usage data. - [List all AWS Savings Plan recommendations](https://docs.ternary.app/reference/getawssavingsplanrecommendations.md): List all AWS Savings Plan purchase recommendations for the authenticated tenant. Savings Plan recommendations identify opportunities to reduce costs through compute, EC2, or SageMaker Savings Plans. Recommendations are refreshed periodically based on the latest usage data. - [List Azure rate recommendations](https://docs.ternary.app/reference/getazurerecommendations.md): List all Azure rate recommendations for the authenticated tenant. Includes both reservation and savings plan recommendations based on historical usage patterns. Recommendations are refreshed periodically based on the latest usage data. - [Create billing rule](https://docs.ternary.app/reference/createbillingrule.md): Create a new billing rule in the Billing Rules Engine. Billing rules apply rule-based logic to cloud billing data to support chargeback, showback, cost redistribution, and internal billing workflows. Use `filters` to define which cost line items the rule applies to. `startTime` is required; omit `endTime` for an open-ended rule. **Rule types:** - `ADJUST_TO_LIST` — Normalize billing amounts to list prices. Optionally apply a percentage offset (positive for markup, negative for discount). - `APPLY_MARGIN` — Apply a percentage margin to matching costs. - `BACKOUT_LINE_ITEM` — Exclude specific line items from downstream billing views and reports. - `REALLOCATE_COSTS` — Redistribute costs from a source scope to one or more targets. - `RERATE` — Adjust billing amounts by applying a percentage offset to existing costs or credits. Each rule type requires a different `meta` shape. New rules are created in `PROCESSING` status while an asynchronous workflow validates and applies them; the rule transitions to `ACTIVE` on success or `FAILED_PROCESSING` on failure. Use the update endpoint to transition a rule to `INACTIVE` or `DRAFT` after creation. Returns the `ruleID` of the newly created rule. See [Billing Rules Engine](https://docs.ternary.app/docs/cost-allocation) for detailed configuration guidance. - [List billing rules](https://docs.ternary.app/reference/getbillingrules.md): List all billing rules for the specified tenant. Returns rules of all types and statuses. Use the `tenantID` query parameter to scope results. Each rule includes its full configuration, current status, and audit timestamps. - [Find billing rule](https://docs.ternary.app/reference/getbillingrule.md): Retrieve a single billing rule by its unique ID. The response includes the full rule configuration: type, filters, type-specific `meta` parameters, status, and audit timestamps. - [Update billing rule](https://docs.ternary.app/reference/updatebillingrule.md): Update an existing billing rule. Only the fields included in the request body are modified; omitted fields remain unchanged. Common updates include changing the rule name, adjusting the effective time range (`startTime`/`endTime`), modifying cost filters, updating type-specific `meta` parameters, or toggling the rule status. The rule type itself cannot be changed after creation. - [Delete billing rule](https://docs.ternary.app/reference/deletebillingrule.md): Permanently delete a billing rule. This action cannot be undone. Once deleted, the rule will no longer be applied during billing processing. Removing a rule fully reverses its impact on subsequent billing calculations. - [Create budget](https://docs.ternary.app/reference/createbudget.md): Create a new budget to track cloud spending. Budgets monitor actual spend against a target amount and notify subscribers when configurable thresholds are breached. Three amount types are supported: - **Specified amount** — A fixed dollar value for each period. - **Variable amount** — Different amounts per period, set via `periods`. - **Hierarchical amount** — Dimension-level allocations within the total. Returns the `budgetID` of the newly created budget. - [List budgets](https://docs.ternary.app/reference/getbudgets.md): List all budgets for the specified tenant. Returns budgets of all types including their current status, period versions, and threshold configurations. - [Update budget](https://docs.ternary.app/reference/updatebudget.md): Update an existing budget. Only the fields included in the request body are modified; omitted fields remain unchanged. Common updates include adjusting the target amount, modifying scopes, updating subscriber lists, or changing threshold percentages. - [Delete budget](https://docs.ternary.app/reference/deletebudget.md): Permanently delete a budget. This action cannot be undone. Once deleted, the budget will no longer track spend or send threshold notifications. - [Get budget](https://docs.ternary.app/reference/getbudget.md): Get a single budget by ID. Returns the budget including its current status, period versions, and threshold configuration. - [Create case](https://docs.ternary.app/reference/createcase.md): Create a new case for tracking a cloud cost optimization action. Cases are linked to resources such as recommendations, budgets, cost alerts, ramp plans, or reports. Optionally link the case to an external Jira issue. Returns the `caseID` of the newly created case. - [List cases](https://docs.ternary.app/reference/getcases.md): List all cases for the specified tenant. Returns cases of all types and statuses, including assignees, followers, and resource associations. - [Get case](https://docs.ternary.app/reference/getcase.md): Retrieve a single case by its unique ID. The response includes the full case details: status, assignees, followers, resource association, and any additional context. - [Update case](https://docs.ternary.app/reference/updatecase.md): Update an existing case. Only the fields included in the request body are modified; omitted fields remain unchanged. Common updates include changing the status, updating assignees or followers, modifying the description, or linking to an external issue. - [Create case comment](https://docs.ternary.app/reference/createcasecomment.md): Add a comment to an existing case. Comments support free-text and can optionally reference a report. Returns the `commentID` of the newly created comment. - [List cost alerts](https://docs.ternary.app/reference/getcostalerts.md): List all cost alerts for the specified tenant. Cost alerts are generated when an alert rule detects a cost anomaly. Each alert includes the observed value, expected range, and current status. - [Find cost alert](https://docs.ternary.app/reference/getcostalert.md): Retrieve a single cost alert by its unique ID. The response includes the full alert details: the triggering event, observed vs expected values, dimensions, and current status. - [Update cost alert](https://docs.ternary.app/reference/patchcostalert.md): Update the status of a cost alert. Use this endpoint to transition a cost alert between statuses. - [Create a Custom Label](https://docs.ternary.app/reference/createcustomlabel.md): Create a new Custom Label rule. Custom Labels create business-relevant labels from cloud billing data using rule-based conditions and output mappings. **Conditions** determine which billing line items the rule applies to. Filters support `equals`, `like` (wildcard), and `set` (key exists) operators. Conditions can be nested up to 3 levels using `and`, `or`, and `not` logical operators. **Output types:** - `TEMPLATE` — Generate label values using expression templates with variable substitution. - `MAPPING` — Assign label values based on the value of an existing billing field. - `DATA_MAPPING` — Bulk label assignment from an uploaded data source. Rules can be saved as `DRAFT` for review before being published, or published immediately to begin processing. See [Custom Labels](https://docs.ternary.app/docs/custom-labels) for detailed guidance. - [List all Custom Labels](https://docs.ternary.app/reference/getcustomlabels.md): Retrieve all Custom Label rules for the specified tenant. Returns each rule's condition tree, output configuration, and current processing status. Use to view which Custom Labels are active, in draft, or processing. See [Custom Labels](https://docs.ternary.app/docs/custom-labels) for more details. - [Update a Custom Label](https://docs.ternary.app/reference/updatecustomlabel.md): Update an existing Custom Label rule. All fields are optional — only the provided fields are updated. The rule can be transitioned between statuses (e.g. `DRAFT` to `ACTIVE`) by setting the `status` field. Changing conditions or outputs on an active rule triggers reprocessing of the affected billing data. See [Custom Labels](https://docs.ternary.app/docs/custom-labels) for more details. - [Delete a Custom Label](https://docs.ternary.app/reference/deletecustomlabel.md): Permanently delete a Custom Label rule. Labels previously generated by this rule will no longer be updated, but existing billing data retains the labels until the next processing cycle. See [Custom Labels](https://docs.ternary.app/docs/custom-labels) for more details. - [Create a custom measure](https://docs.ternary.app/reference/createcustommeasure.md): Create a custom measure with a user-defined formula. Custom measures let you define calculated fields using existing Analytics API schema fields as variables. Use `${fieldName}` syntax in the `formula` to reference schema fields. The `unitType` controls how the result is displayed: `CURRENCY`, `PERCENTAGE`, `BYTES`, `BINARY_BYTES`, `CORES`, `KILOGRAMS`, or `STANDARD`. - [List all custom measures](https://docs.ternary.app/reference/getcustommeasures.md): List all custom measures for the specified tenant. Each measure includes its formula, display name, target schema (data source), unit type, and audit timestamps. - [Update custom measure](https://docs.ternary.app/reference/updatecustommeasure.md): Update an existing custom measure. Only the fields included in the request body are modified; omitted fields remain unchanged. Common updates include changing the formula expression, display name, description, or unit type. - [Delete custom measure](https://docs.ternary.app/reference/deletecustommeasure.md): Permanently delete a custom measure. Any reports or dashboards referencing this measure will no longer be able to calculate it. This action cannot be undone. - [Get reports that depend on a custom measure](https://docs.ternary.app/reference/getdependentreportsforcustommeasure.md): Returns reports that reference the specified custom measure in their measures, filters, or data layers. The response includes only reports the caller has permission to see, plus a total count of all dependent reports. - [List data integrations](https://docs.ternary.app/reference/finddataintegrations.md): List all cloud data integrations for the specified tenant. Returns integrations for all supported cloud providers: GCP, AWS, Azure, Alibaba, Databricks, Oracle, Snowflake, MongoDB, and Custom Data. Each integration includes its current data status, configuration, and validation results. **Supported providers (`providerType`):** - `GCP` — Google Cloud Platform BigQuery billing exports - `AWS` — Amazon Web Services Cost and Usage Reports - `AZURE` — Microsoft Azure billing exports (EA, MCA, MPA) - `ALIBABA` — Alibaba Cloud billing via S3-compatible CUR - `DATABRICKS` — Databricks workspace usage and billing - `OCI` — Oracle Cloud Infrastructure billing - `SNOWFLAKE` — Snowflake warehouse usage and credit data - `MONGO_DB` — MongoDB Atlas billing (read-only) - `CUSTOM_DATA` — User-defined cost data from S3, GCS, Azure Blob, or BigQuery See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for details. - [Create Alibaba integration](https://docs.ternary.app/reference/createalibabaintegration.md): Create a new Alibaba Cloud data integration. Configure S3-compatible Cost and Usage Reports with cross-account IAM role access. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Alibaba integration](https://docs.ternary.app/reference/updatealibabaintegration.md): Update an existing Alibaba Cloud data integration. - [Delete Alibaba integration](https://docs.ternary.app/reference/deletealibabaintegration.md): Delete an Alibaba Cloud data integration. - [Create AWS integration](https://docs.ternary.app/reference/createawsintegration.md): Create a new AWS data integration for importing Cost and Usage Report (CUR) data. Configure one or more CUR sources, an IAM role ARN for cross-account access, and optional linked accounts for consolidated billing. An optional monitoring role ARN can be provided for CloudWatch metrics collection. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update AWS integration](https://docs.ternary.app/reference/updateawsintegration.md): Update an existing AWS data integration. - [Delete AWS integration](https://docs.ternary.app/reference/deleteawsintegration.md): Delete an AWS data integration. - [Create Azure integration](https://docs.ternary.app/reference/createazureintegration.md): Create a new Azure data integration for importing billing exports. **Integration types (`type`):** - `EA` — Enterprise Agreement - `MCA` — Microsoft Customer Agreement - `MPA` — Microsoft Partner Agreement - `CSP_LEGACY` — Legacy Cloud Solution Provider Configure billing export sources from Azure Storage, app registration credentials, and the billing model type. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Azure integration](https://docs.ternary.app/reference/updateazureintegration.md): Update an existing Azure data integration. - [Delete Azure integration](https://docs.ternary.app/reference/deleteazureintegration.md): Delete an Azure data integration. - [Create Custom Data integration](https://docs.ternary.app/reference/createcustomdataintegration.md): Create a new Custom Data integration for importing user-defined cost data. **Source types (`sourceType`):** - `S3_BUCKET` — Amazon S3 - `GCS_BUCKET` — Google Cloud Storage - `AZURE_BLOB` — Azure Blob Storage - `GCP_BIGQUERY` — Google BigQuery table Configure the storage URI, authentication, and column mappings to define how source data maps to Ternary's cost model. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Custom Data integration](https://docs.ternary.app/reference/updatecustomdataintegration.md): Update an existing Custom Data integration. - [Delete Custom Data integration](https://docs.ternary.app/reference/deletecustomdataintegration.md): Delete a Custom Data integration. - [Create Databricks integration](https://docs.ternary.app/reference/createdatabricksintegration.md): Create a new Databricks data integration for importing workspace usage and billing data. Configure an OAuth client ID and one or more workspace connections. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Databricks integration](https://docs.ternary.app/reference/updatedatabricksintegration.md): Update an existing Databricks data integration. - [Delete Databricks integration](https://docs.ternary.app/reference/deletedatabricksintegration.md): Delete a Databricks data integration. - [Create GCP integration](https://docs.ternary.app/reference/creategcpintegration.md): Create a new Google Cloud data integration for importing BigQuery billing export data. Configure the billing export source (dataset, project, table), optional BigQuery monitoring for query cost tracking, committed use discount (CUD) sharing, and optional detailed billing, carbon footprint, and pricing exports. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update GCP integration](https://docs.ternary.app/reference/updategcpintegration.md): Update an existing GCP data integration. - [Delete GCP integration](https://docs.ternary.app/reference/deletegcpintegration.md): Delete a GCP data integration. - [Create Oracle integration](https://docs.ternary.app/reference/createoracleintegration.md): Create a new Oracle Cloud Infrastructure (OCI) data integration. Configure the tenancy OCID, user OCID, region, and Object Storage bucket for billing data. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Oracle integration](https://docs.ternary.app/reference/updateoracleintegration.md): Update an existing Oracle Cloud Infrastructure data integration. - [Delete Oracle integration](https://docs.ternary.app/reference/deleteoracleintegration.md): Delete an Oracle Cloud Infrastructure data integration. - [Create Snowflake integration](https://docs.ternary.app/reference/createsnowflakeintegration.md): Create a new Snowflake data integration for importing warehouse usage and credit data. Configure the organization name and one or more account connections with credentials. See [Data Integrations](https://docs.ternary.app/docs/integrations-overview) for setup guidance. - [Update Snowflake integration](https://docs.ternary.app/reference/updatesnowflakeintegration.md): Update an existing Snowflake data integration. - [Delete Snowflake integration](https://docs.ternary.app/reference/deletesnowflakeintegration.md): Delete a Snowflake data integration. - [Create dimension preferences](https://docs.ternary.app/reference/createdimensionpreference.md): Create dimension display preferences for a specific data source. Dimension preferences control the order and visibility of dimensions in reports and dashboards. Each preference specifies a `category`, a `priority` (lower numbers appear first), and a list of dimension `values` in the preferred display order. - [List all dimension preferences](https://docs.ternary.app/reference/getdimensionpreferences.md): List all dimension preferences for the specified tenant. Results include preferences across all data sources. Each preference includes its category, priority, values, and the data source it applies to. - [Update dimension preferences](https://docs.ternary.app/reference/updatedimensionpreferences.md): Update existing dimension preferences. Replaces the preference configuration for the specified data source. Use this to reorder dimensions, add new values, or change category priorities. - [List GCP Rate Recommendations](https://docs.ternary.app/reference/getcudrecommendations.md): List all GCP Committed Use Discount (CUD) recommendations for the authenticated tenant. CUD recommendations identify opportunities to reduce costs by purchasing resource-based or spend-based commitments. CUD recommendations are refreshed periodically based on the latest usage data. - [Create Jira integration](https://docs.ternary.app/reference/createintegrationjira.md): Create a new Jira integration for linking cost optimization cases to Jira issues. When a case is created in Ternary, a corresponding Jira issue is automatically created in the configured project. Configure the Jira Cloud instance URL, project, issue type, and optional workflow transition for automatic status synchronization. See [Jira Integration](https://docs.ternary.app/docs/jira) for setup guidance. - [Get Jira integration](https://docs.ternary.app/reference/getintegrationsjira.md): List all Jira integrations for the specified tenant. Returns integration details including the connected Jira instance, project, and issue configuration. - [Update Jira integration](https://docs.ternary.app/reference/updateintegrationjira.md): Update an existing Jira integration. - [Delete Jira integration](https://docs.ternary.app/reference/deleteintegrationjira.md): Delete a Jira integration. - [Create Slack integration](https://docs.ternary.app/reference/createintegrationslack.md): Create a new Slack integration for receiving cost alert notifications. When alert rules trigger, notifications are posted to the configured Slack channel. Requires a Slack OAuth access token obtained through the Slack app authorization flow. See [Slack Integration](https://docs.ternary.app/docs/slack) for setup guidance. - [Get Slack integration](https://docs.ternary.app/reference/getintegrationsslack.md): List all Slack integrations for the specified tenant. Returns integration details including the connected workspace, channel, and authorization information. - [Update Slack integration](https://docs.ternary.app/reference/updateintegrationslack.md): Update an existing Slack integration. - [Delete Slack integration](https://docs.ternary.app/reference/deleteintegrationslack.md): Delete a Slack integration. - [List all label maps](https://docs.ternary.app/reference/getlabelmaps.md): List all label maps for the specified tenant. Label maps provide the mapping between custom label names (human-readable) and their corresponding internal column names used in the Analytics API. The response is keyed by data source, with each entry containing a map of custom label names to column identifiers. - [Create measure preferences](https://docs.ternary.app/reference/createmeasurepreference.md): Create measure display preferences for a specific data source. Measure preferences control the order and visibility of measures in reports and dashboards. Each preference specifies a `category`, a `priority` (lower numbers appear first), and a list of measure `values` in the preferred display order. - [List measure preferences](https://docs.ternary.app/reference/getmeasurepreferences.md): List all measure preferences for the specified tenant. Results include preferences across all data sources. Each preference includes its category, priority, values, and the data source it applies to. - [Update measure preferences](https://docs.ternary.app/reference/updatemeasurepreference.md): Update existing measure preferences. Replaces the preference configuration for the specified data source. Use this to reorder measures, add new values, or change category priorities. - [Create MSP billing information](https://docs.ternary.app/reference/createmspbillinginfo.md): Create billing information for an MSP tenant. Includes address, payment terms, and customer details used for invoice generation. See [MSP Platform](https://docs.ternary.app/docs/ternary-msp-platform) for details. - [List MSP billing information](https://docs.ternary.app/reference/getmspbillinginfo.md): List all billing information records for the specified MSP tenant. - [Update MSP billing information](https://docs.ternary.app/reference/updatemspbillinginfo.md): Update an MSP billing information record. - [Delete MSP billing information](https://docs.ternary.app/reference/deletemspbillinginfo.md): Delete an MSP billing information record. - [List MSP child data integrations](https://docs.ternary.app/reference/getmspchilddataintegrations.md): List data integrations for all child tenants of the MSP. Returns a summary of each integration including provider type and data status. - [List MSP child resources](https://docs.ternary.app/reference/getmspchildresources.md): List aggregated resources across all child tenants. Returns data integrations and users for each child tenant. - [List MSP child users](https://docs.ternary.app/reference/getmspchildusers.md): List users across all child tenants of the MSP. - [Create new MSP child tenant](https://docs.ternary.app/reference/createmspchildtenant.md): Create a new child tenant under an MSP parent. The parent is specified via `parentTenantID` in the request body; the authenticated caller must have MSP-admin permission on that parent. The `type` field should be set to `MSP_CUSTOMER` for child tenants managed by the MSP parent. New child tenants are created in the `ACTIVE` state. Use the update endpoint to suspend (`INACTIVE`) or reactivate later. After creation, use the MSP Tenant Settings endpoints to configure feature access for the child. See [MSP Customer Management](https://docs.ternary.app/docs/msp-customer-management) for detailed MSP administration guidance. - [Update existing MSP child tenant](https://docs.ternary.app/reference/updatemspchildtenant.md): Update an existing child tenant's configuration. Only the fields included in the request body are modified; omitted fields remain unchanged. This endpoint is only available to MSP parent tenants. Common updates include changing the tenant name, fiscal calendar, notification preferences, preferred currency, or status. See [MSP Customer Management](https://docs.ternary.app/docs/msp-customer-management) for detailed MSP administration guidance. - [List MSP shared payer integrations](https://docs.ternary.app/reference/getmspsharedpayerintegrations.md): List all shared payer integrations configured for the MSP. Shared payer integrations allow child tenants to access billing data from a parent tenant's cloud provider integration. - [Create MSP shared payer integrations](https://docs.ternary.app/reference/createmspsharedpayerintegrations.md): Create one or more shared payer integrations for child tenants. - [Update MSP shared payer integration](https://docs.ternary.app/reference/updatemspsharedpayerintegrations.md): Update an existing shared payer integration. - [List MSP tenant settings](https://docs.ternary.app/reference/getmsptenantsettings.md): List MSP tenant settings for the specified tenant. Controls which cloud provider features (metrics, rate recommendations, usage recommendations) are enabled for child tenants. See [MSP Tenant Settings](https://docs.ternary.app/docs/ternary-msp-platform) for details. - [Update MSP tenant setting](https://docs.ternary.app/reference/updatemsptenantsetting.md): Update MSP tenant settings for a specific child tenant. See [MSP Tenant Settings](https://docs.ternary.app/docs/ternary-msp-platform) for details. - [List permissions](https://docs.ternary.app/reference/getpermissions.md): List all available permissions in the system. Permissions are identified by a unique `slug` (e.g., `billing:read`, `reports:write`) and are assigned to roles. Use this endpoint to discover which permissions exist when configuring role-based access control for your organization. - [Create ramp plan](https://docs.ternary.app/reference/createrampplan.md): Create a financial ramp plan for forecasting and tracking cloud spend commitments over time. Ramp plans define spending targets with breakpoints to track progress against planned budgets. See [Ramp Plans](https://docs.ternary.app/docs/ramp-plans) for configuration guidance. - [List ramp plans](https://docs.ternary.app/reference/getrampplans.md): List all ramp plans for the authenticated tenant. See [Ramp Plans](https://docs.ternary.app/docs/ramp-plans) for more details. - [Update ramp plan](https://docs.ternary.app/reference/updaterampplan.md): Update an existing ramp plan's configuration, including name, commitments, breakpoints, and non-export offsets. - [Delete ramp plan](https://docs.ternary.app/reference/deleterampplan.md): Delete an existing ramp plan by its unique identifier. - [Create report](https://docs.ternary.app/reference/createreport.md): Create a new cost and usage report. Reports visualize cloud billing data with configurable dimensions, measures, filters, and chart types. **Chart types:** `AREA`, `CLUSTERED_BAR`, `KPI`, `LINE`, `PIE`, `STACKED_AREA`, `STACKED_BAR`, `TABLE`, `VARIANCE` **Duration types:** `CUSTOM`, `INVOICE`, `LAST_MONTH`, `LAST_N_DAYS`, `LAST_N_MONTHS`, `LAST_NINETY_DAYS`, `LAST_SEVEN_DAYS`, `LAST_THIRTY_DAYS`, `MONTH_TO_DATE`, `QUARTER_TO_DATE`, `TODAY`, `YEAR_TO_DATE`, `YESTERDAY` **Scope values:** `GLOBAL` (visible to all), `PRIVATE` (visible to creator only), `SHARED` (visible to specific users) See [Reports](https://docs.ternary.app/docs/reports) for configuration guidance. - [List reports](https://docs.ternary.app/reference/getreports.md): Returns reports by IDs or all reports for a tenant. Provide either `tenantID` to list all reports for an organization, or `reportIDs` to retrieve specific reports. See [Reports](https://docs.ternary.app/docs/reports) for more details. - [Find report](https://docs.ternary.app/reference/getreport.md): Retrieve a single report by its unique identifier. - [Update report](https://docs.ternary.app/reference/updatereport.md): Update an existing report's configuration, including chart type, dimensions, measures, filters, and date range settings. - [Delete report](https://docs.ternary.app/reference/deletereport.md): Delete an existing report by its unique identifier. - [Transfer report ownership](https://docs.ternary.app/reference/transferreportownership.md): Reassign a report's owner to another active member of the tenant who holds report read access. Requires the `TRANSFER_REPORT_OWNERSHIP` permission. Used to re-home reports orphaned by user offboarding. - [Create a resource subscription](https://docs.ternary.app/reference/createresourcesubscription.md): Create an email subscription for automated delivery of reports or dashboards. Subscriptions send scheduled emails at the specified frequency. **Frequency options:** `DAILY`, `WEEKLY`, `MONTHLY` For weekly subscriptions, specify `dayOfWeek`. For monthly subscriptions, specify `weekOfMonth`. See [Reports](https://docs.ternary.app/docs/reports) for more details. - [Update resource subscription](https://docs.ternary.app/reference/updateresourcesubscription.md): Update an existing resource subscription's delivery schedule or recipients. - [Delete resource subscription](https://docs.ternary.app/reference/deleteresourcesubscription.md): Delete an existing resource subscription by its unique identifier. - [List roles](https://docs.ternary.app/reference/getroles.md): List all roles available in the specified tenant. Each role defines a set of permissions that control what actions users with that role can perform. Roles can optionally include a `visibilityPermission` that restricts data visibility and a nested `permissions` array listing the individual permission grants. - [Create savings opportunity filter](https://docs.ternary.app/reference/createsavingsopportunityfilter.md): Create a new savings opportunity filter for the authenticated tenant. Savings opportunity filters define criteria for viewing and organizing savings recommendations (rate, usage, or both). Filters can be shared across the organization for consistent views. - [List savings opportunity filters](https://docs.ternary.app/reference/getsavingsopportunityfilters.md): List all savings opportunity filters for the authenticated tenant. - [Find savings opportunity filter](https://docs.ternary.app/reference/getsavingsopportunityfilter.md): Retrieve a single savings opportunity filter by its unique identifier. - [Update a savings opportunity filter](https://docs.ternary.app/reference/updatesavingsopportunityfilter.md): Update an existing savings opportunity filter by its unique identifier. - [Delete savings opportunity filter](https://docs.ternary.app/reference/deletesavingsopportunityfilter.md): Delete an existing savings opportunity filter by its unique identifier. - [Create scoped view](https://docs.ternary.app/reference/createscopedview.md): Create a scoped view that applies default filters to restrict data visibility for users. Scoped views enforce data boundaries across reports and dashboards. See [Scoped Views](https://docs.ternary.app/docs/scoped-views) for configuration guidance. - [List all scoped views](https://docs.ternary.app/reference/getscopedviews.md): Returns all scoped views for a specific tenant. See [Scoped Views](https://docs.ternary.app/docs/scoped-views) for more details. - [Update scoped view](https://docs.ternary.app/reference/updatescopedview.md): Update an existing scoped view's filters or configuration. - [Delete scoped view](https://docs.ternary.app/reference/deletescopedview.md): Delete an existing scoped view by its unique identifier. - [Create support ticket](https://docs.ternary.app/reference/createsupportticket.md): Submit a support ticket to the Ternary support team. The requester's name and email are automatically populated from the authenticated session — no identity fields are required in the request body. Optionally include one or more `ccEmails` addresses to copy additional recipients on the ticket. - [Find tenant](https://docs.ternary.app/reference/gettenant.md): Retrieve a single tenant by its unique ID. The response includes the tenant's profile, fiscal calendar, notification preferences, data source configuration, preferred currency, and current status. - [Create a tenant SSO config](https://docs.ternary.app/reference/createtenantssoconfig.md): Bind a tenant to an existing Auth0 enterprise connection and (optionally) enable IdP-initiated SAML logins by minting a static nonce mirrored to Auth0. - [Find a tenant's SSO config](https://docs.ternary.app/reference/gettenantssoconfig.md): Retrieve the SSO config for a tenant. Each tenant has at most one SSO config; returns 404 if the tenant has no SSO configured. - [Update a tenant SSO config](https://docs.ternary.app/reference/updatetenantssoconfig.md): Update auto-join and/or IdP-initiated settings on an existing tenant SSO config. Setting allowIDPInitiated from false to true rotates the static nonce; setting it to false clears the nonce and re-syncs the matching Auth0 connection. - [Delete a tenant SSO config](https://docs.ternary.app/reference/deletetenantssoconfig.md): Permanently delete a tenant SSO config. Also clears IdP-initiated settings on the matching Auth0 connection so the connection cannot accept SP-less logins after deletion. - [List all usage recommendations](https://docs.ternary.app/reference/getrecommendations.md): List all usage optimization recommendations for the authenticated tenant. Recommendations are generated from cloud provider advisors and Ternary's proprietary analysis engine. Recommendations are refreshed periodically based on the latest usage data. - [Update usage recommendations](https://docs.ternary.app/reference/updaterecommendations.md): Bulk update multiple usage recommendations. Accepts an array of recommendation updates in the request body. **Supported fields:** - `state` — Update the recommendation state (e.g. `accepted`, `snoozed`, `asDesigned`) - `snoozeUntil` — Set or clear the snooze timestamp - [Find a usage recommendation](https://docs.ternary.app/reference/getrecommendation.md): Retrieve a single usage optimization recommendation by its unique identifier. - [Update a usage recommendation](https://docs.ternary.app/reference/updaterecommendation.md): Update a single usage recommendation by its unique identifier. **Supported fields:** - `applicable` — Set recommendation applicability - `state` — Update the recommendation state - `snoozeUntil` — Set or clear the snooze timestamp - [Find yourself](https://docs.ternary.app/reference/me.md): Retrieves information about the currently authenticated user using the JWT cookie provided by the authentication service. The response includes the user's profile (name, email, avatar, theme preference), global roles, and the list of tenants the user has access to — each enriched with the user's tenant-specific roles, feature flags, and settings. - [List users](https://docs.ternary.app/reference/getusers.md): List users matching the specified criteria. Provide `userIDs` to look up specific users, or `tenantID` to list all users with access to an organization. If both are provided, `tenantID` takes precedence. When `includeSettings` is `true`, each user object includes the nested `tenantSettings` containing notification preferences, dashboard preferences, recommendation filters, and display settings for the specified tenant. Alternatively, provide `reportOwnerCandidatesInTenantID` or `dashboardOwnerCandidatesInTenantID` (checked before `userIDs`/`tenantID`) to list the members eligible to become a report's or dashboard's owner in that tenant. This mode requires the corresponding `TRANSFER_*_OWNERSHIP` permission and returns the minimal `{ candidates }` projection instead of `{ users }`. - [Find a user](https://docs.ternary.app/reference/getuser.md): Retrieve a single user by their unique ID. The response includes the user's profile information, login count, current status, and SSO user group memberships. - [Update user](https://docs.ternary.app/reference/updateuser.md): Update a user's profile by their unique ID. Only the fields included in the request body are modified; omitted fields remain unchanged. Updatable fields include name, avatar, theme mode (`DARK` or `LIGHT`), and notification preferences. - [Grant Users access to Tenants](https://docs.ternary.app/reference/grantuserstenantaccess.md): Grant one or more users access to one or more tenants. Each user receives the specified role within the target tenant(s). This operation is idempotent — granting access that already exists has no effect. - [Grant Users access to MSPs](https://docs.ternary.app/reference/grantusersmspaccess.md): Grant one or more users global MSP-level access. Users with MSP access can manage child tenants, billing configuration, and cross-tenant operations. This operation is idempotent — granting access that already exists has no effect. - [Revoke User access to a tenant](https://docs.ternary.app/reference/revokeusertenantaccess.md): Revoke a user's access to a specific tenant. The user will no longer be able to view or manage resources within that tenant. This operation is idempotent — revoking access that does not exist has no effect. - [Revoke User access to MSPs](https://docs.ternary.app/reference/revokeusermspaccess.md): Revoke a user's global MSP-level access. The user will no longer be able to manage child tenants or perform cross-tenant operations. This operation is idempotent — revoking access that does not exist has no effect. - [Create user group config](https://docs.ternary.app/reference/createusergroupconfig.md): Create a user group configuration. User group configs map SSO user groups to scoped view assignments, controlling which data views are visible to group members. Each scoped view assignment has a status: `ENABLED` (visible and optional), `ENABLED_STRICT` (visible and enforced), `ENFORCED` (always active), or `DISABLED` (hidden). - [List user group configs](https://docs.ternary.app/reference/getusergroupconfigs.md): List all user group configurations for the specified tenant. Each configuration includes the group name, scoped view assignments with their statuses, and audit timestamps. - [Update user group config](https://docs.ternary.app/reference/updateusergroupconfig.md): Update an existing user group configuration. Only the fields included in the request body are modified; omitted fields remain unchanged. Use this to add or remove scoped view assignments, change their statuses, or rename the group. - [Delete user group config](https://docs.ternary.app/reference/deleteusergroupconfig.md): Permanently delete a user group configuration. Users in the associated SSO group will lose their scoped view assignments. This action cannot be undone. - [Query](https://docs.ternary.app/reference/post_query-load.md): Analytics - [Fetch Metadata](https://docs.ternary.app/reference/get_meta-focus.md): Fetch available dimensions and measures for Analytics API querying for a tenant