Skip to content

Accounting · Beta

Planful
API integration

Ship Accounting features without building the integration. Full Planful API access via Proxy and 40+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Built for specific customer use cases. Issues are resolved quickly.

Talk to us
Planful

Use Cases

Why integrate with Planful

Common scenarios for SaaS companies building Planful integrations for their customers.

01

Sync corporate spend into FP&A budgets

Spend management and AP automation platforms can push categorized actuals into Planful so finance teams see real-time burn against forecasted budgets instead of waiting for month-end close.

02

Automate headcount and workforce planning

HRIS and payroll products can push active employee rosters, compensation changes, and department mappings into Planful so FP&A teams always forecast against an accurate workforce baseline.

03

Feed marketing spend into departmental budgets

Marketing performance platforms can sync campaign-level costs into Planful's planning models, letting marketing leaders justify ROI directly against the budgets finance owns.

04

Expose Planful as a source for data warehouses and BI

ETL and analytics platforms can extract general ledger data and fully-calculated Planful reports into Snowflake, BigQuery, or Power BI so customers can blend finance data with the rest of their stack.

05

Trigger model recalculations from operational systems

Ops and revenue platforms can clear stale slices, load fresh driver data, and trigger Planful's calculation engine so downstream forecasts stay in sync with upstream operational changes.

What You Can Build

Ship these features with Truto + Planful

Concrete product features your team can ship faster by leveraging Truto’s Planful integration instead of building from scratch.

01

Batched GL and transaction uploads via Data Load Rules

Discover the right Data Load Rule for a customer's ledger and push high-volume actuals using chunked data transfers that complete atomically — no manual DLR mapping in-app.

02

Budget entity and segment hierarchy sync

Export a customer's budget entity tree, GL segments, and attribute hierarchies so your product can present Planful's chart of accounts natively in your own category or dimension pickers.

03

Dynamic Planning model data loader

Ship a feature that clears existing model slices and loads refreshed data into Planful's Dynamic Planning models, with the ability to kick off a calculation run and poll its status.

04

Planful report extraction connector

Pull post-consolidation report data — including row/column headers and calculated values — directly from Planful reports for use in dashboards, exports, or downstream warehouses.

05

User and approval role provisioning

Automate Planful user lifecycle: create users, bulk update or delete them, assign support/task manager roles, and manage scenario access and user group mappings from your admin UI.

06

Data load status monitoring

Give customers a live view of running and historical data loads in Planful so failed or in-progress transfers surface inside your product instead of requiring a login to Planful.

SuperAI

Planful AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

create_a_planful_data_transfer

Transfer data to Planful in a single call against a Data Load Rule (DLR). Returns: DataLoadRuleId, ExcecutionId, ChunksReceived, RecordsReceived, RunAsynchronously, Attempts, TransferResponse, DataLoadRuleConfig, Payload. Requires DataLoadRuleConfig and Payload. Max 40MB per request.

planful_data_transfers_bulk_update

Transfer Planful data in batches when the load exceeds limits. Returns: DataLoadRuleId, ExcecutionId, ChunksReceived, RecordsReceived, RunAsynchronously, Attempts, TransferResponse, DataLoadRuleConfig, Payload. Requires DataLoadRuleConfig and Payload; complete the load via the IsLoadCompleted header or a null Payload. Max 40MB per request.

planful_data_transfers_complete

When you are about to send the last request, you can either add the IsLoadCompleted parameter in the Header and provide its value as True or you provide the value for the payLoad parameter in the request body as Null . Final batch of a batched transfer: sends IsLoadCompleted=true so Planful closes the load. Returns: DataLoadRuleId, ExcecutionId, ChunksReceived, RecordsReceived, RunAsynchronously, Attempts, TransferResponse, properties. Required: payload, DataLoadRuleName, ColumnDelimiter.

create_a_planful_data_transferfile

Transfer one or more CSV or ZIP data files into Planful through a data load rule. Returns: DataLoadRuleId, ExcecutionId, RunAsynchronously, Attempts, TransferResponse, DataLoadRuleConfig, Payload. Required: data_load_rule_name, column_delimiter, file. ZIP files must contain base64-encoded CSV.

list_all_planful_data_load_rules

List all data load rules (DLRs) you have access to in Planful. Returns an array of rules, each with DataLoadRuleId, Name, and LoadItem (the DLR type).

list_all_planful_gl_data_load_rules

List the GL data and GL with Translations data load rules (DLRs) available to you in Planful. Returns: DataLoadRuleId, Name, LoadItem.

list_all_planful_transaction_data_load_rules

List the Transactions data DLRs (Data Load Rules) in Planful that you have access to. Returns: DataLoadRuleId, Name, LoadItem.

list_all_planful_data_load_status

When you initiate a DLR execution through REST API, the API will return an Execution ID in the response. You can now use that Execution ID to know the status of a DLR execution. This API now fetches information about both Sync and Async API execution types. The API can return any of the following execution statuses: Uploading Uploaded Processing Processed Failed Unknown Abandoned Returns: ExecutionId, ChunksReceived, RecordsReceived, LastBatchReceivedDateTimeUtc, LoadCompletedDateTimeUtc, TransferStartedDateTimeUtc, TransferCompletedDateTimeUtc, Attempts, ExecutionStatus. Required: ExecutionId.

list_all_planful_running_data_load_status

You can use the GetRuningDataLoadStatus API to know if there is any execution going on for any DLR. This API just requires the DLR name as the query string parameter and it retrieves detailed information about the execution. If there is no active DLR execution, then the API will return a “404 Not Found” message. If there is any ongoing DLR execution, you will receive the following parameters in re Returns: ExecutionId, ChunksReceived, RecordsReceived, LastBatchReceivedDateTimeUtc, LoadCompletedDateTimeUtc, TransferStartedDateTimeUtc, Attempts, ExecutionStatus. Required: dlrName.

list_all_planful_gl_data

Use this API to retrieve the GL data. To get the GL data, providing the Scenario as a query parameter is mandatory while sending the API request. If you want the GL data of an Actual scenario, it is mandatory to provide the fiscal year as a query parameter. Notes : - The GL Data Extract API retrieves data only for leaf-level members in Segment1 to Segment8. All segment filters in the query paramet Returns: properties, Scenario, FiscalYear, Segment1, Segment2, Segment3, Segment4, Segment5, Segment6, Segment7. Required: Scenario.

list_all_planful_segment_1_data

Use this API to retrieve the Segment 1 data. Each Seg1 data row represents a segment 1 entry in the database. When you invoke this API with any Odata filter, the API queries the Seg1 data rows based on the filter criteria. Supports OData query options such as $filter passed as query parameters. Returns: properties, MemberId, Code, Name, RollupOperator, MemberType, ActiveStatus, Sort, ParentMemberId, AccountType.

list_all_planful_segment_2_data

Use this API to retrieve the Segment 2 data. Each Seg2 data row represents a segment 2 entry in the database. When you invoke this API with any Odata filter, the API queries the Seg2 data rows based on the filter criteria. Supports OData query options such as $filter passed as query parameters. Returns: properties, MemberId, Code, Name, RollupOperator, MemberType, ActiveStatus, Sort, ParentId, CurrencyCode.

list_all_planful_segment_data

Use this API to retrieve the Segment 3 data. Each Seg3 data row represents a segment 3 entry in the database. When you invoke this API with any Odata filter, the API queries the Seg3 data rows based on the filter criteria. Supports OData query options such as $filter passed as query parameters. Returns: properties, MemberId, Code, Name, RollupOperator, MemberType, ActiveStatus, Sort, ParentId, ParentCode. Required: segment.

create_a_planful_attribute_hierarchy_export

Use this API to export attribute hierarchy details in any of the following formats: Tree Parent Child Level-Based By default, if only the AttributeHierarchy and Dimension parameters are passed, the API exports the hierarchy in Tree format. To export in a specific structure, include the ExportType parameter with one of the supported values: Tree, ParentChild, or LevelBased. The exported data can be Read-only export despite POST. Returns: properties, Line Id, Line Name, Line Type. Required: AttributeHierarchy, Dimension.

create_a_planful_budget_entity_hierarchy_export

Exports the Budget Entity hierarchy in the specified structure. Use the Type parameter to export the hierarchy in Tree, Parent-Child, Level-Based, or Leaf-Level format. If Type is not specified, the API exports the hierarchy in Tree format by default. Read-only export despite POST. Returns: properties, Child Code, Child Name, Parent Code, Parent Name, Member Type, Entity Type, Rollup Operator, Currency Code, Currency Name. Required: Type.

planful_report_data_search

Use the GetReportData API to retrieve the metadata (the report structure) and data (the data in the report) directly from your financial reports generated within Planful. Read-only retrieval despite POST. Returns: RowHeaders, items, ColumnHeaders, items, Data, items, Status, StatusMessage. Required: ReportCode, Lineage, CubeName, PageFilters.

create_a_planful_process_run

This API allows you to execute a Process Flow in Cloud Scheduler. With the process flow code, you can trigger the sequence of operations in Cloud Scheduler. Authorization Use the Access ID and Access Key generated from the application as Username and Password respectively to successfully authorize the transfer request. Refer to Generate Access ID and Access Key topic to know the details about gene Required: Code.

create_a_planful_attribute_hierarchy_move

The Move Attribute Hierarchy Leaf Member API allows you to bulk update parent-child relationships for leaf-level members within an attribute hierarchy. Use this API to restructure hierarchies by reassigning or reordering leaf members under different parent members. Supported Hierarchy Type Export Parent Child Steps to Move Attribute Hierarchy Members Export the Parent Child hierarchy Navigate to H Required: HierarchyMoveFile.

create_a_planful_model_attribute_append

Use this API to create or append attributes and attribute hierarchies, specify display labels for attributes, and create or modify attribute-to-dimension-member mappings in Master and Analytic models. To create or append attributes and attribute hierarchies, include the “attribute-members:[ ]”. To map attribute leaves to dimension leaves, include the “attribute-mapping:[ ]”. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, dimensionName, attributeName, delimiter, attributeMembers, attributeMappings.

create_a_planful_model_member_append

Use this REST API to append dimension members in Master and Analytic models. You can load Display Label as an optional parameter. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, dimensionName, delimiter, hierarchy, members.

create_a_planful_model_calculation_run

Use this API to run a Calculation defined on a Master or Analytic model. You can invoke only one Calculation per API call, and this API invokes only those Calculations enabled to run in the background. Invoking any other type of Calculation will result in an error. You can also optionally pass variables and values for variables into the calculation. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, calcScriptName.

planful_model_calculation_statuses_search

Use this API to get the status of the Calculation. Please note that the request payload is the same as the run calculation payload. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Read-only status check despite POST. Returns: modelName, calcScriptName, status, lastStatus, description, runInBackground, lastRunTime. Required: modelName, calcScriptName.

create_a_planful_model_data_clear

Use this API to clear the data from Master and Analytic models based on the scope of the API definition. This API results in Success even if the data for that model was cleared in previous calls. You can either clear specific data or the entire model. Use filters to clear only specific data. For example, you can clear data for a specific period, department, or company using filters. To clear the e Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, dimension.

create_a_planful_model_leaf_data_clear

Use this API to clear leaf data from Master and Analytic models based on the scope of the API definition. This API results in success even if the data for that model was cleared in previous calls. You can either clear specific clear leaf data or the entire model. You can use filters to clear specific leaf data. For example, leaf data of the required period, department, or company. Use the API with Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, dimension.

create_a_planful_model_dimension_export

This API allows you to export the entire dimension/attribute hierarchy from a specified model in JSON format. Example requests and responses in JSON formats are provided below with dimension and attribute examples. Hierarchy member code Hierarchy member parent Hierarchy member rollup operator Hierarchy member display label Mapped attributes Mapped dimensions Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Read-only export despite POST. Returns: members, items, properties. Required: model, dimension.

create_a_planful_model_data_export

This API allows you to export the leaf level data from a specified model in JSON format. Additionally, you can specify one or more filters to export specific data, and you can use attributes as filters. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Read-only export despite POST. Returns: properties, Scenario, Time, Account, Amount, Department. Required: model, dimension, filterType, value.

create_a_planful_model_data_load

Use this API to import data to a Master or an Analytic model. User can do any of the following. Import all data to the model Import using incremental data loads in which the data can be updated to the new dimensions of existing model. If the model already contains data, use the clear data API to remove it, and then import new data into the model. Optionally, you can configure the API to do the fol Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, delimiter, aggregate, data, PageDimension, PageMember, ColumnNumber, ColumnDimension, DimensionMember.

create_a_planful_source_model_data_clear

The Clear Data API clears existing data from an External Source Model based on the scope of the definition. When clearing data from an external source model, you can clear specific data or the entire model. To clear specific data, use filters. To clear all model data, use the API without filters. For example, leaf data of the required period, department, or company. This API works with both the le Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName.

create_a_planful_source_model_metadata_clear

This API helps to clear metadata from an external Data Source model. This API can be invoked to clear specific dimensions or all dimensions of an external Data Source model. If you have cleared data in the previous call, the clear Data API will still return a success result. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: modelName, dimensionName.

create_a_planful_source_model_data_export

This API allows you to export leaf-level data from a specified external source model in XML format. Optionally, you can specify one or more filters to export specific data and you can specify which fields to export. This API works with both the legacy External Source Model functionality and the newest implementation of ESM. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Read-only export despite POST; response is XML. Required: modelName, delimiter.

create_a_planful_source_model_data_load

Use this API to import data into an external Data Source model. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Required: ColumnNumber, ColumnHeader, Data.

create_a_planful_source_model_metadata_load

Use this API to load metadata to an external Data Source model. This API supports the import of level-based source dimension metadata. Support for the import of parent-child based source dimension metadata will be added in the future. You can import a single dimension’s metadata per request. Uses the Dynamic Planning access token (X-Access-Token), not the Access ID and Key. Returns no body on success (204). Required: DimensionMembers.

list_all_planful_approval_roles

Use this API to retrieve the budget entity (rollup/leaf level) and the corresponding approval role assigned to each user within the system. If a user has multiple approval roles assigned, the API will retrieve all budget entities along with their respective approval roles. To obtain the approval role list, provide the StartIndex value as a query parameter. Notes: The default batch size is 5000 rec Returns: BudgetEntityApprovalRoles, items, properties, Success, HasMore. Required: StartIndex.

list_all_planful_user_approval_roles

Use this API to get the approval role(s) assigned to a user. To get the approval role data, provide userLogin as a query parameter. Returns: ApprovalRoleForUser, items, properties, IsSuccess. Required: userLogin.

create_a_planful_approval_role_upload

Use the ApprovalRolesUpload API to upload approval roles to the application. Returns: TaskId, Success, Message, DuplicateCheckStatusResult.

create_a_planful_user

This API allows you to create a new user(s) with specified roles and properties. When creating a new user within a tenant, if the user already exists in the same tenant group, their existing details will be automatically mapped to the current tenant where you are creating the new user. Returns: validationErrors, userId, isUserCreated, dpUserCreateResponse. Required: UserLogin, FirstName, NavigationRoleName.

planful_users_bulk_update

Use this API to edit the user-specified roles and properties. Identifies the user by UserLogin in the body. Returns: validationErrors, userId, Success. Required: UserLogin.

planful_users_bulk_delete

Use this API to delete a user from the application. To delete the user, provide userLogin as a query parameter. Returns: IsSuccess. Required: UserLogin.

create_a_planful_user_support_role

Use this API to update the user’s support role . Returns: IsSuccess. Required: UserLogin, SupportRole.

create_a_planful_user_task_manager_role

Use this API to update the user’s task manager role . The task manager roles are of two types: Admin User and Regular User . When you set the role to Admin User , the user can create a personalized checklist of tasks to manage the planning and consolidation process, along with adding tasks and subtasks for other users. While the Regular User can only comment on tasks and subtasks, and attach neces Returns: IsSuccess. Required: UserLogin, SupportRole.

create_a_planful_user_scenario_access

This API grants scenario access permission to the user. Returns: IsSuccess. Required: UserLogin, ScenarioCode.

list_all_planful_user_scenario_accesses

This API extracts a list of scenarios accessible to the user. To get the list of scenarios, provide userLogin as a query parameter. Returns: ScenarioMembers, items, IsSuccess. Required: UserLogin.

create_a_planful_user_scenario_access_removal

Use this API to remove scenario access assigned to the user. Returns: IsSuccess. Required: UserLogin, ScenarioCode.

create_a_planful_user_group_mapping

Use this API to map the user to a user group . Returns: Validations, Success. Required: UserLogin, UserGroup.

create_a_planful_user_group_unmapping

Use this API to unmap the user from a user group . Returns: Validations, Success. Required: UserLogin, UserGroup.

list_all_planful_user_groups

Use this API to generate the list of user groups mapped to a user. To get the user groups list, provide userLogin as a query parameter. Returns: Success, UserGroups, items. Required: UserLogin.

list_all_planful_version

Use this API to retrieve the current version and name of the Planful application. Returns: Version, Name.

Why Truto

Why use Truto’s MCP server for Planful

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 1000+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Start with Planful in a free sandbox, usually ready within one business day. No boilerplate, no maintenance burden.

01

Link your customer’s Planful account

Use Truto’s frontend SDK to connect your customer’s Planful account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Planful

Truto’s Proxy API is a 1-to-1 mapping of the Planful API. You call us, we call Planful, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Planful’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Planful on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication to Planful work through Truto?

Planful's APIs use token-based auth (including the X-Access-Token header for Dynamic Planning model endpoints). Truto handles token exchange, storage, and refresh so your end users complete a one-time connection and your app never touches raw credentials.

How does Truto handle Planful's 40MB data transfer limit?

For large payloads, Truto orchestrates Planful's chunked upload pattern — initiating a data transfer, pushing chunks via bulk update, and calling complete to finalize — so you can ship high-volume GL or transaction syncs without implementing the chunking logic yourself.

Can we push both GL/transactional actuals and Dynamic Planning model data?

Yes. Truto exposes tools for standard Data Load Rules (GL, transaction, and generic DLRs) as well as Dynamic Planning operations like model data loads, clears, metadata loads, and calculation runs.

Can we read calculated report data instead of reassembling it from raw GL?

Yes. The Planful report data search tool returns structured row/column headers and fully-calculated values from native Planful reports, so you can surface post-consolidation numbers without rebuilding the logic.

How do we keep organizational structures aligned between our product and Planful?

You can export budget entity hierarchies, attribute hierarchies, and segment data (segment 1, segment 2, and generic segments) to mirror the customer's Planful chart of accounts and org structure inside your app.

Does the integration support user and access management?

Yes. You can create users, bulk update or delete them, assign support and task manager roles, manage scenario access, and handle user group mappings and approval role uploads programmatically.

How do we monitor whether a data load actually succeeded?

Truto exposes endpoints to list all data load statuses and currently running data loads, so you can poll for completion, surface errors to users, and retry failed transfers from within your product.

Planful

Get Planful integrated into your app

Our team understands what it takes to make a Planful integration successful. A short, crisp 30 minute call with folks who understand the problem.