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 usUse Cases
Why integrate with Planful
Common scenarios for SaaS companies building Planful integrations for their customers.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
From the Blog
Planful integration guides
Deep dives, architecture guides, and practical tutorials for building Planful integrations.
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.