Developer guide

Migrate to Ondes PRO from another tool, with the API and AI

Switching business software usually stalls on one thing: getting the data across. This guide shows how to import your catalogue, customers and open invoices into Ondes PRO through the REST API, handing the tedious part — reading the export, mapping columns, checking every row — to your AI assistant connected over MCP, and only writing for real after a clean dry run.

The Ondes PRO teamUpdated on
.ondes.pro/mcp/

Type your workspace name: the configurations on this page adapt. It is remembered in this browser only.

What can be imported into Ondes PRO, and in what order?

Anything with a writable API v1 resource can be imported: store categories and products (shop/categories, shop/produits, then shop/images-produit for galleries), inventory components (inventory/composants), billed customers (billing/clients), prospect records (crm/fiches), quotes and invoices (billing/devis, billing/lignes-devis, billing/factures). Order matters because objects reference each other: a category before its products, a customer before their quotes, a quote before its invoice.

In Ondes PRO, an invoice is born from a quote and is never deleted — that is the legal retention requirement. An import mistake on an invoice cannot be undone with one click, which is why the dry run below matters. For invoices already settled, filing the old tool’s PDFs in the Drive is often enough; importing unpaid invoices, on the other hand, lets payment reminders go out from Ondes PRO.

Import your data into Ondes PRO, step by step

Running example: Atelier Lumen is bringing over 412 products, 1,380 customers and 37 invoices awaiting payment.

  1. Export from the old tool

    Get one CSV file per object type: products, customers, open invoices with their lines. Keep the original identifiers in a column: they become your idempotency keys and your mapping table.

  2. Connect your assistant to your workspace

    Connect Claude Code, Cursor or another MCP client to your workspace’s server through OAuth (see compatible clients). For an unattended script, create a dedicated key with shop:write and billing:write instead, and revoke it once the migration is done.

    bash
    claude mcp add --transport http ondes https://your-workspace.ondes.pro/mcp/
  3. Have the column mapping drafted

    Hand the export to the assistant. It reads each resource sheet with ondes_ressource — required fields, types, accepted values — and drafts a mapping: “Label” to name, “Net price” to price, “Ref.” to sku. Review it: this is the one moment a human really has to decide.

  4. Dry-run a sample

    Ask the assistant to validate a dozen rows with simuler: true: the server checks each body and answers as it would for a real creation, without saving anything. Bad formats (prices with a currency symbol, VAT written “20 %”, country names spelled out) surface here, field by field.

  5. Import in batches of 100

    POST /api/v1/<resource>/lot/ writes up to 100 objects in one transaction: if a single row is rejected, the whole batch rolls back and the response points to the row and the reason. Add an Idempotency-Key derived from the batch’s original identifiers, so re-running after a dropped connection creates no duplicates.

  6. Bring billing over last

    Create quotes and their lines first (a quote’s numero is optional: left empty, it takes the company’s sequence), then one invoice per quote. Dry-run each invoice before the real write: once created, it can no longer be deleted.

  7. Check the result

    Compare totals: number of products, number of customers, amount of open invoices. The ?search= filter on shop/produits (name or SKU) and billing/clients (name or email) quickly finds a missing row. The assistant can produce this reconciliation report itself.

The assistant reads the export and dry-runs before writing

Claude Code · Example conversation · demo data (Atelier Lumen)
  1. You : Here is products-export.csv (412 rows). Import it into the store, but show me what breaks first.
  2. MCP tool : ondes_ressource shop/produits sheet: name and price required, price is a decimal, compare_at_price and sku optional.
  3. MCP tool : ondes_appeler POST shop/produits with simuler: true on 10 rows — 8 valid, 2 rejected: invalid price (“245,00 €”).
  4. Assistant : The mapping holds, with one catch: the “Net price” column includes the euro sign and a decimal comma. I will convert it to 245.00. The 14 rows without a SKU (including the black Tripod lamp) will be created without a reference. Shall I import in five batches of 100 and one of 12, each with an idempotency key taken from the original identifier?
  5. You : Yes, for real.
  6. MCP tool : ondes_appeler POST shop/produits/lot/ × 5 then × 1 — real mode stated, 412 products created, no row rejected.
  7. Assistant : 412 products created. Categories and images next, or customers?

A customer batch body

Each operation carries its method and its data; an id is only required to update or delete an existing object.

bash
curl -X POST https://your-workspace.ondes.pro/api/v1/billing/clients/lot/ \
  -H "Authorization: ApiKey opk_…" \
  -H "Idempotency-Key: customer-import-batch-001" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [
      {"methode": "POST", "donnees": {"nom": "Brasserie La Canopée", "email": "accounts@lacanopee.com", "ville": "Nantes"}},
      {"methode": "POST", "donnees": {"nom": "Galerie Ressac", "societe": "Ressac SAS", "siret": "…", "ville": "Biarritz"}}
    ]
  }'

A hundred operations per batch at most. One rejection, and nothing is written.

Classic data-migration traps

  • Duplicate customers: the same customer entered twice in the old tool. De-duplicate on email or company registration number before importing; the assistant can do it on the CSV.
  • Gross amounts mistaken for net: Ondes PRO prices and lines are entered excluding VAT, with a VAT rate per line. Check on two or three invoices that the recomputed totals match.
  • Images: they are uploaded separately, as multipart, to shop/images-produit once products exist. A batch does not carry files.
  • Companies: if your workspace holds subsidiaries, each object belongs to the company of the call. Import company by company, without mixing files.
  • The forgotten key: revoke the migration key at the end. An OAuth connection is cut by name from the MCP tab.

What if I don’t have a developer?

Without a developer, the same path works from Claude Desktop or claude.ai: you drop the export into the conversation, the assistant connected to your workspace drafts the mapping, dry-runs, then imports once you agree. Every real write is labelled as such in its response.

For large volumes or a multi-company migration, onboarding support is available as an add-on (see pricing). And if you would rather see the product with realistic data first, the demo stays open for 72 hours.

Going further

Frequently asked questions

Can I import a product catalogue through the API?

Yes. Categories go through shop/categories, products through shop/produits (name and price required, SKU optional) and galleries through shop/images-produit. The lot/ endpoint writes up to 100 of them per transaction.

Can I bring over invoices from my old software?

Yes, but an Ondes PRO invoice is born from a quote and is never deleted. You create the customer, the quote and its lines, then the invoice, dry-running first. Many businesses only import unpaid invoices and archive the rest as PDFs.

How do I avoid creating the same data twice if the import stops halfway?

Send an Idempotency-Key derived from the original identifiers on every write or batch. Replayed with the same body, the call returns the response it already got without creating anything again.

Does the AI write straight into my data?

Only when you ask it to. It starts by reading the resource sheets and dry-running writes with simuler: true, which saves nothing. Every response states whether the write was a dry run, a test-mode attempt or real.

What happens if one row in a batch is invalid?

The whole batch is rolled back, nothing is written, and the response says which operation failed and why. You fix the row and re-run the batch under a new idempotency key: a changed body under the same key would get a 409.

Do I need a specific plan to migrate through the API?

No. The REST API, the batch endpoint and the MCP server are included in every Ondes PRO plan. For a large migration, onboarding support is available as an add-on.

Plug your AI into your business

The MCP server is included in every plan, with no add-on or extra fee.

Read next