Skip to navigation

Developing for Solvimon

Use LLMs and AI coding agents to build your Solvimon integration: machine-readable docs, an installable agent skill, plus an MCP server that lets your agent call the Solvimon API directly.

Looking to use Claude as a billing copilot rather than build an integration? See the Claude integration instead.


Using the documentation with LLMs

llms.txt

The llms.txt standard helps LLMs index documentation efficiently, similar to how a sitemap helps search engines. We host two files:

Paste either URL into your AI tool, or reference it from your agent’s instructions file (for example CLAUDE.md or .cursorrules):

Agent instructions
When working on Solvimon billing code, consult https://docs.solvimon.com/llms.txt
to find the relevant documentation pages.

The Solvimon agent skill

Agent Skills are instruction files that coding agents such as Claude Code load on demand. The solvimon skill gives your agent a working knowledge of the platform: the API surface across all four domains, status lifecycles, the meter-to-invoice setup workflow, event ingestion semantics, and common pitfalls like invoice grace periods and asynchronous event deduplication.

Install it with the skills CLI:

npx skills add https://docs.solvimon.com

The skill pairs well with the MCP server below: the skill tells your agent how Solvimon works, and the MCP server lets it act on your sandbox.

The Solvimon MCP server

The Model Context Protocol (MCP) is an open standard that lets AI tools call external services. The Solvimon MCP server exposes the Solvimon API as a set of tools, so a coding agent can create meters, pricing plans, and test customers in your sandbox while you build, instead of you hand-writing API calls to set up test data.

The server runs at https://test.mcp.solvimon.com and authenticates with OAuth: add the URL to your agent, sign in with your Solvimon Desk account in the browser, and approve access. There’s no API key to copy, and the agent gets exactly the permissions you have in Desk.

Test environment. The test.mcp.solvimon.com endpoint connects to your test sandbox, so agents can experiment freely without touching live billing data. Production access (https://mcp.solvimon.com) is enabled per account; contact us to get set up.

Connect your coding agent

Add the server by URL:

Add Solvimon's MCP to Claude Code
claude mcp add --transport http solvimon-test https://test.mcp.solvimon.com

Then run /mcp inside Claude Code, select solvimon-test, and choose Authenticate to sign in.

Choose a platform

If you approved access to more than one platform during sign-in, the server won’t pick one for you. Name the platform with an X-PLATFORM-ID header. You find the platform ID in Desk under Settings → General.

Claude Code
claude mcp remove solvimon-test
claude mcp add --transport http solvimon-test https://test.mcp.solvimon.com --header "X-PLATFORM-ID: <platformId>"
Cursor / VS Code
"solvimon-test": {
"url": "https://test.mcp.solvimon.com",
"headers": { "X-PLATFORM-ID": "<platformId>" }
}

The header pins every call on the connection to one platform. To keep access to several platforms, leave it out and let the agent pass platform_id on each tool call instead, see Tool reference.

For non-interactive environments such as CI, where nobody can sign in through a browser, send a test API key (Desk → Settings → API keys) in the X-API-KEY header. A test key only works against the test endpoint.

Claude Code
claude mcp add --transport http solvimon-test https://test.mcp.solvimon.com --header "X-API-KEY: <apiKey>"
Cursor / VS Code
"solvimon-test": {
"url": "https://test.mcp.solvimon.com",
"headers": { "X-API-KEY": "<apiKey>" }
}

For Claude Desktop and claude.ai setup, see the Claude integration.


Tool reference

The MCP server exposes 29 tools. They are split into read tools (get_*, analytics, solvimon_api_call), which never change data, and write tools (write_*, create_*, forget_customer), which do. Keeping reads and writes apart lets you allow an agent to explore freely while still approving every change.

Most tools follow the same input pattern:

FieldMeaning
actionWhat to do: list, get, create, update, and tool-specific actions
resource_typeWhich resource, for tools that cover more than one
idResource id or reference, for single-resource actions
bodyRequest body for create/update, same shape as the REST API
filterQuery params for list actions as string key/value pairs, e.g. {"limit": "20"}
platform_idWhich platform to act on. Only needed when an OAuth authorization granted access to more than one platform; omit it on an API-key connection.

Overview

Account and setup

ToolWhat it does
get_solvimon_accountVerify the connection and list billing entities. Call first.
get_billing_entitiesRead billing entities and their tax registrations
write_billing_entityUpdate a billing entity; add or remove tax registrations
get_usersRead the Solvimon users of the account (e.g. to resolve a quote owner)

Product catalog and pricing

ToolWhat it does
get_product_catalogRead product categories, products, product items, features
write_product_catalogCreate and manage the catalog, including lifecycle actions
get_pricing_plansRead pricing plans and plan versions
write_pricing_planCreate pricing plans and plan versions
get_agent_contextRead the agent guidance stored on a plan, product, item or quote template
write_agent_contextSet or clear that agent guidance

Metering

ToolWhat it does
get_meteringRead meters, meter values, calculations, properties, meter data, events
write_meteringIngest, batch-ingest or price usage events; delete meter config
create_meter_setupShortcut: meter, meter value, and calculation in one call

Customers and subscriptions

ToolWhat it does
get_customersList, get or search customers; read entitlements
write_customerCreate and manage customers
forget_customerGDPR erasure of a customer’s personal data
get_subscriptionsRead subscriptions and subscription groups
write_subscriptionCreate and manage subscriptions, including init, cancel and void
create_checkout_linkHosted checkout URL for self-serve signup

Quotes

ToolWhat it does
get_quotesRead quotes, versions, schedules, templates, approval policies and requests, custom fields
create_quoteBuild a DRAFT quote in one call, with a validate-first dry run
write_quoteEdit quotes and move them through finalize → accept/reject → subscription

Invoicing and payments

ToolWhat it does
get_invoicesRead or preview invoices, payments, payment schedules
write_invoiceCreate, pay, credit, refund and send invoices; manage payments and schedules

Wallets and credits

ToolWhat it does
get_wallets_creditsRead credit types, wallet types, wallets
write_wallets_creditCreate and manage credit types, wallet types, wallets

Automation, analytics and raw access

ToolWhat it does
get_workflowsRead workflows and their actions
analyticsRead-only queries on dashboard data (revenue, MRR, churn, usage)
solvimon_api_callRead-only raw API passthrough for anything not covered above

A typical setup flow chains the tools in dependency order:

get_solvimon_account → write_product_catalog → create_meter_setup (if usage-based)
→ write_pricing_plan → create_checkout_link or write_subscription (init)

A typical sales flow:

get_customers → get_pricing_plans → create_quote (validate, then apply)
→ write_quote (finalize → accept → create_subscription)

Account and setup

get_solvimon_account

Verifies credentials and returns the billing entities you have access to. Takes no input besides the optional platform_id. This is a good first call to confirm the server is correctly configured and to pick a billing_entity_id.

get_billing_entities

Read-only access to billing entities (the legal entities that issue invoices) and their tax registrations.

Actions: list, get, list_tax_registrations

List tax registrations of a billing entity
{"action": "list_tax_registrations", "id": "bile_Kq2mVx8RnT4uLpWe9AhZ3"}

write_billing_entity

Updates a billing entity and manages its tax registrations (for example a branch office in another country). add_tax_registration appends to the existing registrations, so it is safe to call repeatedly. remove_tax_registration takes the tax_registration_id returned by get_billing_entities.

Actions: update, add_tax_registration, remove_tax_registration

Add a tax registration
{
"action": "add_tax_registration",
"id": "bile_Kq2mVx8RnT4uLpWe9AhZ3",
"body": {
"description": "Amsterdam office",
"tax_id": "NL000099998B57",
"registration_number": "86385879",
"registered_address": {
"line1": "Frederiksplein 61",
"city": "Amsterdam",
"postal_code": "1017 XL",
"country": "NL"
}
}
}

get_users

Read-only access to the people and machine principals who log in to Solvimon — not customers. Use it to resolve the owner_user_id that create_quote requires.

Actions: list, get, search

search takes a filter, not a body. username is an exact match on the full login address and returns a single user (or 404). user_type (MORTAL, TOKEN, API, PROXY, EXTERNAL_CREDENTIALS) returns an unpaginated array of every user of that type, so prefer list with limit and page for browsing.

Find a sales rep by email
{"action": "search", "filter": {"username": "rep@acme.com"}}

Product catalog and pricing

get_product_catalog

Read-only access to what you sell. Prices live on pricing plans, not here.

Actions: list, get

Resource types: product_categories, products, product_items, features

List active products
{"action": "list", "resource_type": "products", "filter": {"status": "ACTIVE"}}

write_product_catalog

Defines the catalog structure and charge type. Hierarchy: product category (optional) → product → product items and features.

Actions: create, update, delete, activate, archive, deprecate (lifecycle actions apply to products and product items only)

Resource types: product_categories, products, product_items, features

Product item model_type options: RECURRING, PER_SEAT, USAGE_BASED (needs a meter_value_calculation_id), ONE_OFF, CREDITS (needs a credit_type_id). Features are non-billable entitlements such as rate limits or feature flags (NUMBER, AMOUNT, ENUM, SWITCH). On create, include agent_context: {guidance} in the body to record who the resource is for.

Create a usage-based product item
{
"action": "create",
"resource_type": "product_items",
"body": {
"name": "API calls",
"reference": "api-calls",
"product_id": "prod_Xw3nQr7KmY2vBs8TfLc41",
"model_type": "USAGE_BASED",
"meter_value_calculation_id": "mvc_Jh5tRw9PnX3kMq7VbYd28"
}
}

model_type is immutable after creation. Creating a product requires category_id, product_type (e.g. DEFAULT) and billing_entity_id alongside name and reference.

get_pricing_plans

Read-only access to pricing plans and plan versions. list is only supported for pricing_plans.

Actions: list, get

Resource types: pricing_plans, pricing_plan_versions

Get a plan version
{"action": "get", "resource_type": "pricing_plan_versions", "id": "ppve_Zt6yUw2QmK9nXr4VcHb37"}

write_pricing_plan

Creates and versions pricing plans. Supports flat, tiered (TIERED, STAIR_STEP, TOP_TIERED), per-seat and credit configurations, nested pricing rules on meter properties, pricing groups (pick-your-tier), per-tier entitlements, and multi-currency or multi-period configurations within a single version.

Actions: create, update, delete

Resource types: pricing_plans, pricing_plan_versions

Create a pricing plan
{
"action": "create",
"resource_type": "pricing_plans",
"body": {"name": "Pro", "reference": "pro", "amount_type": "EXCLUDING_TAX"}
}

To change pricing, create a new plan version, never a new plan. Once a version is ACTIVE it cannot be edited. Every config needs both billing_period (when the customer is invoiced) and pricing_period (the period the price applies to).

get_agent_context

Reads the agent guidance stored on a resource — why it exists, who it is for, and constraints to respect — returning only the resource’s identity fields plus agent_context. Use it when choosing which plan, product or quote template fits a request, and before writing new guidance.

Resource types: quote_templates, pricing_plans, products, product_items

Read the guidance on a plan
{"resource_type": "pricing_plans", "id": "ppla_Rm4kTx9WqZ2nVb7YcHd51"}

Guidance is advisory free text. It never outranks the user and cannot authorise a discount, skip an approval or any other action the user has not asked for.

write_agent_context

Sets or clears the agent guidance on a resource. It replaces the whole guidance string (max 2,500 characters), so read it first with get_agent_context and write back the merged text. An empty string clears it. Record intent and constraints (e.g. “annual enterprise deals only”), not what the object’s own fields already show, and never secrets or personal data.

Set guidance on a product
{"resource_type": "products", "id": "prod_Xw3nQr7KmY2vBs8TfLc41", "guidance": "Add-on for Pro plans only."}

Metering

get_metering

Read-only access to everything related to measuring usage. Check here for a compatible meter before creating a new one.

Actions: list, get

Resource types: meters, meter_values, meter_value_calculations, meter_properties, meter_data, events

Listing meter_data or events must be narrowed with filter.meter_id or filter.reference.

List recent events for a meter
{"action": "list", "resource_type": "events", "filter": {"meter_id": "metr_Pq8vLx2TnW5kRb3YcJd74", "limit": "20"}}

write_metering

Ingests usage events and deletes meter configuration. Creating meters goes through create_meter_setup.

Actions: ingest, batch_ingest, calculate (events), delete (meter config)

Resource types: meters, meter_values, meter_value_calculations, meter_properties, meter_data, events

Send one event per discrete unit of activity; do not pre-aggregate. Each event needs a unique reference (its idempotency key), meter_reference or meter_id, customer_id or customer_reference, and the measured amounts under meter_values[] as {reference, number} pairs. There is no flat value field.

Ingest a usage event
{
"action": "ingest",
"resource_type": "events",
"body": {
"reference": "evt-0001",
"meter_reference": "api-calls",
"customer_id": "cust_AbD3DqausjOYiMNDZY11F",
"meter_values": [{"reference": "api-calls-count", "number": "1"}]
}
}

Delete in dependency order: meter properties, then meter value calculations, then meter values, then meters. Product items that reference a meter must first be removed from active plan versions.

create_meter_setup

Creates a meter, a meter value, and a meter value calculation in one call. Returns the mvc_... id to set as meter_value_calculation_id on a USAGE_BASED product item.

ParameterRequiredDescription
meter_nameYesDisplay name for the meter (e.g. "API requests")
meter_referenceYesUnique reference slug (e.g. "api-requests")
value_nameYesDisplay name for the meter value (e.g. "count")
value_referenceYesUnique reference for the meter value
calculation_typeNoAggregation method: SUM (default), MAX, MIN, AVERAGE, or UNIQUE
calculation_nameNoCalculation name. Default <meter_name> <calc>.
calculation_referenceNoCalculation reference. Default <meter_reference>-<calc>.
value_typeNoData type of the meter value. Default NUMBER.
persistNoWhether to persist the calculation output. Default false.
Create a meter setup
{
"meter_name": "API requests",
"meter_reference": "api-requests",
"value_name": "count",
"value_reference": "api-requests-count",
"calculation_type": "SUM"
}

Customers and subscriptions

get_customers

Read-only access to customers — the legal counterparties on invoices — and their entitlements.

Actions: list, get, search, entitlements

get resolves a reference as well as an id. search takes a body of search_fields (substring match on name, reference, email or custom field value) and filter_fields (exact match on status, role, type, id, parent_customer_id, processing_only or custom_field). Paging and ordering go in filter. entitlements returns the feature values from the customer’s active pricing plan, including per-subscription overrides.

Search active customers
{
"action": "search",
"body": {
"search_fields": [{"value": "acme"}],
"filter_fields": [{"name": "status", "values": ["ACTIVE"]}]
},
"filter": {"limit": "15"}
}

Customers have no top-level name. Organizations carry organization.legal_name; individuals are best identified by email. reference is an external id (often a CRM record id), not a display name.

write_customer

Creates and manages customers. Types: ORGANIZATION (B2B) and INDIVIDUAL (B2C). Country drives tax calculation and is set inside the address: organization.registered_address.country or individual.residential_address.country. One organization can be the parent of several child customers for consolidated billing.

Actions: create, update, delete, activate, archive

Create a customer
{
"action": "create",
"body": {
"type": "ORGANIZATION",
"reference": "acme-001",
"timezone": "Europe/Amsterdam",
"organization": {
"legal_name": "Acme Corp",
"registered_address": {
"country": "NL",
"city": "Amsterdam",
"line1": "Keizersgracht 1",
"postal_code": "1015CJ"
}
}
}
}

type and timezone are immutable after creation; the timezone sets the invoice cut-off moment. A customer has no billing_entity_id or country_code field; the API rejects both.

forget_customer

GDPR erasure: permanently removes a customer’s personal data. Irreversible, so confirm with the user before calling it. write_customer with action: delete only removes the customer record.

Erase a customer's personal data
{"id": "cust_AbD3DqausjOYiMNDZY11F"}

get_subscriptions

Read-only access to subscriptions and subscription groups.

Actions: list, get

Resource types: pricing_plan_subscriptions, pricing_plan_subscription_groups

A list mixes BILLING (live contracts), QUOTE (proposals) and TEMPLATE (reusable shapes) records. Pass type: BILLING for anything describing actual business; unfiltered counts overstate the subscription base.

List live subscriptions
{"action": "list", "resource_type": "pricing_plan_subscriptions", "type": "BILLING"}

write_subscription

Creates and manages subscriptions. Use init to subscribe a known customer from your backend; use create_checkout_link for self-serve. Supports ramps (several schedules on one subscription), combined invoicing (combine: true), parent-child billing (variant: FORWARD_BILLING) and per-subscription entitlement overrides.

Actions: create, update, delete, init, cancel, void, archive, copy (the last five apply to pricing_plan_subscriptions only)

Resource types: pricing_plan_subscriptions, pricing_plan_subscription_groups

cancel ends the subscription at period end; void terminates it immediately; copy duplicates it in DRAFT with all schedules, discounts and commitments.

Subscribe an existing customer
{
"action": "init",
"resource_type": "pricing_plan_subscriptions",
"body": {
"pricing_plan_version_id": "ppve_Zt6yUw2QmK9nXr4VcHb37",
"customer_id": "cust_AbD3DqausjOYiMNDZY11F",
"billing_period": {"type": "MONTH", "value": 1}
}
}

Returns a hosted checkout URL. The customer and subscription are created automatically when the end-customer completes checkout. Returns checkout_url, pricing_plan_subscription_id and expires_at.

ParameterRequiredDescription
pricing_plan_version_idYesppve_... id of the plan version to activate
billing_entity_idNobile_... id. Defaults to your first billing entity.
billing_currencyNoISO 4217 currency. Default EUR.
billing_periodNoe.g. {"type": "MONTH", "value": 1}. Defaults to the platform default.
billing_timeNoEXACT (default, anniversary billing) or END_OF_PERIOD (calendar billing)
expiry_daysNoLink lifetime in days. Default 30.
success_urlNoHTTPS URL to redirect the customer to after checkout
Create a checkout link
{
"pricing_plan_version_id": "ppve_Zt6yUw2QmK9nXr4VcHb37",
"billing_period": {"type": "MONTH", "value": 1},
"billing_time": "EXACT",
"success_url": "https://acme.com/billing/done"
}

Quotes

get_quotes

Read-only access to everything quote-related, including approvals.

Actions: list, get (quote_versions supports get only)

Resource types: quotes, quote_versions, quote_schedules, quote_templates, approval_policies, approval_requests, custom_fields

A quote (quot_) holds versions (quve_), each backed by a subscription of type QUOTE. The commercial terms — discounts, commitments, enabled add-ons — live on the schedules, so read quote_schedules with filter.pricing_plan_subscription_id to see what a quote offers. Filter quotes by customer_id, owner_user_id (the rep) or status.

To check whether a quote needs sign-off before finalizing, read approval_policies with source_type: QUOTE_VERSION and compare the active rules against the quote. After finalizing, read approval_requests with source_id set to the quote version.

See the terms on a quote
{"action": "list", "resource_type": "quote_schedules", "filter": {"pricing_plan_subscription_id": "ppsu_Lw6nQx3TmR8vKb2YcPd19"}}

create_quote

Builds a DRAFT quote in one call: the quote, its first version, the quote subscription and its schedule, plus discounts, commitments and add-ons.

Run it with mode: validate (the default) first: it resolves the owner and checks the customer, plan version, contact and dates with zero writes. Call mode: apply once the rep has agreed the summary. Pass quote_id to finish a quote that failed or timed out part-way.

ParameterRequiredDescription
customer_idYesCustomer the quote is for
pricing_plan_version_idYesAn ACTIVE plan version
owner_user_id or owner_emailYes (one of)The Solvimon user who owns the quote
modeNovalidate (default) or apply
billing_currencyNoDefault EUR
initial_term, renewal_termNo{type, value}
auto_renewalNotrue or false
start_at, end_at, expires_atNoISO 8601 dates. end_at only for the first step of a ramp.
discount, commitmentNoSchedule shape: every element is a list item with an ids array
enabled_pricing_idsNoAdd-on pricings to enable
contact_id, quote_template_id, reference, custom_fieldsNoContact, template (defaults to an active one), subscription reference (e.g. CRM deal id), quote custom field values
Validate a quote with a 20% discount
{
"customer_id": "cust_AbD3DqausjOYiMNDZY11F",
"pricing_plan_version_id": "ppve_Zt6yUw2QmK9nXr4VcHb37",
"owner_email": "rep@acme.com",
"billing_currency": "EUR",
"initial_term": {"type": "MONTH", "value": 12},
"discount": {"totals": [{"percentage": "20"}]},
"mode": "validate"
}

create_quote stops at DRAFT on purpose. Finalizing, accepting, rejecting and converting to a subscription are separate, irreversible steps for a human to decide, done with write_quote.

write_quote

Edits quotes and moves them through their lifecycle.

Actions: create, update, delete, finalize, accept, reject, create_subscription (the last four apply to quote_versions only)

Resource types: quotes, quote_versions, quote_schedules, custom_fields

Lifecycle, in order: finalize (locks the version and triggers any approval policy) → accept or reject → create_subscription (turns an accepted quote into a live, charging subscription). A version is editable only while DRAFT; after a rejection, create a new version with action: create, resource_type: quote_versions, body: {quote_id}. Patch discounts and commitments on quote_schedules. Ramp steps are extra schedules and must be contiguous.

Finalize a quote version
{"action": "finalize", "resource_type": "quote_versions", "id": "quve_Hn5tWx8QmK3vRb6YcLd27"}

Each lifecycle step is irreversible. Confirm with the user before every one, and especially before create_subscription, which starts billing the customer.


Invoicing and payments

get_invoices

Read-only access to invoices, payments and payment schedules. Invoice status flow: DRAFT → OPEN → FINAL → PAID / CREDIT. preview estimates an invoice without finalising or creating anything.

Actions: list, get, preview (invoices only)

Resource types: invoices, payments, payment_schedules

Preview an invoice
{
"action": "preview",
"resource_type": "invoices",
"body": {
"customer_id": "cust_AbD3DqausjOYiMNDZY11F",
"billing_currency": "EUR"
}
}

write_invoice

Creates and manages invoices, payments and payment schedules. Invoices are generated automatically at the end of each billing period; use create for one-off manual invoices.

Actions by resource type:

  • invoices: create, update, pay, refund, credit, archive, send_by_email
  • payments: authorize, refund
  • payment_schedules: create, update, activate, cancel, pause

pay and refund need a PSP integration; send_by_email needs a Mailgun or SendGrid integration; credit issues a credit note against a finalised invoice.

Pay an invoice
{"action": "pay", "resource_type": "invoices", "id": "inv_Tq3mVx7RnW2kLb9YcHd45", "body": {"payment_method_id": "pm_Bx4nQr8KmY6vTs2WcJd83"}}

Wallets and credits

get_wallets_credits

Read-only access to prepaid credit models.

Actions: list, get

Resource types: wallets, wallet_types, credit_types

List wallet types
{"action": "list", "resource_type": "wallet_types"}

write_wallets_credit

Creates and manages credit types (the named unit, e.g. “API Credits”), wallet types (container configuration and expiry rules) and wallets (per-customer balances). For usage that needs invoice lines, use wallets and credits rather than NUMBER or AMOUNT features.

Actions: create, update (not for wallets), activate, deactivate, archive

Resource types: wallets, wallet_types, credit_types

Create a credit type
{
"action": "create",
"resource_type": "credit_types",
"body": {"name": "API Credits", "reference": "api-credits"}
}

Automation, analytics and raw access

get_workflows

Read-only access to workflows: automation rules that watch for an event (for example an invoice becoming overdue) and run actions in response (for example emailing the customer or pushing to an ERP). The trigger lives on the workflow (work_...); what it does lives in workflow_actions (wact_...), linked by workflow_id.

Actions: list, get

Resource types: workflows, workflow_actions

List the actions of a workflow
{"action": "list", "resource_type": "workflow_actions", "filter": {"workflow_id": "work_Gm7kTx4WqZ9nVb3YcRd62"}}

Only ACTIVE workflows and actions run. DRAFT configuration never fires.

analytics

Read-only queries over dashboard data: revenue (by product, plan, currency, month), MRR/ARR, churn and customer movement, usage, deferred and recognised revenue, and growth. Use the three actions in sequence:

  1. list_datasets returns available datasets and their datasetId
  2. list_fields returns each model’s dimensions and measures in model.field form
  3. query runs the query: {datasetId, measures[], dimensions[], filters[], timeDimensions[], order[][], limit}

The optional customer_id parameter scopes results to one or more customers (comma-separated).

Query invoiced revenue by product
{
"action": "query",
"query": {
"datasetId": "dast_Vc7wPx3TnR8mKq5YbJd92",
"measures": ["invoice_v2.invoice_line_base_rep_amount_sum"],
"dimensions": ["invoice_v2.product_names"]
}
}

solvimon_api_call

Read-only raw API request for anything no dedicated read tool covers. Returns {status, body}; a non-2xx response comes back in status rather than as an error.

ParameterRequiredDescription
methodYesGET, or POST to a /search or /download endpoint
pathYesAPI path starting with /v1/... (e.g. /v1/customers)
targetNoSolvimon service to call: CONFIG (default), TRANSACTION, EVENT, or IDENTITY
bodyNoRequest body, for /search reads
queryNoQuery parameters as a map of string → string
List products via the raw API
{"method": "GET", "path": "/v1/products", "query": {"limit": "10"}}

All other methods are refused. Writes go through the dedicated tool for the resource, which enforces its validation and lifecycle rules.