MCP App Store
by KeenEthics

Overview

Dineo helps users review balances, cash flow, categories, counterparties, movements, and transfers in their authenticated account. It displays financial charts and, only on explicit request, creates or modifies Dineo records and validates movement batches before import. Dineo records financial activity but does not move money, execute payments, transfer crypto assets, or perform investment trades.

Tools

archive_category

ChatGPT
Use this only when the user explicitly asks to archive one active PARTIAL Dineo category. Read the category immediately before archiving and pass its exact updatedAt as expectedUpdatedAt. Archiving keeps historical movement associations and prevents new assignments. Generate a stable unique idempotencyKey and reuse it only for retries of the same request.

create_balance_adjustment

ChatGPT
Use this only when the user explicitly asks to reconcile one Dineo container to a known real-world balance. Read the container immediately before proposing the adjustment, convert its balance from minor units to the displayed major-unit amount, summarize the current balance, target balance, signed difference, currency, and date, and call this tool only after the user confirms that exact summary. Pass major-unit values as expectedCurrentBalance and targetBalance; the server rejects the write if the stored balance changed before the transaction. Generate a stable unique idempotencyKey and reuse it only for retries of this exact adjustment. Never use this to edit or delete an existing adjustment or its generated movement. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_category

ChatGPT
Use this only when the user explicitly asks to create one Dineo income or expense category. Resolve the company and optional parent category first; a child must have the same direction as its parent. Set categoryKind to PARTIAL for a temporary category; partial categories cannot have children and are subject to their own plan limit. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this to edit, move, archive, reactivate, or delete an existing category.

create_category_batch

ChatGPT
Use this only after validate_category_batch returned an executable draft and the user explicitly confirmed that exact category hierarchy, warnings and duplicates. Pass only companyId, batchDraftId and payloadHash; never reconstruct rows. The server revalidates and creates every category and parent relation in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact confirmed draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_container

ChatGPT
Use this only when the user explicitly asks to create one Dineo bank account or cash bag. Resolve the company and supported currency first, and ask for any required business detail that is missing. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this to edit or delete a container, move money, access an external bank, or attach files. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_counterparty_group

ChatGPT
Use this only when the user explicitly asks to create one Dineo counterparty group, such as customers, payers, suppliers, or service providers. Resolve the company first and choose whether the group belongs to inflows or outflows. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this to edit, deactivate, or delete an existing group.

create_counterparty_member

ChatGPT
Use this only when the user explicitly asks to add one Dineo counterparty member to an existing group. Resolve the company and group first, and preserve the group's inflow or outflow meaning. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this to edit, move, deactivate, or delete an existing member.

create_counterparty_member_batch

ChatGPT
Use this only after validate_counterparty_member_batch returned an executable draft and the user explicitly confirmed the exact members, groups, warnings and duplicates. Pass only companyId, batchDraftId and payloadHash; never reconstruct rows. The server revalidates and creates every member in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_movement

ChatGPT
Use this only when the user explicitly asks to record one new Dineo inflow or outflow. Resolve unknown company, container, category, or counterparty ids with the available read-only list tools first. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this for transfers, updates, deletes, or attachments. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_movement_batch

ChatGPT
Use this only after validate_movement_batch returned an executable draft and the user explicitly confirmed that exact company, container allocation, item count, totals, warnings, and payloadHash. Pass only the returned batchDraftId and payloadHash; never reconstruct or add rows here. The entire immutable draft is revalidated and created atomically, including automatic account-fee movements. Generate one stable idempotencyKey and reuse it only for retries of this exact confirmed draft. Never call this for an expired, blocked, changed, or unconfirmed draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_movement_import_authorization

ChatGPT
Use this only when the user explicitly asks to authorize future unattended or scheduled movement imports. Confirm once, in business terms, the authorization name, company, account or cash bag, and whether inflows, outflows, or both are allowed. The authorization has no expiration and remains active until revoked. It permits only creation of validated movement batches of at most 100 items; it never permits transfers, updates, deletions, or bypassing duplicate and ownership checks. Generate and reuse the idempotencyKey silently.

create_transfer

ChatGPT
Use this only when the user explicitly asks to record one transfer between two existing Dineo containers. Resolve unknown company, origin, or destination ids with list_companies and list_containers first. Generate a stable unique idempotencyKey and reuse it only for retries of the same request. Never use this for updates, deletes, external bank transfers, or attachments. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

create_transfer_batch

ChatGPT
Use this only after validate_transfer_batch returned an executable draft and the user explicitly confirmed that exact routes, amounts, currencies, rates, warnings, totals and payloadHash. Pass only its companyId, batchDraftId and payloadHash; never reconstruct rows here. The server revalidates and creates every transfer, both generated legs and automatic fees in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact confirmed draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

delete_movement

ChatGPT
Use this only when the user explicitly asks to permanently delete one specific manual Dineo movement. Read it immediately before deletion, summarize the selected movement, and call this tool only after the user confirms that exact summary; pass its exact updatedAt as expectedUpdatedAt. The movement must have originKind USER_ENTERED. Use delete_transfer for transfer-generated legs; never delete account fees or balance-adjustment movements with this tool. Generate a stable unique idempotencyKey and reuse it only for retries of this exact deletion.

delete_movement_batch

ChatGPT
Use this only after validate_movement_delete_batch returned an executable draft and the user explicitly confirmed permanent deletion of that exact movement list and totals. Pass only its companyId, batchDraftId, and payloadHash; never reconstruct ids here. The server revalidates every USER_ENTERED movement, checks each expectedUpdatedAt again, and permanently deletes all selected movements and their automatic fees in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact confirmed draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

delete_transfer

ChatGPT
Use this only when the user explicitly asks to permanently delete one specific internal Dineo transfer. Read it immediately before deletion, summarize its origin, destination, amounts, currencies, and date, and call this tool only after the user confirms that exact summary; pass its exact updatedAt as expectedUpdatedAt. Deleting the transfer also permanently removes its generated movement legs and related automatic fees. Generate a stable unique idempotencyKey and reuse it only for retries of this exact deletion. Never use this for an external bank transfer.

delete_transfer_batch

ChatGPT
Use this only after validate_transfer_delete_batch returned an executable draft and the user explicitly confirmed permanent deletion of that exact transfer list and totals, including generated legs and automatic fees. Pass only companyId, batchDraftId and payloadHash; never reconstruct ids here. The server checks all expectedUpdatedAt values and deletes every confirmed transfer in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

execute_non_destructive_write_plan

ChatGPT
Use this for a scheduled task or one explicit user request that requires two or more non-destructive Dineo creations or balance adjustments. Resolve names, ambiguities, and current balances with read-only tools first. Steps run once in order and may bind an argument to a prior result. Every delegated tool retains its ownership, plan-limit, validation, idempotency, and audit rules. Stop after the first failure; earlier successful steps are not rolled back. Use execute_write_plan for any plan containing updates, deletions, or other destructive mutations.

execute_preapproved_movement_batch

ChatGPT
Use this immediately after validate_preapproved_movement_batch returns executable=true and requiresConfirmation=false for an unattended or scheduled import. Do not request another user confirmation: the persistent authorization is the approval. Pass the returned internal companyId, batchDraftId, payloadHash, and authorizationId unchanged. The server rechecks that the authorization is still active and that every movement uses its company, account, and allowed direction, then creates the immutable draft atomically. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

execute_write_plan

ChatGPT
Use this when one explicit user request requires two or more Dineo write actions that would otherwise need separate write tools. Resolve names, ambiguities, current timestamps and validation drafts with read-only tools before this call. Put every authorized write in operations so ChatGPT presents one confirmation for the complete business plan. Steps run once in order and may bind an argument to a prior step result with JSON Pointers. Dineo applies each existing tool's ownership, validation, concurrency, idempotency and audit rules. Stop after the first failed step. Completed earlier steps are not rolled back, so describe the whole plan accurately and never add unrelated work. Use the individual write tool when only one action is needed.

get_authenticated_dineo_user

ChatGPT
Use this whenever the user asks which person, user, identity, email, or Dineo login is currently authenticated or connected in ChatGPT, including questions such as "¿con qué cuenta de Dineo trabajas?". This is the only tool for identifying the connected user. Returns display name and primary email without internal IDs or authentication details. Do not use subscription or company tools for this question.

get_cash_flow

ChatGPT
Use this when the user asks to see or analyze Dineo inflows, outflows, net cash flow, or how money evolved over time. Resolve the company, requested period, and optional account or wallet from the conversation before calling it. Unless the user explicitly requests text-only or raw data, you must immediately call render_cash_flow_chart with this tool's structuredContent unchanged before answering. To change the period or account shown later, call this tool again and render the new result. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_category

ChatGPT
Use this when the user asks for one known Dineo category or before editing it, especially to verify its direction, parent category, system-managed status, and updatedAt value.

get_category_breakdown

ChatGPT
Use this when the user asks to see or compare which Dineo income or expense categories account for the most money or what percentage each represents. Resolve the company, requested period, and optional account or wallet first. Unless the user explicitly requests text-only or raw data, you must immediately call render_category_breakdown_chart with this tool's structuredContent unchanged before answering. For another period or account, get and render fresh data. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_company_dashboard

ChatGPT
Use this when the user asks for a Dineo financial overview, balances, movement counts, or net cash flow as reusable data. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_container

ChatGPT
Use this when the user asks for the current details of one known Dineo account or cash bag, or before an action that needs its exact currency, balance, fee configuration, or updatedAt value. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_counterparty_group

ChatGPT
Use this when the user asks for one known Dineo counterparty group or before editing it, to verify its direction, linked category, active status, and updatedAt value.

get_counterparty_member

ChatGPT
Use this when the user asks for one known payer, payee, customer, supplier, or other Dineo counterparty member, or before editing that member.

get_counterparty_member_breakdown

ChatGPT
Use this when the user asks to see or compare how money associated with one Dineo counterparty group is distributed among its members. Resolve the company, group, and requested period first; the group's direction is applied automatically. Unless the user explicitly requests text-only or raw data, you must immediately call render_counterparty_member_breakdown_chart with this tool's structuredContent unchanged before answering. For another period or group, get and render fresh data. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_financial_summary

ChatGPT
Use this after resolve_financial_scope whenever the user asks for a financial total, movement count, comparison, or whether matching movements exist for categories, counterparty groups, or members. Pass suggestedScope unchanged, plus the requested company, period, optional account, and currency. This server-side aggregation is complete and unpaginated; it is the only authoritative source for such claims. Keep currencies separate and never replace it with list_movements or manual arithmetic. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_movement

ChatGPT
Use this when the user asks for one known Dineo movement or before editing or deleting it. Inspect originKind and transferId before choosing a mutation tool; only USER_ENTERED movements may be edited or deleted directly. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

get_movement_import_context

ChatGPT
Use this when interpreting a bank statement or other document containing movements, after resolving exactly one company. It returns the active containers, category hierarchy, counterparties, currencies, and import limits needed to propose Dineo movements. Ask the user to choose the company or target container when the source document does not identify them; infer categories and counterparties only as reviewable proposals.

get_subscription_status

ChatGPT
Use this only when the user asks for the authenticated Dineo user's current plan, payment status, access status, enabled features, or plan limits. Plans and subscriptions belong to the authenticated user, never to a company; a per-company limit only describes where the user's limit is measured. It returns the connected user's display name and primary email as basic account context, plus ChatGPT App rate and monthly usage, remaining quotas, and reset times. Prefer get_authenticated_dineo_user when the user asks only which Dineo account or user is connected.

get_transfer

ChatGPT
Use this when the user asks for one known Dineo internal transfer or before editing or deleting it. This returns the transfer and its generated movement identifiers but performs no mutation. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

list_balance_adjustments

ChatGPT
Use this when the user asks how or when a Dineo container balance was reconciled to a target amount. This only reads recorded balance adjustments and never changes the balance. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

list_categories

ChatGPT
Use this when the user describes an inflow or outflow category by name and you need to resolve category ids. By default it returns only active categories eligible for new movement assignments. Set includeInactive=true only for historical lookup or analysis; inactive categories must never be assigned to new movements.

list_companies

ChatGPT
Use this when the user asks which Dineo companies or financial workspaces are available.

list_containers

ChatGPT
Use this when the user refers to a Dineo account, cash bag, origin, or destination by name and you need to resolve its container id before reading or writing financial data. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

list_counterparties

ChatGPT
Use this when the user names a payer, payee, customer, supplier, or other counterparty and you need to resolve optional group and member ids before calling create_movement.

list_movement_import_authorizations

ChatGPT
Use this when the user asks which recurring or scheduled movement imports are authorized, wants to revoke one, or when an unattended task must resolve the active authorization that matches its named purpose. Match by authorization name and human-readable company/account details; do not mention the internal authorization id unless the user explicitly requests diagnostics.

list_movements

ChatGPT
Use this when the user wants to find or inspect individual Dineo financial movements as reusable, paginated data. Never use this paginated tool to calculate totals, counts, comparisons, or to claim that no movements exist; use resolve_financial_scope followed by get_financial_summary for those factual financial answers. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

list_supported_currencies

ChatGPT
Use this when the user asks which currencies Dineo supports or before creating a container whose currency is not yet known. This only returns Dineo's currency catalog and does not query exchange rates.

list_transfers

ChatGPT
Use this when the user wants to search, filter, compare, or identify internal transfers recorded in Dineo. This never queries or initiates external bank transfers. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

reactivate_category

ChatGPT
Use this only when the user explicitly asks to reactivate one archived PARTIAL Dineo category so it can be assigned to new movements again. Read the category immediately before reactivation and pass its exact updatedAt as expectedUpdatedAt. Reactivation is subject to the active partial-category plan limit. Generate a stable unique idempotencyKey and reuse it only for retries of the same request.

render_cash_flow_chart

ChatGPT
Use this immediately after get_cash_flow for every cash-flow request unless the user explicitly requested text-only or raw data. This tool is the required presentation step that displays the inline line chart; never describe a chart as shown without calling it. Pass get_cash_flow structuredContent unchanged as data. If the user asks for another period or account, call get_cash_flow again and render the new result.

render_category_breakdown_chart

ChatGPT
Use this immediately after get_category_breakdown for every request to see or compare category totals unless the user explicitly requested text-only or raw data. This is the required presentation step for the inline hierarchical ranking; never describe it as shown without calling this tool. Pass get_category_breakdown structuredContent unchanged as data. For another period or account, get and render fresh data.

render_counterparty_member_breakdown_chart

ChatGPT
Use this immediately after get_counterparty_member_breakdown for every request to see or compare a group's member distribution unless the user explicitly requested text-only or raw data. This is the required presentation step for the inline pie chart; never describe it as shown without calling this tool. Pass get_counterparty_member_breakdown structuredContent unchanged as data. For another period or group, get and render fresh data.

resolve_financial_scope

ChatGPT
Use this before answering a financial total, count, comparison, or claim that no movements exist when the user refers to categories, counterparty groups, or members by name. It finds every relevant entity and complete hierarchy path. When suggestedScope is present, pass it unchanged to get_financial_summary. When requiresClarification is true, ask the user to choose using the returned names and paths before querying totals.

resolve_movement_time

ChatGPT
Use this before creating or changing financial timestamps. For now use mode=now: the server supplies the current instant, regardless of server location. For an explicit local date/time use mode=local with localDateTime and an explicitly established IANA timeZone. For today/yesterday at an explicit time use mode=relative with daysAgo=0/1 and localTime plus timeZone; the server resolves the calendar date. For an already known offset timestamp use mode=instant. Never infer timeZone from currency, language or server location. Ask when the intended zone or time is unknown. Ambiguous/nonexistent daylight-saving times are rejected; clarify with the user then supply an explicit offset via mode=instant. Copy returned occurredAt unchanged into writes and preserve it for retries. This tool never writes data.

revoke_movement_import_authorization

ChatGPT
Use this only when the user explicitly asks to stop or revoke one recurring movement-import authorization. Resolve it with list_movement_import_authorizations and confirm the human-readable authorization name, company, and account. Revocation is permanent; creating another authorization later requires a new explicit request.

set_category_parent

ChatGPT
Use this only when the user explicitly asks to move one Dineo category under another category or promote it to the root. Read both categories first, pass the moved category's exact updatedAt as expectedUpdatedAt, and use null parentCategoryId for the root. Parent and child must share a direction and the move must not create a cycle. Call this separately for each child in a multi-category request.

update_category

ChatGPT
Use this only when the user explicitly asks to rename one existing Dineo category, change its description, or convert it between STANDARD and PARTIAL. Read the category immediately before updating and pass its exact updatedAt as expectedUpdatedAt. A category with children cannot become PARTIAL. Use set_category_parent for hierarchy changes and archive_category or reactivate_category for partial-category state changes. Generate a stable unique idempotencyKey and reuse it only for retries of the same edit. Never use this to delete a category.

update_category_batch

ChatGPT
Use this only after validate_category_update_batch returned an executable draft and the user explicitly confirmed its exact before/after hierarchy. Pass only companyId, batchDraftId and payloadHash; never reconstruct edits. The server revalidates every category and expectedUpdatedAt and applies all names, descriptions and parent changes in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

update_counterparty_group

ChatGPT
Use this only when the user explicitly asks to rename one existing Dineo counterparty group or change its description. Read the group immediately before updating and pass its exact updatedAt as expectedUpdatedAt. Generate a stable unique idempotencyKey and reuse it only for retries of the same edit. Never use this to change its direction, deactivate it, or delete it.

update_counterparty_member

ChatGPT
Use this only when the user explicitly asks to edit one existing Dineo counterparty member's name, reference code, or description. Read the member immediately before updating and pass its exact updatedAt as expectedUpdatedAt. Generate a stable unique idempotencyKey and reuse it only for retries of the same edit. Never use this to move, deactivate, or delete a member.

update_counterparty_member_batch

ChatGPT
Use this only after validate_counterparty_member_update_batch returned an executable draft and the user explicitly confirmed its exact before/after list. Pass only companyId, batchDraftId and payloadHash; never reconstruct edits. The server revalidates every member and expectedUpdatedAt and applies all confirmed changes in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

update_movement

ChatGPT
Use this only when the user explicitly asks to edit one existing Dineo movement. Read it immediately before updating and pass its exact updatedAt as expectedUpdatedAt; resolve any new categories or counterparties first. Null counterparty ids remove those relationships, while an empty description or notes clears that text. Generate a stable unique idempotencyKey for the exact edit. Never use this for transfer-generated legs, balance-adjustment movements, deletes, attachments, container changes, movement-type changes, or currency changes. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

update_movement_batch

ChatGPT
Use this only after validate_movement_update_batch returned an executable draft and the user explicitly confirmed that exact before/after summary. Pass only its companyId, batchDraftId, and payloadHash; never reconstruct edits here. The server revalidates every manual movement, checks each expectedUpdatedAt again, and applies all edits and automatic fee effects in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact confirmed draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

update_transfer

ChatGPT
Use this only when the user explicitly asks to edit one existing internal Dineo transfer. Read it immediately before updating and pass its exact updatedAt as expectedUpdatedAt. For amount changes, preserve the transfer currencies and provide a consistent exchange rate; same-currency transfers require equal amounts and rate 1. Generate a stable unique idempotencyKey for the exact edit. Never change containers or currencies, initiate an external bank transfer, delete the transfer, or attach files. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

update_transfer_batch

ChatGPT
Use this only after validate_transfer_update_batch returned an executable draft and the user explicitly confirmed that exact before/after summary. Pass only companyId, batchDraftId and payloadHash; never reconstruct edits here. The server revalidates every transfer, checks all expectedUpdatedAt values, and updates transfers, generated legs and automatic fees in one transaction or none. Generate one stable idempotencyKey and reuse it only for retries of this exact draft. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_category_batch

ChatGPT
Use this when the user wants to create 1 to 100 Dineo categories together. Resolve the company and any existing parents first. A category may reference an existing parentCategoryId or a parentClientItemId from this same batch, never both. This tool validates directions, hierarchy, plan limits and likely duplicates and persists an expiring immutable validation draft only when executable; it does not create categories. Show the exact hierarchy, warnings and duplicate matches, then ask for confirmation before create_category_batch. Use duplicateResolution=ALLOW only after explicit acceptance. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_category_update_batch

ChatGPT
Use this when the user wants to rename, redescribe, move, or convert between STANDARD and PARTIAL for 1 to 100 existing Dineo categories together. Read every category first and pass its exact updatedAt. parentCategoryId may be an existing category id or null to promote to root; direction and active state cannot change, and categories with children cannot become PARTIAL. This tool validates the final hierarchy as a whole, including cycles and plan limits, rejects stale and no-op rows, and persists an immutable validation draft only when executable; it does not modify categories. Show exact before/after values and ask for confirmation before update_category_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_counterparty_member_batch

ChatGPT
Use this when the user wants to add 1 to 100 counterparties to existing Dineo groups. Resolve the company and each exact group first; ask when a group name is ambiguous. This tool validates ownership, plan access and member fields, reports likely duplicates by group, name or referenceCode, and persists an immutable validation draft only when executable; it does not create counterparties. Show the exact group assignment and warnings and ask for confirmation before create_counterparty_member_batch. Use duplicateResolution=ALLOW only after explicit acceptance. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_counterparty_member_update_batch

ChatGPT
Use this when the user wants to rename, redescribe or change the reference of 1 to 100 existing counterparty members. Resolve and read each exact group and member first and pass its updatedAt. Members cannot move between groups and active state cannot change. This tool rejects stale, duplicate-id and no-op rows and persists an immutable before/after validation draft only when executable; it does not modify counterparties. Show the exact changes and ask for confirmation before update_counterparty_member_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_movement_batch

ChatGPT
Use this after interpreting a statement or document and resolving one company, one target container per row, and reviewable category/counterparty proposals. It validates 1 to 100 proposed movements without creating them, reports every invalid or potentially duplicate row, and creates an expiring immutable draft only when the batch is executable. Show the exact summary and doubtful classifications to the user; do not create anything until the user confirms that draft. Use duplicateResolution=ALLOW only after the user explicitly accepts a reported potential duplicate. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_movement_delete_batch

ChatGPT
Use this only after the user explicitly asks to permanently delete 1 to 100 specific manual Dineo movements. Read every movement first and pass its exact updatedAt. This tool performs no deletion, rejects stale, duplicate, transfer-generated, account-fee, and balance-adjustment rows, and creates an expiring immutable draft only when every movement is deletable. Show the exact movement list and totals and ask the user to confirm that draft before calling delete_movement_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_movement_update_batch

ChatGPT
Use this when the user wants to edit 1 to 100 existing manual Dineo movements together. Read every movement first, pass its exact updatedAt, and provide only the fields that should change. This tool performs no financial writes, rejects stale, duplicate, generated, invalid, or no-op rows, and creates an expiring immutable draft only when every edit is executable. Show the exact per-movement before/after summary and ask the user to confirm that draft before calling update_movement_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_preapproved_movement_batch

ChatGPT
Use this only for an unattended or scheduled import covered by an ACTIVE persistent authorization resolved with list_movement_import_authorizations. It validates 1 to 100 new movements against the authorization's company, account, and allowed directions without changing financial data. The server supplies the authorized account; do not provide one per row. Any uncertain classification, warning, or potential duplicate blocks execution because no user is present to review it. When executable=true and requiresConfirmation=false, immediately call execute_preapproved_movement_batch with the unchanged internal draft values; do not ask the user for another confirmation. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_transfer_batch

ChatGPT
Use this when the user wants to record 1 to 100 internal transfers between existing Dineo containers. Resolve one company and both containers for every row first. It performs no financial writes, validates currencies, amounts, rates and references, reports potential exact duplicates, and creates an expiring immutable draft only when every row is executable. Show the exact routes, amounts, rates, warnings and totals; call create_transfer_batch only after the user confirms that draft. Use duplicateResolution=ALLOW only after explicit acceptance of a reported duplicate. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_transfer_delete_batch

ChatGPT
Use this only after the user explicitly asks to permanently delete 1 to 100 specific internal Dineo transfers. Read every transfer first and pass its exact updatedAt. It performs no deletion, rejects stale, missing or duplicate rows, and creates an expiring immutable draft only when every transfer is deletable. Show the exact routes, amounts, dates and totals and explain that generated legs and automatic fees will also disappear; ask for confirmation before delete_transfer_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

validate_transfer_update_batch

ChatGPT
Use this when the user wants to edit 1 to 100 existing internal Dineo transfers together. Read every transfer first, pass its exact updatedAt, and provide only amounts, rate, date or text fields that should change. Containers and currencies cannot change. This tool rejects stale, duplicate, invalid and no-op rows and persists an expiring immutable validation draft only when every edit is executable; it does not modify transfers. Show the exact before/after summary and ask for confirmation before update_transfer_batch. For user-facing money, use the monetaryValues entries in the result's text content, matching sourcePath to the structuredContent field, and display major with its currency. The major value is an exact decimal string, with a decimal point and no grouping separators; do not rescale it. Fields ending in Minor are internal scaled integers, not whole currency units. Keep different currencies separate; never infer currency from an account name.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

71

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily