> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brandgate.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Build an ERP integration

> One path for any ERP, accounting system or business tool.

Follow these six steps for every system. They are the same whether you connect Fackhandelsdata, Visma, Business Central, Pyramid, Monitor, Odoo or something else.

**1. Choose how you get access**

* Connecting **one company**: ask a company admin for an [API key](/authentication) with the scopes you need.
* Building a **product for many brands**: register an [OAuth](/oauth) app once; each brand approves it.

Ask for the fewest scopes that do the job.

**2. Get a test company**

Never build against live data. Request a test company and key through [brandgate.dev/contact](https://www.brandgate.dev/contact). Read [the integration model](/integration-model) to agree who owns each field.

**3. Map the objects**

Write down how each object matches: products and stock on `sku`, customers on BrandGate `id` plus your own customer number, orders on BrandGate `id`. Keep the mapping in your system so every sync can find the pair.

**4. Build the sync**

Follow [Sync an ERP](/guides/erp-sync): orders into your system, an acknowledgement back, stock and other data out, a webhook for speed and a catch-up sweep for safety.

**5. Test the hard cases**

Run your integration against the test company: a cancelled order, an order with many lines, a retry after a crash, a stock level of zero, a rate limit, an expired token. See [troubleshooting](/troubleshooting).

**6. Go live**

Use the checklist below, then switch to the customer's credentials.

## Go-live checklist

* [ ] Webhook signatures are verified and old timestamps are rejected.
* [ ] Events already handled are skipped (`BrandGate-Event-Id`).
* [ ] The catch-up sweep runs even when webhooks work.
* [ ] Orders are stored by BrandGate `id` with a uniqueness rule, so retries never duplicate.
* [ ] You back off on `429` and use `Retry-After`.
* [ ] The key is in a secret manager and has only the needed scopes.
* [ ] You log the `request_id` of every failing call.
* [ ] You agreed with the company who owns stock, products, prices and customers.

## Get help from AI

Use the **Ask Assistant** box on every page for questions about these docs, or connect your own AI assistant to the [MCP server](/mcp) to explore a test company's real data.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.